【发布时间】:2019-06-26 11:08:27
【问题描述】:
考虑:
def foobar(*, foo, bar):
if foo:
print('foo', end="")
if bar:
print('bar', end="")
if foo and bar:
print('No bueno', end='') # I want this to be impossible
if not foo and not bar:
print('No bueno', end='') # I want this to be impossible
print('')
foobar(foo='bar') # I want to pass inspection
foobar(bar='foo') # I want to pass inspection
foobar(foo='bar', bar='foo') # I want to fail inspection
foobar() # I want to fail inspection
有没有办法设置一个函数,这样调用它的方式只有在传递 foo 或 bar 之一时才通过检查,而不需要在函数内部手动检查?
【问题讨论】:
-
foo和bar在foobar定义中是关键字参数,不是可选参数。 (我见过很多人犯了相反的错误,但这是我第一次看到有人在这个方向上混淆。) -
是的,我知道它们现在不是可选的。我想知道是否有一种方法可以在调用
foobar时通过检查,您只能通过 foo 或 bar 中的一个。 -
将它们都命名为 none 并检查?
-
虽然这会使其失败,但它仍然可以通过检查,因此在运行代码之前有人不会意识到有问题。这就是我的来历。
-
“仍然通过检查”是什么意思?你想通过什么样的检查来抓住这个?一些特定的自动化工具?由具有一定 Python 经验水平的程序员进行代码审查?
标签: python python-3.x optional-parameters keyword-argument optional-arguments