prior to python xthe effect of the *args and **args varargs call syntax could be achieved with built-in function named apply this original technique has been removed in because it is now redundant ( cleans up many such dusty tools that have been subsumed over the yearsit' still available in all python releasesthoughand you may come across it in older code in shortthe following are equivalent prior to python xfunc(*pargs**kargsapply(funcpargskargsnewer call syntaxfunc(*sequence**dictdefunct built-inapply(funcsequencedictfor exampleconsider the following functionwhich accepts any number of positional or keyword argumentsdef echo(*args**kwargs)print(argskwargsecho( = = ( {' ' ' ' in python xwe can call it generically with applyor with the call syntax that is now required in xpargs ( kargs {' ': ' ': apply(echopargskargs( {' ' ' ' echo(*pargs**kargs( {' ' ' ' both forms work for built-in functions in too (notice ' trailing for its long integers)apply(pow( ) pow(*( ) the unpacking call syntax form is newer than the apply functionis preferred in generaland is required in (technicallyit was added in was documented as deprecated in is still usable without warning in and is gone in and later apart from its symmetry with the collector forms in def headersand the fact that it requires fewer keystrokesthe newer call syntax also allows us to pass along additional arguments without having to manually extend argument sequences or dictionariesecho( = *pargs**kargs( {' ' ' ' ' ' normalkeyword*sequence**dictionary that isthe call syntax form is more general since it' required in xyou should now disavow all knowledge of apply (unlessof courseit appears in code you must use or maintain arguments