我一直在玩字典并试图让它们变得更加舒适。我遇到了this post,这让我想到了潜在的应用程序。在开始自我之前,我试着从一个基本的例子开始。
import numpy as np
times = np.linspace(0,20,21)
obs = np.linspace(50,100,21)
def square(x):
return x**2
def cube(x):
return x**3
def root_six(x):
return x**(1/6)
dispatcher = {'sq':square, 'cb':cube, '6th':root_six}
def gimme(func_dict=dispatcher, values=times):
res = []
for func in func_dict:
res.append(func(t) for t in values)
return res
gg = np.array(list(gimme())) # I tried various combinations
print(gg)
>> [<generator object gimme.<locals>.<genexpr> at 0x101b886d0>
>> <generator object gimme.<locals>.<genexpr> at 0x108fc1678>
>> <generator object gimme.<locals>.<genexpr> at 0x108fc1a40>]
如何测试我的代码是否正确执行?
答案 0 :(得分:3)
不要append
生成器表达式。我没有看到为什么你想在这里做到这一点。使用列表理解:
res.append([func(t) for t in values])
如果您希望func
中的每个func_dict
都有一个列表。如果没有,请使用消耗生成器的extend
。
不使用括号会创建一个未评估的生成器表达式。如果您评估过,您也发现了代码的另一个问题:func
只是函数的字符串名称!您应该更改for
循环以迭代values
,而不是:
for func in func_dict.values():
res.append([func(t) for t in values])