使用不存在的可选参数运行函数

问题描述 投票:1回答:2

我创建了一个函数,它上面有一个可选参数y

def f(x, *y):
    print(x)
    if y in locals():
    print(y)

当将这些xyarguments传递给函数时,它只输出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

我怎样才能使这个工作?提前致谢。

EDIT:

看起来我误解了可选参数是什么。结束更改整个代码及其固定。不管怎样,这些答案对我有帮助,谢谢。

python python-3.x function parameter-passing
2个回答
2
投票

检查y是否是本地名称的正确方法是if 'y' in locals():

但是,这总是正确的,因为y总是一个本地名称,即使只用一个参数调用f。在这种情况下,我们有y == (),即y是一个空元组。

如果你想知道是否有多个参数,你可以简单地写if y:

def f(x, *y):
    print(x)
    if y:
        print(y)

我无法确认你的第二个问题。虽然它没有做你想要的,但没有NameError。 (你可能想删掉星号。)

哦,如果你想要可选参数,请使用可选参数。不是可变长度的参数。


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
© www.soinside.com 2019 - 2024. All rights reserved.