[英]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.