首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在python中将任意数量的字符串转换为函数参数

如何在python中将任意数量的字符串转换为函数参数
EN

Stack Overflow用户
提问于 2018-08-01 05:29:41
回答 2查看 216关注 0票数 0

我从csv中获取数据,并希望将其转换为python函数的参数。例如,如果csv说

代码语言:javascript
复制
12, foo=20, bar=30
10, foo=17, bar=40, baz=12

我想用f(12, foo=20, bar=30)f(10, foo=17, bar=40, baz=12)调用我的函数两次。我真的不能修改这个函数(我实际上是在使用requests库,并将这个CSV转换为一系列请求)。从CSV中提取字符串很容易,但将它们转换为正确的函数调用似乎并不容易。

就目前而言,我的基本情况是:

代码语言:javascript
复制
with open('request.csv') as csvfile:
    reader = csv.reader(csvfile)
    for row in reader:
       response = requests.get(row[0], row[1], row[2], row[3])

但这不适用于应为"auth=X“或类似的参数,也不适用于可变数量的参数。

EN

回答 2

Stack Overflow用户

发布于 2018-08-01 05:46:25

代码语言:javascript
复制
line1 = '12, foo=20, bar=30'
line2 = '10, foo=17, bar=40, baz=12'

for line in [line1, line2]:
    args = line.split(',')
    # key named arguments (ignore first, bc it is unnamed)
    named_args = {k.strip(): v.strip() for k, v in (x.split('=') for x in args[1:])}
    # call your method
    method_to_call(args[0], **named_args)

编辑:我在我的开发环境中测试了代码,并对其进行了更新。现在它应该可以像预期的那样工作了。

票数 0
EN

Stack Overflow用户

发布于 2018-08-01 05:47:22

代码语言:javascript
复制
def func(i, foo=0, bar=4):
    print(i, foo, bar)


row = '12, foo=20, bar=30'

args, kargs = [], {}
for arg in row.split(','):
    arg = arg.strip()
    if '=' in arg:
        key, value = arg.split('=')
        kargs[key.strip()] = value.strip()
    else:
        args.append(arg)

func(*args, **kargs)

非常危险的解决方案:

代码语言:javascript
复制
def func(i, foo=0, bar=4):
    print(i, foo, bar)

row = '12, foo=20, bar=30'
eval('func(%s)' % row)

# Dangerous use:
row = '12, foo=20); sys.exit(0'
eval('func(%s)' % row)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51622363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档