heron ( "sq inches" wrongraises typeerror in the third call we have attempted to pass fourth positional argumentbut the does not allow this and causes typeerror to be raised by making the the first parameter we can prevent any positional arguments from being usedand force callers to use keyword arguments here is such (fictitiousfunction' signaturedef print_setup(*paper="letter"copies= color=false)we can call print_setup(with no argumentsand accept the defaults or we can change some or all of the defaultsfor exampleprint_setup(paper=" "color=truebut if we attempt to use positional argumentsfor exampleprint_setup(" ") typeerror will be raised just as we can unpack sequence to populate function' positional argumentswe can also unpack mapping using the mapping unpacking operatorasterisk asterisk (**we can use *to pass dictionary to the print_setup(function for exampleoptions dict(paper=" "color=trueprint_setup(**optionshere the options dictionary' key-value pairs are unpacked with each key' value being assigned to the parameter whose name is the same as the key if the dictionary contains key for which there is no corresponding parametera typeerror is raised any argument for which the dictionary has no corresponding item is set to its default value--but if there is no defaulta typeerror is raised we can also use the mapping unpacking operator with parameters this allows us to create functions that will accept as many keyword arguments as are given here is an add_person_details(function that takes social security number and surname positional argumentsand any number of keyword argumentsdef add_person_details(ssnsurname**kwargs)print("ssn ="ssnprint(surname ="surnamefor key in sorted(kwargs)print({ { }format(keykwargs[key])this function could be called with just the two positional argumentsor with additional informationfor exampleadd_person_details( "luther"forename="lexis"age= this provides us with lot of flexibility and we as we saw in when used as binary operator*is the pow(operator