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

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

我创建了一个函数,其中有一个可选参数y:

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

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

相关文章:

c - 仅使用递归来执行此操作

python - 使用 Authlib 0.11 的 JWT token 生成器

python - 通过 post 请求将二进制数据作为文件提交

python-3.x - 如何使用cv2使用python3提高图像回放的速度

function - 混合两个函数,其中一个是反函数

c++ - 为什么使用 switch-case 时会得到 `warning: control reaches end of non-void function`?

python - 属性错误 : lower not found; using a Pipeline with a CountVectorizer in scikit-learn

python 如何从 xlsxwriter 移植到 xlwt

python - 拆分 IPython Magic Shell 多行

python - Python 3 中每个条目后打印换行符