我想知道是否可以确定是否在Python中传递了具有默认值的函数参数.例如,dict.pop是如何工作的?
>>> {}.pop('test') Traceback (most recent call last): File "", line 1, in KeyError: 'pop(): dictionary is empty' >>> {}.pop('test',None) >>> {}.pop('test',3) 3 >>> {}.pop('test',NotImplemented) NotImplemented
pop方法如何确定第一次没有传递默认返回值?这是否只能在C中完成?
谢谢
惯例通常是使用arg=None
和使用
def foo(arg=None): if arg is None: arg = "default value" # other stuff # ...
检查是否通过了.允许用户传递None
,这将被解释为没有传递参数.
我猜你的意思是"关键字参数",当你说"命名参数"时.dict.pop()
不接受关键字参数,所以这部分问题没有实际意义.
>>> {}.pop('test', d=None) Traceback (most recent call last): File "", line 1, in TypeError: pop() takes no keyword arguments
也就是说,检测是否提供参数的方法是使用*args
或**kwargs
语法.例如:
def foo(first, *rest): if len(rest) > 1: raise TypeError("foo() expected at most 2 arguments, got %d" % (len(rest) + 1)) print 'first =', first if rest: print 'second =', rest[0]
通过一些工作,并使用**kwargs
语法也可以完全模拟python调用约定,其中参数可以通过位置或名称提供,并且多次提供的参数(按位置和名称)会导致错误.