簡體   English   中英

用Python編寫迭代器

[英]Currying iterators in Python

在以下代碼段中,我嘗試返回一個函數,該函數將返回帶有生成器的生成器(它們曾經被稱為迭代器BTW嗎?),並帶有step參數。

import math
import numpy

def aequi_ang_step(step):
    def local_it(start, d_alpha, step):
        for alpha in numpy.arange(start, start+d_alpha,(d_alpha < 0) and -step or step):
            if (alpha < 2*math.pi): yield alpha
            else: yield alpha-2*math.pi
    return lambda start, d_alpha: local_it(start, d_alpha, step)

事情是可行的,但是當我從長時間的禁欲中恢復到Python時,我的問題是這是否是在Python中使用迭代器來實現迭代器的一種好方法。

這不完全是我在這里解決問題的方式。 特別是不鼓勵返回lambda 考慮代替

import math
import numpy

def aequi_ang_step(step):
    def local_it(start, d_alpha):
        for alpha in numpy.arange(start, start+d_alpha,(d_alpha < 0) and -step or step):
            if (alpha < 2*math.pi): yield alpha
            else: yield alpha-2*math.pi
    return local_it

現在,您返回的是一個閉包,其中包含step的定義。

我認為一般來說,更復雜的pythonic方法是functools.partial

from functools import partial
import math
import numpy

step = 0.1

def aequi_ang(start, d_alpha, step):
    for alpha in numpy.arange(start, start+d_alpha,(d_alpha < 0) and -step or step):
        if (alpha < 2*math.pi): yield alpha
        else: yield alpha-2*math.pi

aequi_ang_step = partial(aequi_ang, step=step)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM