ham to the defaults specified in the headerdef func(spameggstoast= ham= )print((spameggstoastham)first required func( func( ham= eggs= func(spam= eggs= func(toast= eggs= spam= func( output( output( output( output( output( notice again that when keyword arguments are used in the callthe order in which the arguments are listed doesn' matterpython matches by namenot by position the caller must supply values for spam and eggsbut they can be matched by position or by name againkeep in mind that the form name=value means different things in the call and the defa keyword in the call and default in the header beware mutable defaultsas footnoted in the prior if you code default to be mutable object ( def ( =[]))the samesingle mutable object is reused every time the function is later called--even if it is changed in place within the function the net effect is that the argument' default retains its value from the prior calland is not reset to its original value coded in the def header to reset anew on each callmove the assignment into the function body instead mutable defaults allow state retentionbut this is often surprise since this is such common trapwe'll postpone further exploration until this part' "gotchaslist at the end of arbitrary arguments examples the last two matching extensionsand **are designed to support functions that take any number of arguments both can appear in either the function definition or function calland they have related purposes in the two locations headerscollecting arguments the first usein the function definitioncollects unmatched positional arguments into tupledef (*args)print(argswhen this function is calledpython collects all the positional arguments into new tuple and assigns the variable args to that tuple because it is normal tuple objectit can be indexedstepped through with for loopand so onf(( ( ( , arguments