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

时间:2018-02-28 21:35:14

标签: python python-3.x function parameter-passing

我创建了一个函数,其上有一个可选的参数y

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

将这些xy参数传递给函数时,即使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

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

编辑:

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

2 个答案:

答案 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