鱼C论坛

 找回密码
 立即注册
查看: 1003|回复: 3

python 生成器学习问题

[复制链接]
发表于 2018-4-10 10:08:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
代码如下:
def myYield(n):
    while n > 0:
        print("开始生成...:")
        yield n
        print("完成一次...:")
        n -= 1

if __name__ == '__main__':
    for i in myYield(4):
        print("遍历得到的值:",i)

输出如下:

开始生成...:
遍历得到的值: 4
完成一次...:
开始生成...:
遍历得到的值: 3
完成一次...:
开始生成...:
遍历得到的值: 2
完成一次...:
开始生成...:
遍历得到的值: 1
完成一次...:
======================
请问下为什么输出中"遍历得到的值"是在"开始生成..."和 "完成一次..." 的中间。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-4-10 10:10:47 | 显示全部楼层
引文yield语句就在这两个print语句中间
只有执行yield的时候才生成数据
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-10 13:56:42 | 显示全部楼层
BngThea 发表于 2018-4-10 10:10
引文yield语句就在这两个print语句中间
只有执行yield的时候才生成数据

def abc(myclass):
    class InnerClass:
        def __init__(self,z = 0):
            self.z = 0
            self.wrapper = myclass()

        def position(self):
            self.wrapper.position()
            print('z axis:',self.z)

    return InnerClass

@abc
class coordination:
    def __init__(self, x = 0, y =  0):
        self.x = x
        self.y = y

    def position(self):
        print('x axis:',self.x)
        print('y axis:',self.y)

if __name__ =='__main__':
    coor = coordination()
    coor.position()
输出:
x axis: 0
y axis: 0
z axis: 0
请问下这里为什么'z axis:0'是在最后输出呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-10 15:12:41 | 显示全部楼层
程序改成下面这样能帮助你理解
def myYield(n):
    while n > 0:
        print("开始生成...:")
        yield n
        print("完成一次...:")
        n -= 1

test = myYield(4)
print(next(test))
print(next(test))
print(next(test))
print(next(test))
print(next(test))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-14 14:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表