zoukankan      html  css  js  c++  java
  • 生成器与列表推导式

    1.生成器
    用python代码构建的迭代器就是生成器,生成器的本质就是迭代器。
    构建生成器的两种方法:
    1.利用生成函数构建生成器
    2.利用列表推导式构建生成器
    1 def func(x):
    2     x += 1
    3 func(5) #函数的执行命令,并且接受函数的返回值。
    4 print(func(5))  #如果没有给return则返回None
    5 print(func)     #函数名返回内存地址  <function func at 0x00000254AA2CDF28>
        生成器函数
     1 def func1(x):
     2     x += 1
     3     print(1111)
     4     print(1111)
     5     print(1111)
     6     print(1111)
     7     print(1111)
     8     print(1111)
     9     yield x
    10     x +=2
    11     print(2222)
    12     yield 'alex'
    13 
    14     x +=3
    15 
    16 print(func1(5)) #此时函数中有生成器函数yield,没有return,返回内容为生成器对象地址 <generator object func1 at 0x00000254AA233990>
    17 print(func1)    #函数名返回内存地址  <function func1 at 0x00000254AA2D4048>
    18 
    19 g_obj = func1(5)  # 生成器函数对象
    20 # print(g_obj)  # <generator object func1 at 0x0000025E5D618780>
    21 print(g_obj.__next__())
    22 print(g_obj.__next__())

    一个next 对应一个 yield
    yield 将值返回给 生成器对象.__next__()

    yield与 return
    return 结束函数,给函数的执行者返回值
    yield 不会结束函数,一个next对应一个yield,给生成器对象.__next__() 返回值。

    列表推导式:一行代码几乎搞定你需要的任何的列表。
    1. 循环模式 [变量(加工后的变量) for 变量 in iterable]
    1 l = [i for i in range(1,101)]
    2 print(l)
    3 l2 = ['python%s期' % i for i in range(1,16)]
    4 print(l2)
    5 print([i*i for i in range(1,11)])
        2.筛选模式 [变量(加工后的变量) for 变量 in iterable if 条件]
    1 l3 = [i for i in range(1,31) if i % 2 == 0]
    2 print(l3)
    3 print([i for i in range(1,31) if i % 3 == 0])
    4 print([i**2 for i in range(1,31) if i % 3 == 0])
    5 names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'],
    6          ['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']]
    7 print([j for i in names for j in i if j.count('e') == 2])

    列表推导式
    优点:一行解决,方便。
    缺点:容易着迷,不易排错,不能超过三次循环。
    列表推导式不能解决所有列表的问题,所以不要太刻意用。

    生成器表达式:将列表推导式的 [] 换成() 即可。
     1 g = (i for i in range(100000000000))
     2 print(g)
     3 print(g.__next__())
     4 print(g.__next__())
     5 print(g.__next__())
     6 print(g.__next__())
     7 print(g.__next__())
     8 print(g.__next__())
     9 
    10 mcase = {'a': 10, 'b': 34}
    11 mcase_frequency = {mcase[k]: k for k in mcase}
    12 print(mcase_frequency)
    13 
    14 squared = {x**2 for x in [1, -1, 2]}
    15 print(squared)
  • 相关阅读:
    团队项目选题参考
    结对编程2——单元测试
    个人作业2——英语学习APP案例分析
    js创建数组
    oracle常用函数
    Oracle聚合函数
    Myeclipse10破解版安装包
    Myeclipse按包装SVN
    Eclipse安装SVN
    Git使用教程
  • 原文地址:https://www.cnblogs.com/qilin610/p/9519586.html
Copyright © 2011-2022 走看看