在python中使用list作为函数定义参数

时间:2017-07-12 23:33:19

标签: python function arguments

这里已经回答了一些类似的问题,但它们都与使用列表作为函数中的变量有关。我希望使用列表作为函数定义:

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

并定义ae我得到了正确的输出。

上面的代码是一个粗略的过度简化,但这里的目标是:我希望能够从我的列表中删除d(或将f添加到我的列表中),并让它告诉我I'll have a sandwich.(或I'll have a cheese sandwich, please.),每次我需要处理不同数量的变量时,无需重新定义函数。任何想法都非常感激。

2 个答案:

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