zoukankan      html  css  js  c++  java
  • python 笔记——生成器和迭代器

    #-*- coding:utf-8 -*-
    
    a=[1,2,3,4]
    for i,j in enumerate(a):
        print i,j
    
    '''只有ij时,'''
    
    a=[1,2,3,4]
    for i in enumerate(a):
        print i
    '''只有i 时,'''
    
    dic={1:'a',2:'c','d':4}
    for i in enumerate(dic):
        print i
        '''是字典时,对应得是key'''
    
    b=[1,2,4,5,6,7,]
    for index,i in enumerate(b):
    
        print index,i
        b[index]+=1
    print(b)
    print('jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj')
    
    c=[1,2,4,6,7,8]
    c=map(lambda x:x+1,c)
    for i in c:
        print i
    print (type(c))
    '''产生的是一个list所以要循环打印,'''
    l=[j+1 for j in range(10)]
    print l
    print (type(l))
    '''产生的是一个list生产序列'''
    
    g=(j+1 for j in range(10))
    print g     #这里这句打印的是g生成器的内存地址
    print (type(g))
    #print g.next()调用生成器的.next()可以显示生成器里的计算出来的元素,
    # 但一次调用只能显示一个元素,可以采用for循环来显示所有元素.可迭代对象
    for i in g:
        print i
    
    print('jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj')
    
    '''斐波那函数的编程
    def fib(max):
        n,a,b=0,0,1
        while n<max:
            print b
            a,b=b,a+b
            n+=1
    
    fib(10)
    '''
    def pluse (a,b):
        print (a+b)
    def fib(max):
        n, a, b = 0, 0, 1
        while n < max:
            yield b
            a, b = b, a + b
            n += 1
    
    data=fib(10)
    print (data.next())
    print (data.next())
    pluse(100,200)
    print (data.next())
    print ('hahahhhahhahha')
    print (data.next())
    print (data.next())
    print (data.next())
    

    凡是可作用于for循环的对象都是Iterable类型;

    凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;

    集合数据类型如listdictstr等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。

    Python的for循环本质上就是通过不断调用next()函数实现的

    #-*- coding:utf-8 -*-
    from collections import Iterator
    print (isinstance((),Iterator))
    print (isinstance([],Iterator))
    print (isinstance('adf',Iterator))
    print (isinstance([i *2 for i in range(10)],Iterator))
    
    print (isinstance((i *2 for i in range(10)),Iterator))#是生成器
    
    #可以直接用于for循环的对象为可迭代对象
    print ('jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj')
    
    from collections import Iterable
    print (isinstance((),Iterable))
    print (isinstance([],Iterable))
    print (isinstance({},Iterable))
    print (isinstance('adf',Iterable))
    print (isinstance([i *2 for i in range(10)],Iterable))
    print (isinstance((i *2 for i in range(10)),Iterable))#是生成器
    #可以直接被next()函数调用并不断返回下一个值得对象称为迭代器

    l=[1,2,6,8,9]
    It=iter(l)
    print It
    print (isinstance(It,Iterator))
  • 相关阅读:
    14.挂载硬件设备
    13.Linux文件存储系统
    12.su 命令与sudo 服务
    11.文件访问控制列表
    10. 文件权限与归属
    9. Linux用户身份和能力
    8. Linux重要的环境变量
    7. Linux命令行的通配符、转义字符
    6. Linux输入输出重定向
    5. Linux文件目录管理和打包压缩与搜索命令
  • 原文地址:https://www.cnblogs.com/luckycn/p/7050506.html
Copyright © 2011-2022 走看看