我创建了一个函数,其上有一个可选的参数y
:
def f(x, *y):
print(x)
if y in locals():
print(y)
将这些x
和y
参数传递给函数时,即使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
我怎样才能使这个工作?提前谢谢。
看起来我误解了可选参数是什么。结束更改整个代码及其固定。不管怎样,这些答案对我有帮助,谢谢。
答案 0 :(得分:2)
检查y是否为本地名称的正确方法是if 'y' in locals():
。
但是,这总是正确的,因为y
始终是本地名称,即使仅使用一个参数调用f
也是如此。在这种情况下,我们有y == ()
,即y
是一个空元组。
如果你想知道是否有多个参数,你可以简单地写if y:
。
def f(x, *y):
print(x)
if y:
print(y)
我无法确认您的第二个问题。虽然它没有做你想要的,但没有NameError。 (你可能想删掉星号。)
哦,如果你想要可选参数,请使用可选参数。不是可变长度的参数。
答案 1 :(得分:1)
本地人的输出是一本字典 - 如果您要这样做,请在您的函数中执行:
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