python将字符串转换为参数列表

时间:2013-11-28 10:41:26

标签: python eval

我可以在python中将字符串转换为参数列表吗?

def func(**args):
    for a in args:
        print a, args[a]

func(a=2, b=3)

# I want the following work like above code
s='a=2, b=3'
func(s)

我知道:

列表可以,只需使用* list,但list不能有如下元素:a = 2

和eval只能评估表达式

就像:

def func2(*args):
    for a in args:
        print a

list1=[1,2,3]
func2(*list1)
func2(*eval('1,2,3'))

3 个答案:

答案 0 :(得分:12)

您可以将输入字符串按到字典中,然后用它来调用您的函数,例如

>>> x='a=2, b=3'
>>> args = dict(e.split('=') for e in x.split(', '))
>>> f(**args)
a 2
b 3

答案 1 :(得分:8)

你想要一个字典,而不是一个'参数列表'。您最好使用ast.literal_eval()来评估只是 Python文字:

from ast import literal_eval

params = "{'a': 2, 'b': 3}"
func(**literal_eval(params))

在开始这条路线之前,请确保首先探索了编组选项的其他选项,例如argparse用于命令行选项,或JSON用于网络或基于文件的传输或持久性。

答案 2 :(得分:1)

您可以在调用eval时直接将字符串用作参数列表,例如

def func(**args):
for a in args:
    print( a, args[a])

s='a=2, b=3'

eval('func(' + s + ')')
>>>b 3
>>>a 2

请注意,func需要位于命名空间中,以便eval调用可以像这样工作。