Python-yield

        
# =============================================================================
# 生成序列并输出
# =============================================================================

'''
如果一个类想被用于for ... in循环,类似list或tuple那样,就必须实现一个__iter__()方法,
该方法返回一个迭代对象,然后,Python的for循环就会不断调用该迭代对象的next()方法拿到循环的下一个值,
直到遇到StopIteration错误时退出循环。
'''

# 普通的
def fors(n):
    for i in range(n):
        print(i)

fors(5)

# 提高函数的可复用性 (通过返回 List)
def fors(n):
    a=[]
    for i in range(n):
        a.append(i)
    return a

for i in fors(5):
    print(i)

# 如果要控制内存占用,最好不要用 List 返回
# 通过 iterable 对象来迭代
class fors(object):
    def __init__(self,n):
        self.a=-1
        self.max=n        
    def __iter__(self):
        return self    
    def __next__(self):
        self.a=self.a+1
        if self.a>=self.max:
            raise StopIteration()
        return self.a 
    
for i in fors(5):
    print(i)
 
   
#使用 yield 函数改写,代码更简洁
def fors(n): 
    for i in range(n): 
        yield i  #外层调用fors时,每次执行到yield则返回其后的对象
        
for i in fors(5):
    print(i)


# example
def fors(n): 
    a='a'
    for i in range(n): 
        yield i,str(i)+' '+a+' ~'
        a=a+chr(98+i)
        
for i in fors(5):
    print(i)


 


# =============================================================================
# 多个yield
# =============================================================================

def fors(n): 
    a='a'
    b=1
    for i in range(n):
        b=i
        yield b
        for i in range(n): 
            yield i,str(i)+' '+a+' ~'
            a=a+chr(98+i)
        
for i in fors(3):
    print(i)


# 搞事
def fors(n): 
    a='a'
    b=1
    for i in range(n):
        b=i
        yield b
    for i in range(n): 
        yield i,str(i)+' '+a+' ~'
        a=a+chr(98+i)
        
for i in fors(3):
    print(i)

    
# (~.~)
def fors(n): 
    a='a'
    b='~~~~~~~'
    for i in range(n):
        yield b
        for i in range(n): 
            yield i,str(i)+' '+a+' ~'
            a=a+chr(98+i)
            b=b+chr(65+i)
        
for i in fors(3):
    print(i)

 

 

参考:

https://www.ibm.com/developerworks/cn/opensource/os-cn-python-yield/

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值