这里已经回答了一些类似的问题,但它们都与使用列表作为函数中的变量有关。我希望使用列表作为函数定义:
varlist = ('a',
'b',
'c',
'd',
'e')
def func(*input):
output = ""
for item in input:
output += item
return output
a = "I'll "
b = "have "
c = "a "
d = "cheese "
e = "sandwich."
print func(*varlist)
当我试图获取abcde
时返回I'll have a cheese sandwich.
换句话说,该函数使用列表中的值作为输入,而不是将它们用作变量,我定义下面。当然,当我重新定义时:
def func(a,b,c,d,e):
output = a+b+c+d+e
return output
并定义a
到e
我得到了正确的输出。
上面的代码是一个粗略的过度简化,但这里的目标是:我希望能够从我的列表中删除d
(或将f
添加到我的列表中),并让它告诉我I'll have a sandwich.
(或I'll have a cheese sandwich, please.
),每次我需要处理不同数量的变量时,无需重新定义函数。任何想法都非常感激。
答案 0 :(得分:1)
args = (a, b, c, d, e) # not ('a', 'b', 'c', 'd', 'e')
func(*args)
答案 1 :(得分:0)
您的代码非常接近,但您似乎缺少一些关键概念。使用字符串创建varlist时,它们不会自动引用您在下面定义的对象。你必须评估它们。如果您信任源,则可以使用eval(),但如果用户将输入它,您可能想要做其他事情。此外,没有必要解压缩列表,只需保持原样。并且在任何一个版本中都不要在python中命名与builtins同名的东西。以下是我对这些变化所写的内容。
varlist = ('a','b','c','d','e')
def func(inp):
output = ""
for item in inp:
output += item
return output
a = "I'll "
b = "have "
c = "a "
d = "cheese "
e = "sandwich."
print func(map(eval, varlist))