Python中的curry迭代器

2024-05-16 22:17:11 发布

您现在位置:Python中文网/ 问答频道 /正文

在下面的代码片段中,我尝试返回一个返回生成器的函数(顺便说一句,它们不是曾经被称为迭代器吗?)与步骤的论点咖喱。你知道吗

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方式来使用Python来咖喱迭代器。你知道吗


Tags: 函数代码importalphanumpylocaldefstep
1条回答
网友
1楼 · 发布于 2024-05-16 22:17:11

这并不是我处理问题的方式。特别是,不鼓励返回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的定义。你知道吗

一般来说,我认为一种更为python的方法是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)

相关问题 更多 >