zoukankan      html  css  js  c++  java
  • 函数-生成器、迭代器

    #-----列表生成器-----

    1 a = [x*2 for x in range(10)]
    2 print(a,type(a)) #[0, 2, 4, 6, 8, 10, 12, 14, 16, 18] <class 'list'>
    3 
    4 def f(n):
    5     return n**3
    6 
    7 a = [f(x) for x in range(10)]
    8 print(a,type(a)) #[0, 1, 8, 27, 64, 125, 216, 343, 512, 729] <class 'list'>
    #-----简单赋值方式

    1 t = (12,45)
    2 a,b = t
    3 print(a)#12
    4 print(b)#45
    #----生成器(生成器就是可迭代对象)-----

     1 s = (x*2 for x in range(10))
     2 for i in s:
     3     print(i,end=" ") # 0 2 4 6 8 10 12 14 16 18
     4 
     5 #可迭代对象 :内部有iter 方法
     6 a = (1,2,3,5)
     7 a.__iter__()
     8 b = [2,3,4,5]
     9 b.__iter__()
    10 c = {"a":"d","g":"r"}
    11 c.__iter__()
    12 e = set(a)
    13 print(e,type(e))
    14 e.__iter__()
    #-----yield关键字生成斐波那契数列

     1 def fib(max):
     2     n,before,after = 0,0,1
     3     while n < max:
     4         yield after
     5         before,after = after,before+after
     6         n += 1
     7 
     8 g = fib(6)
     9 for i in g:
    10     print(i)
    #-----yield 使用

     1 def bar():
     2     print("ok1")
     3     str1 = yield 1
     4     print(str1)
     5 
     6     print("ok2")
     7     str2 = yield 2
     8     print(str2)
     9 b = bar()
    10 next(b)
    11 ret = b.send("ee")
    12 print(ret)
    #-----还可通过yield实现在单线程的情况下实现并发运算的效果

     1 import time
     2 
     3 def tourist(name):
     4     print("%s 开始吃包子" % name)
     5     while True:
     6         baozi = yield  #生成器函数(generator)
     7         print("%s吃了第%s个" % (name, baozi))
     8 
     9 def cook(name):
    10     c1  = tourist("A")
    11     c2 = tourist("B")
    12     c1.__next__()
    13     c2.__next__()
    14     print("%s开始做包子了" % name)
    15     for i in range(1,10):
    16         time.sleep(0.2)
    17         c1.send(i)
    18         c2.send(i)
    19 cook("dream")
    View Code
    #-----迭代器-----

    1、有iter方法
    2、有next方法
    1 a = ["dream","rise","happy"]
    2 d = iter(a) #<list_iterator object at 0x000001E01BFADA90>
    3 print(d)
    4 print(a.__iter__())#<list_iterator object at 0x00000258F8392668>
    
    
  • 相关阅读:
    C#中Equals和= =(等于号)的比较)(转载)
    C# 控制台应用程序输出颜色字体
    c#获取当前运行程序所在的目录
    java环境配置
    c#随机产生颜色
    Git学习
    git删除所有提交历史记录
    git忽略项gitegnore配置
    不搭建git服务器对git仓库进行局域网内共享多人合作开发项目
    搭建Git服务器-SCM-Manager
  • 原文地址:https://www.cnblogs.com/rise-home/p/11612358.html
Copyright © 2011-2022 走看看