Python生成器建议收藏

1.生成器使用yield语句,每次产生一个值,函数就会被冻结2.列表推导式可以用来创建list例:生成[1*1,2*2,3*3,4*4,5*5]的列表,即[1,4,9,16,25]

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

Python生成器建议收藏此处内容已经被作者隐藏,请输入验证码查看内容
验证码:
请关注本站微信公众号,回复“”,获取验证码。在微信里搜索“”或者“”或者微信扫描右侧二维码都可以关注本站微信公众号。

  生成器是Python新引入的概念,生成器可以帮助我们写出非常优雅的代码

1. 生成器

  使用yield语句,每次产生一个值,函数就会被冻结 

def fun(li):
    for i in li:
        #print (i)
        yield i

li = [1,2,3,4,5]
for i in fun(li):
    print (i)

2.列表推导式

  可以用来创建list

  例:生成[1*1, 2*2, 3*3, 4*4, 5*5]的列表,即[1,4,9,16,25]

#方法1
def fun1():
    l = []
    for i in range(1,6):
        l.append(i * i)
    return l

print (fun1())

#方法2
def fun2():
    return (i*i for i in range(1,6))

ll = list(fun2())
print (ll)

#方法3
def fun3():
    for i in range(1,6):
        yield i*i
for i in fun3():
    print (i)
输出:
>>>> [1,4,9,16,25] >>>> [1,4,9,16,25]
>>>> 1
>>>> 4
>>>> 9
>>>> 16
>>>> 25

特别注意在斐波那契数列例子中a,b=b,a+b语法

3. yield实现协程任务器调度

#coding = utf-8

'''
    yield实现协程任务调度
'''
from collections import deque

class TaskScheduler:
    def __init__(self):
        self.taskqueue = deque()

    def new_task(self, task):
        self.taskqueue.append(task)

    def run(self):
        while self.taskqueue:
            task = self.taskqueue.popleft()
            try:
  
                next(task)
                self.taskqueue.append(task)
            except Exception:
                print ("run exception")

def task1(n):
    while n > 0:
        print ("say hello: %d" %(n))
        yield n
        n -=1
    print ("task1 say goodble")

def task2(n):
    x= 0
    while x < n:
        print ("say hi:%d" %(x))
        yield x
        x += 1

    print ("task2 say goodbye")

taskschequler = TaskScheduler()
taskschequler.new_task(task1(4))
taskschequler.new_task(task2(4))
taskschequler.run()
    

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/120226.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • linux中mysql忘记密码[通俗易懂]

    linux中mysql忘记密码[通俗易懂]第一种解决方案解决方法:1、利用“servicemysqlstop”命令关闭mysql服务;2、修改mysql的配置文件“my.conf”;3、用“servicemysqldstart”命令重启数据库;4、用“usemysql”语句修改密码。本教程操作环境:linux7.3系统、mysql8.0.22版本、DellG3电脑。linux中mysql忘记密码怎么解决解决方法:1、检查mysql服务是否启动,如果启动,关闭mysql服务 .

  • 阿里笔试题目「建议收藏」

    阿里笔试题目「建议收藏」题目描述一个淘宝的订单中包含n(10&gt;=n&gt;=1)种商品A1,A2,…,An,每种商品数量分别为a1,a2,…,an个,记做{a1,a2,…,an}(ak&gt;0)。订单在仓库生产过程中,仓库为了提升作业效率,会提前对热门组合商品进行预包装。假设这n个商品有m(9&gt;=m&gt;=1)个商品组合,每个组合bomk包含A1,A2,…,An的数量分别为{b1,b2,…,bn}(bk&…

  • java项目视频22套「建议收藏」

    java项目视频22套「建议收藏」java项目视频22套如图所示:获取方式:关注微信公众号:javafirst发送“Java项目视频”即可获取链接

  • vue 隐藏滚动条_vue滚动条自动滚动到底部

    vue 隐藏滚动条_vue滚动条自动滚动到底部1、设置滚动条: overflow-x:scroll;white-space:nowrap;2、隐藏滚动条:::-webkit-scrollbar{width:0!important;}::-webkit-scrollbar{width:0!important;height:0;}…

  • sort排序「建议收藏」

    sort排序「建议收藏」Array对象一个方法:sort(),它是用来排序的。用法如下:vararr=[1,65,6,7,12,0];vars=arr.sort();console.log(s);//[0,1,12,6

  • 字符串模式匹配bf算法_字符串排列组合算法

    字符串模式匹配bf算法_字符串排列组合算法字符串匹配【问题描述】对于字符串S和T,若T是S子串,返回T在S中的位置(T的首字符在S中对应的下标),否则返回-1.【问题求解】采用直接穷举法求解,称为BF算法。该算法从S的每一个字符开始查找,看T是否会出现。例如,S=“aababcde”,T=“abcd”:…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号