python中的生成器

时间:2014-06-02 07:31:31

标签: python generator yield

我刚遇到的问题是我无法使用python的内置range()函数来表示浮点值。所以我决定使用我手动定义的浮动范围函数:

def float_range(start, stop, step):
    r = start
    while r < stop:
        yield r
        r += step

问题是:此函数返回一个生成器对象。现在我需要这个范围的情节:

ax.hist(some_vals, bins=(float_range(some_start, some_stop, some_step)), normed=False)

由于float_range()的返回类型是生成器,因此这不起作用,而hist()函数不接受此类型。除了不使用yield之外,我有什么解决方法吗?

2 个答案:

答案 0 :(得分:3)

如果你需要给出一个范围,你可以做任何一个

ax.hist(some_vals, bins=(list(float_range(some_start, some_stop, some_step))), normed=False)

或者只是让你的float_range返回一个列表:

def float_range(start, stop, step):
    result = []
    r = start
    while r < stop:
        result.append(r)
        r += step
    return result

BTW:关于你可以用Python中的生成器做些什么的很好的参考:https://wiki.python.org/moin/Generators

答案 1 :(得分:1)

您可以使用以下方法将生成器转换为列表:

list(float_range(1, 4, 0.1))

但是看到你正在使用matplotlib,你应该使用numpy的解决方案:

np.arange(1, 4, 1, dtype=np.float64)

或:

np.linspace(start, stop, (start-stop)/step)