将函数输入的默认值设置为等于Python中的另一个输入
-
30-09-2019 - |
题
考虑以下功能,该功能在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
不隶属于 StackOverflow