我想从字符串中给函数赋予多个参数 例如,如果我有一个功能
def myfunc(x, y, z):
return x*y+z
如何从像'1,2,3'这样的字符串中给出参数, 我想要这样的东西
def myfunc(x, y, z):
return x*y+z
string = '1, 2, 3'
myfunc(string)
答案 0 :(得分:2)
'1, 2, 3'
是一个int元组的字符串表示。处理它的一个简单方法是使用ast.literal_eval
,它允许你“安全地评估表达式节点或包含......以下Python文字结构的字符串:字符串,字节,数字,元组,列表,字符串,集合,布尔值和None
“:
import ast
s = '1, 2, 3'
tup_of_int = ast.literal_eval(s) # converts '1, 2, 3' to (1, 2, 3)
myfunc(*tup_of_int) # unpack items from tup_of_int to individual function args
代码可以写在一行上,如下所示:
myfunc(*ast.literal_eval(s))
有关myfunc(*tup_of_int)
中星号的工作原理的详细信息,请参阅Unpacking Argument Lists中的The Python Tutorial。
注意:不要试图用eval
代替ast.literal_eval
。 eval
为really dangerous because it cannot safely handle untrusted input,因此您不应该习惯使用它。
答案 1 :(得分:1)
将最后一行替换为myfunc(*map(int, string.split(',')))
。
string.split(',')
将字符串拆分为三个参数的列表。
map(int, string.split(','))
将列表元素转换为整数。
myfunc(*map(int, string.split(',')))
splats
列表,以便列表中的三个元素作为参数传递。
此方法依赖于您的输入具有示例字符串中显示的确切格式('1,2,3'
不起作用)。史蒂文的反应更加强烈,所以我建议选择那个。
答案 2 :(得分:0)
以下是您的问题的代码: 首先,您必须拆分字符串,然后继续下一步:
def myfunc(x, y, z):
return x * y + z
a=raw_input()
x,y,z=map(int,a.split(","))
print myfunc(x,y,z)
答案 3 :(得分:-1)
一个班轮(虽然像这样解析字符串参数可能会在您的代码中引入漏洞)。
>>> myfunc(*eval(string)) # myfunc((1, 2, 3))
5