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

python将字符串转换为参数列表,python,eval,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,但list不能有像:a=2这样的元素 而eval只能对表达式求值 这就像: def func2(*args):

我可以在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,但list不能有像:a=2这样的元素

而eval只能对表达式求值

这就像:

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

list1=[1,2,3]
func2(*list1)
func2(*eval('1,2,3'))
你想要的是字典,而不是“参数列表”。您最好只使用以下命令来计算Python文本:

from ast import literal_eval

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

在使用此方法之前,请确保您首先研究了编组选项的其他选项,例如命令行选项的
argparse
,或基于网络或文件的传输或持久化的JSON。

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

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

您可以在调用
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调用才能像这样工作。

类似的东西应该可以这样做。查看如何使用参数调用
parse_args()
。+1但如果
a=2,b=3
字符串是用户输入(例如,来自配置文件等),则此解决方案可能不适用;不允许对任意Python代码求值。:-}@FrerichRaabe:OP似乎在寻找与
args“(1,2,3)”和
func2(*literal_eval(args))
等价的词;e、 g.能够产生正确的python结构以应用于调用的东西。@MartijnPieters:我的意思是像Frerich Raabe说的那样。我想从表的配置文件中读取,然后使用sqlalchemy自动生成表。处理列('id',整数,主键=True)时。然后问这个问题。@AylwynLake:您不能使用允许您将id、类型和其他选项指定为单独条目的配置格式?@naxa:对,不,这不是Python文本,您必须直接解析它。首先看到这个语法。非常感谢。我不知道为什么x.split(',')中e的
元组(e.split('='))会导致语法错误,这不是dict()的一个参数吗?关于这个规则有什么解释吗?@AylwynLake:它是a,反过来又是的广义形式。但a和b是字符串而不是整数。如何将它们转换为整数?@zeeshankhan您可以进一步调整字典,并对所有值应用
int
,例如
args={k:int(v)表示k,v表示args.items()