( the *feature is similarbut it only works for keyword arguments--it collects them into new dictionarywhich can then be processed with normal dictionary tools in sensethe *form allows you to convert from keywords to dictionarieswhich you can then step through with keys callsdictionary iteratorsand the like (this is roughly what the dict call does when passed keywordsbut it returns the new dictionary)def (**args)print(argsf({ ( = = {' ' ' ' finallyfunction headers can combine normal argumentsthe *and the *to implement wildly flexible call signatures for instancein the following is passed to by position and are collected into the pargs positional tupleand and wind up in the kargs keyword dictionarydef ( *pargs**kargs)print(apargskargsf( = = ( {' ' ' ' such code is rarebut shows up in functions that need to support multiple call patterns (for backward compatibilityfor instancein factthese features can be combined in even more complex ways that may seem ambiguous at first glance--an idea we will revisit later in this firstthoughlet' see what happens when and *are coded in function calls instead of definitions callsunpacking arguments in all recent python releaseswe can use the syntax when we call functiontoo in this contextits meaning is the inverse of its meaning in the function definition--it unpacks collection of argumentsrather than building collection of arguments for examplewe can pass four arguments to function in tuple and let python unpack them into individual argumentsdef func(abcd)print(abcdargs ( args +( func(*args same as func( similarlythe *syntax in function call unpacks dictionary of key/value pairs into separate keyword argumentsargs {' ' ' ' ' ' args[' ' special argument-matching modes