zoukankan      html  css  js  c++  java
  • 1.17 Python基础知识

      可循环迭代的对象称为可迭代对象,迭代器和生成器函数是可迭代对象。

      列表解析表达式:可以简单高效处理一个可迭代对象,并生成结果列表

      示例代码:

    [ i ** 2 for i in range(10) ]
    
    #输出结果
    
    [0,1,4,9,16,25,36,49,64,81]

      生成器表达式:可以简便快捷地返回一个生成器。生成器表达式的语法和列表解析式基本一样,只不过是将[]替换成()

      生成器的数据只有在调用时才生成

      示例代码:

    a = ( i ** 2 for i in range(10))
    
    print( a )
    
    # 输出结果,打印的是生成器对象地址
    
    <generator object <genexpr> at 0x000001A4118978E0>

      调用方法1:

    print(next(a)) 
    
    #相当于 print(a.__next__())

      调用方法2:

    for i in a:
        print(i)

      调用方法3:

    while True:
        try:
            print(next(a))
        except StopIteration:
            break

      

      生成器函数

      示例代码:

    def fib():
        a,b = 0,1
        while True:
            a,b = b,a+b
            yield b
    
    
    print(fib())
    
    for f in fib():
        if f < 1000:
            print(f)
        else:
            break
    
    # 输出结果
    
    <generator object fib at 0x0000024F66A478E0>
    1
    2
    3
    5
    8
    13
    21
    34
    55
    89
    144
    233
    377
    610
    987

    迭代和可迭代对象:

      1、可迭代对象:Iterable

      系列对象都是可迭代对象,生成器函数和生成器表达式也是可迭代对象。

      判断是不是可迭代对象通过collections模块中的方法进行测试,示例:

    import collections
    
    a = ( i ** 2 for i in range(10) )
    
    b = 123
    
    print(isinstance(a,collections.Iterable))
    print(isinstance(b,collections.Iterable))
    
    # 输出结果
    
    True
    False

      2、迭代器:Iterator

      可使用内置函数next(),调用迭代器的__next__()方法,依次返回下一个项目值的对象就是迭代器

    import collections
    
    
    b = [1,2,3,4]
    
    print(isinstance(b,collections.Iterable))
    print(isinstance(b,collections.Iterator))
    
    # 输出结果,b是一个可迭代对象,但不是一个迭代器
    
    True
    False

      像列表,字典,元组都是可迭代对象,但不是迭代器,我们可以用内置函数iter()转换成迭代器,示例代码:

    import collections
    
    b = [1,2,3,4]
    
    print(isinstance(b,collections.Iterable))
    print(isinstance(b,collections.Iterator))
    print(isinstance(iter(b),collections.Iterator))
    
    # 输出结果
    
    True
    False
    True

       Python内置的可迭代对象

    range  :range(start,stop[,step])

    map  :map(function,iterable,...)

    itertools.starmap  :itertools.starmap(function,iterable)

    filter  :filter(function,iterable)  filterfalse(predicate,iterable)

    itertools.filterfalse  :

    zip  :zip(*iterables)

    zip_longest  :zip_longest(*iterables,fillvalue=None)

    enumerate  :enumerate(iterable,start=0)

    待续。。。

      

  • 相关阅读:
    MYSQL profiling分析语句
    进程状态与僵尸进程、孤儿进程
    Nginx跨域设置
    Redis的应用场景
    Nginx的作用
    cgi、fast-cgi和php-fpm的介绍(作用)
    CoreDump开启和Swoole Tracker 3.0配置
    好题总结
    Atcoder总结 Part III
    Atcoder总结 Part II
  • 原文地址:https://www.cnblogs.com/topspeedking/p/6544249.html
Copyright © 2011-2022 走看看