Suppose a function spam has signature spam(ham=None). The following three calls will all cause the local variable ham in spam's namespace to have value None:
spam()
spam(None)
spam(ham=None)
How can spam find out which of these three alternatives was actually used?