我有以下Python代码:如何将数据元组映射到函数元组?
data = ['1', '4.6', 'txt']
funcs = [int, float, str]
如何调用数据每种功能都相应的指标作为参数传递给函数? 现在我使用的代码:
result = []
for i, func in enumerate(funcs):
result.append(func(data[i]))
图(funcs中,数据)不具有功能的元组工作(有没有内建功能做简单的
我有以下Python代码:如何将数据元组映射到函数元组?
data = ['1', '4.6', 'txt']
funcs = [int, float, str]
如何调用数据每种功能都相应的指标作为参数传递给函数? 现在我使用的代码:
result = []
for i, func in enumerate(funcs):
result.append(func(data[i]))
图(funcs中,数据)不具有功能的元组工作(有没有内建功能做简单的
你可以use zip
*?许多序列结合在了一起:
zip([a,b,c,...], [x,y,z,...]) == [(a,x), (b,y), (c,z), ...]
,那么你可以在这个新的序列重复,使每一个功能上的相应数据适用,因为你只是想将其收集到列表中,。比for循环更好:
result = [f(x) for f, x in zip(funcs, data)]
注:*使用itertools.izip
如果你正在使用Python 2.x和列表非常长)
[f(d) for d,f in zip(data, funcs)]
>>> data = ['1', '4.6', 'txt']
>>> funcs = [int, float, str]
>>> result = [funcs[pos](x) for pos, x in enumerate(data)]
>>> result
[1, 4.5999999999999996, 'txt']
>>>
如果您需要逐个值,也可以为值创建生成器:
def my_funcvals(funcs,vals):
return ("%s(%r) = %r" %(f.__name__,d, f(d)) for d,f in zip(data, funcs))
data = ['1', '4.6', 'txt']
funcs = [int, float, str]
for result in my_funcvals(funcs, data):
print result
map()
将与功能序列的工作,尽管也许不是在你的思维方式:
data = ['1', '4.6', 'txt']
funcs = [int, float, str]
result = map(lambda f,d: f(d), funcs, data)
# or
result = map(lambda d,f: f(d), data, funcs)
这是没有必要写一个函数。只要选择列表理解解决方案并使用生成器表达式即可。 '(f(x)for f,x in zip(funcs,data))' – 2010-10-03 07:42:43
我认为编写可以放入实用程序模块的函数会更好。我认为可能这种世代不止一次发生。所以最好不要内联发电机,因为发电机不能重新启动,但必须“重新生成”。然后主模块变得更有意义,代码更容易重用。我也做了str样式的人类可读的打印字符串返回。这可以很容易地转化为对象。 – 2010-10-03 08:09:01