• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

桃花源主

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

生成器

只要函数内有yield,调用的时候就和函数本身没有关系了,得到了是一个生成器对象,玩法就是next(x),next(x),next(x)

(若函数体包含yield关键字,再调用函数,并不会执行函数体代码,得到的返回值即生成器对象)

1.yield表达式应用

  • yield可以用于返回值,但不同于return,函数一旦遇到return就结束了,而yield可以保存函数的运行状态挂起函数,用来返回多次值。
  • 针对表达式形貌的yield,生成器对象必须事先被初始化一次,让函数挂起在food=yield位置,等待调用g.send()方法为函数体传值,g.send(None)等同于next(g)

2.三元表达式

res = 条件成立时返回的值 if  条件  else 条件不成立时返回的值
如:
x=1
y=10

res = x if x >10 else y

3.列表生成式

快速生成列表的表达式

l=['han_age','wang_age','liu','zhao']  快速筛选出列表后结尾为_age
l_new=[name for name in l if name.endswith('age')]

4.生成器表达式

创建一个生成器对象有两种方式,一种是调用带yield关键字的函数,另一种就是生成器表达式,与列表生成式的语法相同,只需要将[]换成()。即:(expoession for item in iterable if condtion)

[x*x for x in range(3)]    [0,1,4]
g=(x*x for x in range(3))   此时等到的g为生成式了

posted on 2021-01-31 22:15  桃花源主  阅读(57)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3