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

    列表生成式(列表解析) 效率比普通方法高
    a=[x for x in range(100)if x % 2 == 0]

    x:列表元素的值
    for x in range(100):数据来源
    if x%2==0:元素的成立条件

    例:生成一个二维列表
    a=[[0 for i in range(10)]for j in range(3)]

    生成器
    若序列元素个数非常多,全放到内存中,对计算机压力是很大的,如果元素按某种算法推算出来,那就不必创建完整的list
    在Python中,这种一边循环一边计算的机制,称为生成器:generator

    创建方法1
    a=(x for x in range(100)if x % 2 == 0 ) 生成式[]改为()

    获取generator返回值 使用next()函数
    next(a)---->0
    next(a)---->1
    不过一次次使用next(),太过于麻烦,正确的方法是使用for循环,generator为可迭代对象
    for i in a:
    print(i)

    创建方法2
    不过用生成式也有解决不了的问题如:斐波那契数列,但是函数方式可以很轻松的解决
    def fib(num):
    for i in range(1,num+1):
    if i==1:
    b,value=1,1
    yield value
    elif i==2:
    value=2
    yield value
    elif i>=3:
    b=value
    value=value+b
    yield value
    这里可以看出来 生成式函数用yield返回继续执行,而函数是顺序执行,遇到return语句或者最后一行函数语句就返回
    即第几次的yield为第几次调用的值
    调用方法
    1.
    next(fib(10)) 直接调用
    2.
    a=fib(10) 对象
    next(a)
    3.
    for i in fib(10): 迭代
    print(i)
    没有可调用的yleld/list元素会引发StopIteration错误

    迭代器
    可直接作用于for的数据类型
    1.集合数据类型 list tuple dict set str
    2.generator(生成器)/generator function(生成器函数)
    这类统称为:Iterable(可迭代对象)
    生成器不但可以作用for循环,还能被next()不断调用并返回一个值,直到最后抛出StopIteration错误表示无法继续返回下一个值
    可以被next()不断调用的称为:Iterator(迭代器)

    生成器是Iterator,而list dict set虽然是Iterable却不是Iterator iter(Iterator对象) 将Iterable转为Iterator

    Iterable与Iterator的区别
    Iterator对象表示一个数据流,Iterator对象可以被next()调用并不断返回值,没有数据抛出StopIteration错误,可以将这个数据流看做一个
    有序数列,但不知道序列长度只能不断next()按需计算下一个数据,因此Iterator的计算是惰性

  • 相关阅读:
    vue-指令
    VueMusic-14搜索实现
    VueMusic-13歌手列表
    VueMusic-12歌词滚动
    VueMusic-11播放-歌词适配
    VueMusic-10.播放-歌词加载
    VueMusic-9.播放-播放功能
    VueMusic-8更多-下拉刷新
    VueMusic-7更多-数据适配
    VueMusic-6首页-热门榜单
  • 原文地址:https://www.cnblogs.com/frlblog/p/12785389.html
Copyright © 2011-2022 走看看