考虑以下函数,它在 Python 中不起作用,但我将用它来解释我需要做什么。
def exampleFunction(a, b, c = a):
...function body...
也就是说,我想为变量分配与变量c
相同的值a
,除非指定了替代值。上面的代码在 python 中不起作用。有没有办法做到这一点?
考虑以下函数,它在 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
魔术,如 carl 的答案,或使用sentinel object。这样做的库包括attrs和Marshmallow,在我看来,它更干净,可能更快。
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