Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用收益率代替收益率_Python_Class_Csv - Fatal编程技术网

Python 使用收益率代替收益率

Python 使用收益率代替收益率,python,class,csv,Python,Class,Csv,回报比收益好吗?从我所读到的,它可以是。在这种情况下,我很难从if语句中获得迭代。基本上,这个程序做的是取两点,开始点和结束点。如果两个点之间至少相距10英里,则需要随机抽样。显示的最后一个if语句适用于从起点begMi开始的前20英里。nCounter.length=10,是类成员。所以问题是,我如何使代码适应返回语句而不是屈服语句的工作方式?或者在这种情况下,收益率报表可以吗 def yielderOut(self): import math import random as

回报比收益好吗?从我所读到的,它可以是。在这种情况下,我很难从if语句中获得迭代。基本上,这个程序做的是取两点,开始点和结束点。如果两个点之间至少相距10英里,则需要随机抽样。显示的最后一个if语句适用于从起点begMi开始的前20英里。nCounter.length=10,是类成员。所以问题是,我如何使代码适应返回语句而不是屈服语句的工作方式?或者在这种情况下,收益率报表可以吗

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
def yielderOut(自):
输入数学
将随机导入为r
对于self.fileData中的列:
走廊=str(列['corridor_CODE'])
begMi=float(列['BEGIN_MI']))
endMi=浮点(列['END_MI'])
粗差=绝对值(begMi-endMi)
#如果两点之间的平面距离大于长度=10
如果粗差>计数器长度:
差异=((int(math.ceil(roughDiff/10.0))*10-10)
如果差异>0且(差异%2==0或差异%3==0或差异%5==0)\
和((差异%roughDiff)>=diff):
如果(n计数器长度+begMi)
因此,roughdiff等于两点之间的差值,并向下四舍五入到最接近的10。然后减去10,以便从整个10英里路段中提取样本;这就变成了diff。所以让我们假设一个24的粗糙diff被四舍五入到20,20-10,diff+开始点=从mi 60和70之间而不是70和80之间取样


这个计划是可行的,但我认为如果我使用收益率而不是收益率会更好。不是程序员。

返回
不是更好,而是不同的<代码>返回显示“我完成了。结果如下”<代码>收益率表示“这是一系列值中的下一个值”


使用最能表达你意图的方法

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

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

当您希望以迭代方式处理事情时,这非常有用,因为这意味着您不必将所有结果保存在一个容器中,然后再进行处理。此外,在生成值之前所需的任何准备工作只需执行一次,因为所创建的生成器将在最后遇到的
收益率之后恢复代码的执行,也就是说,它有效地将代码转换为所谓的

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


从代码的外观来看,我认为使用yield将是有利的,特别是如果您可以增量处理结果的话。另一种方法是让它将所有的值存储在一个容器中,比如
列表
返回
,当它完成时。

好的解释。但使用系统内存和类似的方法产生的工作是否与返回的工作不同?一个比另一个快吗?我想对于我的使用,一系列值中的下一个值对我来说是最好的。有一个,你可能想看看。这可能有助于澄清两者之间的区别。如果您正在读取一个长csv文件,则在迭代序列时,可以节省内存。是的,它是一个长csv文件。我没有在上面的init方法中包含这一部分。Csv文件解析主要是我对程序所做的,它们变得相当大。