我创建了一个函数,它上面有一个可选参数y
:
def f(x, *y):
print(x)
if y in locals():
print(y)
当将这些x
和y
arguments传递给函数时,它只输出x
,即使y
在局部变量中:
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。 (你可能想删掉星号。)
哦,如果你想要可选参数,请使用可选参数。不是可变长度的参数。
本地人的输出是一个字典 - 如果你要做的话,在你的函数中:
def f(x, *y):
print(locals())
f('string', 'other string')
输出将是
{'y': ('other string',), 'x': 'string'}
因此,要访问y中的值,您可以这样调用它:
def f(x, *y):
print(x)
if 'y' in locals():
print(y)
f('string', 'other string')
输出:
string
other string