用收益代替收益

2024-09-30 14:15:32 发布

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

回报比收益好吗?据我所知。在这种情况下,我很难从if语句获取迭代。基本上,程序所做的就是取两点,开始和结束。如果两个点相距至少10英里,则取一个随机样本。最后显示的if语句适用于从起点begMi开始的前20英里。n计数器长度=10,是班级成员。所以问题是,如何使代码适应return语句而不是yield语句的工作环境?或者在这种情况下,收益率声明可以吗?在

def yielderOut(self):
    import math
    import random as r
    for col in self.fileData:
        corridor = str(col['CORRIDOR_CODE'])
        begMi = float(col['BEGIN_MI'])
        endMi = float(col['END_MI'])
        roughDiff = abs(begMi - endMi)

        # if the plain distance between two points is greater than length = 10
        if roughDiff > nCounter.length:
            diff = ((int(math.ceil(roughDiff/10.0))*10)-10)
            if diff > 0 and (diff % 2 == 0 or diff % 3 == 0 or diff % 5 == 0)\
               and ((diff % roughDiff) >= diff):

                if (nCounter.length+begMi) < endMi:
                    vars1 = round(r.uniform(begMi,\
                    (begMi+nCounter.length)),nCounter.rounder)
                    yield corridor,begMi,endMi,'Output 1',vars1

                if ((2*nCounter.length)+begMi) < endMi:
                    vars2 = round(r.uniform((begMi+nCounter.length),\
                    (begMi+ (nCounter.length*2))),nCounter.rounder)
                    yield corridor,begMi,endMi,'Output 2',vars1,vars2

所以roughdiff等于两点之间的差,并被四舍五入到最接近的10。然后减去10,这样样本就从整个10英里的路段上取下;这就变成了diff。所以让我们假设一个24的粗略diff四舍五入到20,20-10,diff+起始点=样本取自mi 60和70之间,而不是70和80之间。在

这个程序很管用,但我认为用回报率代替收益率会更好。不是程序员。在


Tags: 程序if情况diffcol语句lengthyield
3条回答

我使用yield在我想继续对某个对象进行迭代的情况下。但是,如果我想让这个函数递归,我会使用return。在

return不是更好的,而是不同的return说“我完成了。这是结果”。yield表示“这是一系列值中的下一个值”

用最能表达你意图的那个。在

使用yield使函数成为generator function,这意味着每次调用它的(自动创建的)next()方法时,它都将生成一系列值。在

当您希望迭代地处理事情时,这很有用,因为这意味着您不必将所有结果保存在一个容器中,然后再处理它们。此外,在生成值之前所需的任何准备工作都只需完成一次,因为所创建的生成器将在最后一次遇到yield之后继续执行代码,也就是说,它有效地将其转换为coroutine。在

生成器函数在return值而不是yield时退出。这通常发生在执行“结束”时,而默认情况下它将return None。在

从代码的外观来看,我认为使用yield是有好处的,特别是如果可以增量处理结果的话。另一种选择是让它将所有值存储在一个容器中,比如完成时的list和{}。在

相关问题 更多 >

    热门问题