如何查看实际输出而不是<generator object =“”>?

时间:2017-05-08 03:59:24

标签: python python-3.x function dictionary generator

我一直在玩字典并试图让它们变得更加舒适。我遇到了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>]

如何测试我的代码是否正确执行?

1 个答案:

答案 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])