我有以下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