is much more meaningful than call with three naked values separated by commasespecially in larger programs--the keywords serve as labels for the data in the call the second major use of keywords occurs in conjunction with defaultswhich we turn to next defaults we talked about defaults in brief earlierwhen discussing nested function scopes in shortdefaults allow us to make selected function arguments optionalif not passed valuethe argument is assigned its default before the function runs for examplehere is function that requires one argument and defaults twodef (ab= = )print(abca requiredb and optional when we call this functionwe must provide value for aeither by position or by keywordhoweverproviding values for and is optional if we don' pass values to and cthey default to and respectivelyf( ( = use defaults if we pass two valuesonly gets its defaultand with three valuesno defaults are usedf( ( override defaults finallyhere is how the keyword and default features interact because they subvert the normal left-to-right positional mappingkeywords allow us to essentially skip over arguments with defaultsf( = choose defaults herea gets by positionc gets by keywordand bin betweendefaults to be careful not to confuse the special name=value syntax in function header and function callin the call it means match-by-name keyword argumentwhile in the header it specifies default for an optional argument in both casesthis is not an assignment statement (despite its appearance)it is special syntax for these two contextswhich modifies the default argument-matching mechanics combining keywords and defaults here is slightly larger example that demonstrates keywords and defaults in action in the followingthe caller must always pass at least two arguments (to match spam and special argument-matching modes