非标准可选参数默认值

4 投票
5 回答
12419 浏览
提问于 2025-04-15 12:52

我有两个函数:

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)

撰写回答