Python 使用不存在的可选参数运行函数
我创建了一个函数,该函数上有一个可选参数Python 使用不存在的可选参数运行函数,python,python-3.x,function,parameter-passing,Python,Python 3.x,Function,Parameter Passing,我创建了一个函数,该函数上有一个可选参数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时,它会输出一个名称错误
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
时,它会输出一个名称错误:
a = ['String', 'Optional String']
x = a[0]
if len(a) == 2:
y = a[1]
f(x, *y) #Output: NameError: name 'y' is not defined
我怎样才能让它工作?提前谢谢
编辑:
看来我误解了什么是可选论点。最终改变了整个代码及其修复。不管怎样,这些答案对我很有帮助,谢谢。本地人的输出是一本字典——如果你要做:
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
检查y是否为本地名称的正确方法是
如果在locals()中为“y”:
但是,这总是正确的,因为y
始终是本地名称,即使只使用一个参数调用f
。在这种情况下,我们有y==()
,即y
是一个空元组
如果您想知道是否有多个参数,只需编写if y:
def f(x, *y):
print(x)
if y:
print(y)
我不能证实你的第二个问题。虽然它不能实现您可能想要的功能,但没有名称错误。(您可能想删除星号。)
哦,如果你想要可选参数,就使用可选参数。不是可变长度参数。
y
在函数中不是可选的;它将始终被定义,并且将包含零个或多个位置参数<因此,locals()中的code>y完全没有意义。为什么不直接调用f(*a)
将元素解压为参数?可选参数是一个具有默认值的参数,如def(x,y=None):
y in locals()
不检查您希望它检查的内容。它查看由locals()
返回的字典中是否存在y
的值。它永远不会,因为y
将是一个元组(可能为空),字典的键都是标识符(字符串)。您的意思可能是如果locals()中的“y”是,这将始终是真的(因为y
总是被定义的,即使它的值是一个空元组)。