非标准可选参数默认值
我有两个函数:
def f(a,b,c=g(b)):
blabla
def g(n):
blabla
c
是函数 f
中的一个可选参数。如果用户没有给它指定值,程序应该计算 g(b) 的结果,然后这个结果就是 c
的值。但是代码编译不通过,提示说 'b' 这个名字没有定义。该怎么解决呢?
有人建议:
def g(b):
blabla
def f(a,b,c=None):
if c is None:
c = g(b)
blabla
但是这个方法不行。也许用户是想让 c
的默认值是 None,然后 c
会有另一个值。
5 个回答
2
在编译的时候,c
的值会被计算出来,也就是 g(b)
。所以你需要在定义 f
之前先定义 g
。当然,这个时候你还需要有一个全局的 b
变量被定义。
b = 4
def g(a):
return a+1
def test(a, c=g(b)):
print(c)
test(b)
输出结果是 5。
3
你不能那样做。
在这个函数里面,先检查一下是否有指定c。如果没有,就进行计算。
def f(a,b,c=None):
if c == None:
c = g(b)
blabla
28
def f(a,b,c=None):
if c is None:
c = g(b)
如果None
可以作为c
的一个有效值,那么你可以这样做:
sentinel = object()
def f(a,b,c=sentinel):
if c is sentinel:
c = g(b)