考虑以下功能,该功能在Python中不起作用,但我将用来解释我需要做的事情。

def exampleFunction(a, b, c = a):
    ...function body...

那是我要分配给变量 c 与变量相同的值 a 除非指定替代值。以上代码在Python中不起作用。有没有办法做到这一点?

谢谢你。

有帮助吗?

解决方案

def example(a, b, c=None):
    if c is None:
        c = a
    ...

关键字参数的默认值不能是变量(如果是的,则在定义函数时将其转换为固定值。)通常用于将参数传递到主函数:

def main(argv=None):
    if argv is None:
        argv = sys.argv

如果 None 可能是一个有效的值,解决方案是使用 *args/**kwargs 魔术如卡尔的回答,或使用 前哨对象. 。这样做的库包括 attrs棉花糖, ,在我看来,它更干净,可能更快。

missing = object()

def example(a, b, c=missing):
    if c is missing:
        c = a
    ...

只要 方式 c is missing 是真的 c 成为 确切地 您在那里创建的那个虚拟对象。

其他提示

这种一般模式可能是最好,最可读的:

def exampleFunction(a, b, c = None):
    if c is None:
        c = a
    ...

你必须小心 None 不是有效的状态 c.

如果您想支持“无”值,则可以做这样的事情:

def example(a, b, *args, **kwargs):
    if 'c' in kwargs:
        c = kwargs['c']
    elif len(args) > 0:
        c = args[0]
    else:
        c = a

一种方法是:

def foo(a, b, c=None):
    c = a if c is None else c
    # do something
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top