我创建了一个函数,其中有一个可选参数y
:
def f(x, *y):
print(x)
if y in locals():
print(y)
将这些 x
和 y
参数传递给函数时,即使 y
位于其中,它也仅输出 x
局部变量:
a = ['String', 'Optional String']
x = a[0]
if len(a) == 2:
y = a[1]
f(x, *y) #Output: String
我有第二个问题,当仅给出 x
参数而不给出 y
时,它会输出 NameError:
a = ['String', 'Optional String']
x = a[0]
if len(a) == 2:
y = a[1]
f(x, *y) #Output: NameError: name 'y' is not defined
我怎样才能让它工作?提前致谢。
编辑:
看来我误解了可选参数是什么。最终更改了整个代码及其固定。无论如何,这些答案对我有帮助,谢谢。
最佳答案
检查 y 是否为本地名称的正确方法是 if 'y' in locals():
。
但是,这始终是正确的,因为 y
始终是本地名称,即使仅使用一个参数调用 f
也是如此。在这种情况下,我们有 y == ()
,即 y
是一个空元组。
如果您想知道是否有多个参数,只需编写 if y:
即可。
def f(x, *y):
print(x)
if y:
print(y)
我无法确认你的第二个问题。虽然它没有做你可能想要的事情,但没有 NameError。 (您可能想删除星号。)
哦,如果您想要可选参数,请使用可选参数。不是可变长度参数。
关于python - 使用不存在的可选参数运行函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49038977/