能否基于已传入的位置参数为函数参数设置默认值?
不能直接用位置参数作为其他参数的默认值
你写的def ex(a, b=a+1):会直接报错,原因很简单:Python函数的默认参数是在函数定义阶段就计算完成的,而不是调用函数的时候。这时候参数a还没有被赋值,解释器找不到a这个变量,会抛出NameError。
正确的写法是把默认值设为None,在函数内部根据a的值动态计算b:
def ex(a, b=None): if b is None: b = a + 1 return a + b
这样调用时:
- 不传
b的话,b会自动设为a+1,比如ex(3)返回3+4=7 - 传
b的话就用你传入的值,比如ex(3,5)返回8
另外要注意,Python的默认参数绑定的是定义时的对象,这也是为什么用可变对象(比如[])当默认参数会出现奇怪行为的原因——本质和你遇到的问题是同一个机制:默认值的计算时机在定义阶段,而非调用阶段。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

