Igor V. Rafienko wrote: > I was wondering whether it was possible to find out which parameter > value is being used: the default argument or the user-supplied one. > That is: > > def foo(x, y="bar"): > # how to figure out whether the value of y is > # the default argument, or user-supplied? > > foo(1, "bar") => user-supplied > foo(1) => default
Why are you trying to make this distinction? That is, why should passing in "bar" be any different from getting the default value "bar" You could do something like:: >>> def foo(x='b a r'): ... if x is foo.func_defaults[0]: ... print 'default' ... else: ... print 'supplied' ... >>> foo('b a r') supplied >>> foo() default But that won't really work if your default value gets interned by Python, like small integers or identifier-like string literals:: >>> def foo(x='bar'): ... if x is foo.func_defaults[0]: ... print 'default' ... else: ... print 'supplied' ... >>> bar = ''.join(chr(i) for i in [98, 97, 114]) >>> foo(bar) supplied >>> foo('bar') default STeVe -- http://mail.python.org/mailman/listinfo/python-list