zoukankan      html  css  js  c++  java
  • python高级特性

    一、列表生成式

    #过滤条件
    [x*x for x in range(10) if x %2==0] [0, 4, 16, 36, 64] #两层循环 [m+n for m in 'ABC' for n in 'XYZ'] ['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ'] #if else 必须写在for之前 [x if x%2==0 else -x for x in range(10)] [0, -1, 2, -3, 4, -5, 6, -7, 8, -9]

    二、生成器

    如果需要一个超级大的列表,那么内存会不够用,此时要用可以利用某种规则推算元素的生成器。

    创建生成器只需要将列表生成式的[]改成()即可,然后可以用next()或for循环迭代生成器对象。

    另一种方法时在普通函数中使用yeild关键字,将普通函数变成generator函数,调用生成器函数会返回生成器对象。

    def fib(max):
        n, a, b = 0, 0, 1
        while n < max:
            yield b
            a, b = b, a + b
            n = n + 1
        return 'done'

    三、迭代器

    用于for循环的数据类型有:

    1.集合类型:list、tuple、dict、set、str等;

    2.generator:生成器和带yield的generator function

    这些直接用于for循环的对象统称为可迭代对象Iterable,可以用isinstance(*, Iterable)

    生成器都是Iterator对象,但list、dict、str虽然是迭代器Iterable,但不是迭代器对象Iterator。

    这是因为python的Interator对象表示的是一个数据流,Iterator对象可以被next()函数调用并不断返回下一个数据,直到没有数据时抛出错误。可以把这个数据流看做是一个有序序列,但我们却不能提前知道序列的长度,只能不断通过next()函数实现按需计算下一个数据,所以Iterator的计算是惰性的,只有在需要返回下一个数据时它才会计算。

     

  • 相关阅读:
    Java里if...else语句
    Java里for循环和增强版循环;break语句:跳出循环;continue:跳转循环
    Java里while循环和do...while循环
    static 修饰符
    Java类变量(静态变量)
    Java实例变量
    Java局部变量
    Java访问实例变量和调用成员方法
    Java里import语句使用
    声明式服务调用
  • 原文地址:https://www.cnblogs.com/LMIx/p/9683021.html
Copyright © 2011-2022 走看看