三元表达式

#!/usr/bin/env python3
# _*_ coding:utf-8 _*_
# @File    : 三元表达式
# @Version : 1.0'''三元表达式能实现简单的 if else  语句 so....有那三元呢:自己理解1. 左边成立执行的代码  2. if 判断条件  3. esle 不成立所执行的代码-- 最后的结果用变量接收
'''# 简单的 if else 语句:

num = 7if num > 10:print('大于10的数字')
else:print('小于10的数字')# -------------------------def max2(x,y):if x > y:return xelse:return yprint(max2(3,7))# 三元表达式:将简单的 if els 写在一行,赋值给一个变量接受
ret = '大于10的数字' if num > 10 else '小于10的数字'
print(ret)# ---------------------------------------------def max2(x,y):return x if x > y else yprint(max2(3,7))# ---------------------------------------------
days = 45result =  '必掀起大浪' if days >= 45 else 'select'
print(result)

列表解析 生成器表达式

#!/usr/bin/env python3
# _*_ coding:utf-8 _*_
# @File    : 列表解析
# @Version : 1.0from collections import Iterator'''
将迭代数据,利用列表解析,生成新的列表。但数量大的时不可用列表解析,会引爆内存。'''# 取得列表元素的平方

l = [11,22,33,44,55,66,77,88,99]
new_l = []# 1 正常解析for k in l:new_l.append(k**2)print(new_l)    # [121, 484, 1089, 1936, 3025, 4356, 5929, 7744, 9801]# -----------------------------------------------------------------------------------------# 2 列表解析

ret = [ k**2 for k in l ]print(ret)          # [121, 484, 1089, 1936, 3025, 4356, 5929, 7744, 9801] 效果一样# 3 列表解析时也可加入条件'''[ 列表解析肯定要用list包起来 表达式之间空格即可 不需要写特殊分隔符 结果肯定也是个list ]列表解析的好处缩减代码两
'''
#    [ 列表最左边对解析出的每一个元素处理  中间是解析语句  最右边是过滤条件 ]

ret = [ k**2 for k in l if k > 44 ]print(ret)          # [3025, 4356, 5929, 7744, 9801]# 再弄个例子

l2 = ['tony','seven','eggtea']new_l2 = [ k.capitalize()  for k in l2 ]print(new_l2)       # ['Tony', 'Seven', 'Eggtea']# -----------------------------------------------------------------------------------------# 将 [] 换成() 会是啥玩意呢             --- 生成器表达式
new_l2_ = ( k.capitalize() for k in l2 )print(new_l2_)                          # <generator object <genexpr> at 0x7f194c8982b0>  是个生成器print(type(new_l2_))                    # <class 'generator'>   是个生成器print(isinstance(new_l2_,Iterator))     # True  迭代器 __iter__ ,__next__ print(next(new_l2_))                    # Tony
print(next(new_l2_))                    # Seven
print(next(new_l2_))                    # Eggtea# so ...

list_old = [1,2,3,4,5,6,7,8,9]new_list = ( k**2 for k in list_old if k > 4 )      #  [] 换成了() 结果是 generatorprint(new_list)                                     # <generator object <genexpr> at 0x7f2d59946410>for i in new_list:print(i)'''so ... 将列表解析的 [] 换成 () 结果是一个生成器(迭代器)不确定生成器里元素的数量时不要用next 取值 用 独有特性的 for 循环 取值
'''# 列表解析 [] 换成 () 后 结果是个生成器, 就成了生成器表达式,这样解析数量大的时就不会爆内存了 # 弄个例子# ret = [ 'egg%s' %k  for k in range(100000000)]    这种情况内存吃不了

g = ('egg%s' %k for k in range(10000000000000000))  # 数据在大也无妨,next 只有一个值在内存中print(g.__next__())
print(g.__next__())
print(g.__next__())
print(g.__next__())
print(g.__next__())         # 可以无限next
g1 = ('egg%s' %k for k in range(10000000000000000) if k == 9) # 后面加上过滤条件print(next(g1))             # 生成器里就一个过滤成功的一个值,只能next一次
#print(next(g1))             # StopIteration Error # ------------------------------------------------------------------------------------------#        生成器表达式应用场景于读取大文件比较好
with open('test.c',encoding='utf-8') as f_read:g=( line.strip() for line in f_read )       # 去掉换行符,整个文本搞成生成器print(next(g))print(next(g))for k in g:print(k)print(100*'{0}'.format('-'))'''这里循环生成器不行,此时文件已关闭,生成器不存在了for i in g:print(i)        # ValueError: I/O operation on closed file'''# 在弄个例子 --如:数据库中的数据
'''
apple 10 3
tesla 100000 1
mac 3000 2
lenovo 30000 3
chicken 10 3
'''# 计数总消费

with open('db.txt',encoding='utf-8') as f:'''ret = [ float(line.split()[1]) * int(line.split()[2]) for line in f]print(ret)      # [30.0, 100000.0, 6000.0, 90000.0, 30.0]print(sum(ret)) # 196060.0'''cont = sum(float(line.split()[1]) * int(line.split()[2]) for line in f)print(cont)     # 196060.0# 格式化输出数据 [{'name':xxx,},{'price':xxxx},{'price':xxx}]

with open('db.txt',encoding='utf-8') as f_read:goods_info  = [ {'name':line.split()[0],'price':line.split()[1],'count':line.split()[2]} for line in f_read ]print(goods_info)       #           [{'count': '3', 'name': 'apple', 'price': '10'},#           {'count': '1', 'name': 'tesla', 'price': '100000'},#           {'count': '2', 'name': 'mac', 'price': '3000'},#           {'count': '3', 'name': 'lenovo', 'price': '30000'},#           {'count': '3', 'name': 'chicken', 'price': '10'}]

转载于:https://www.cnblogs.com/liushubao/p/7700729.html

4 三元表达式 列表解析 生成器表达式相关推荐

  1. 三元表达式列表解析生成器表达式

    三元表达式 列表解析 生成器表达式 三元表达式 在作简单的判断时,三元表达式能简化代码: def max(x, y):if x > y:return xelse:return y # 这个函数可 ...

  2. python二十二:迭代,三元表达式,列表解析

    迭代器协议:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代(只能往后走,不能往前退)   可迭代对象:实现了迭代器协议的对象( ...

  3. day13 生成器 三元运算 列表解析

    本质上来说生成器迭代器都是一种数据类型,如果你直接打印生成器是无法得出值的,会得到一串内存地址,即一个对象想要得到生成器的值必须要用for或者next,list等来获取 生成器生成器就是一个可迭代对象 ...

  4. 列表生成式,生成器表达式,模块的使用

    三元表达式 无论条件成立与否都要返回一个值, 用于简化仅有一个判断的函数(或代码块)递归 递归有循环调用的次数限制,调用函数时,函数相关数据要入栈,而栈区是有限的 二分查找法匿名函数 仅能在定义时使用 ...

  5. Python - 列表解析式/生成器表达式

    列表解析式: [expr for iter_var in iterable if cond_expr] 生成器表达式: (expr for iter_var in iterable if cond_e ...

  6. 三元表达式,列表解析和生成器表达式

    三元表达式 在以前,在诸如比较两个数大小的时候,通常的写法都是下面的样子 if x > y:print("the max is x") else:print("th ...

  7. 初学者python笔记(迭代器、生成器、三元表达式、列表解析、send()与yield())

    文章目录 迭代器与for循环的关系 1. 迭代器协议 2. 可迭代对象 3. for循环的本质 4. 强大的for循环机制 5. 迭代器如何工作的 6. while循环模拟for循环与迭代器的结合 7 ...

  8. Python开发——函数【迭代器、生成器、三元表达式、列表解析】

    递归和迭代 小明问路篇解释说明 递归:小明-->小红-->小于-->小东:小东-->小于-->小红-->小明 小明向小红问路,因小红不知道,所以向小于问路,因小于不 ...

  9. python迭代器和生成器(3元运算,列表生成式,生成器表达式,生成器函数)

    1.1迭代器 什么是迭代器: 迭代器是一个可以记住遍历的位置对象 迭代器对象从集合的第一个元素元素开始访问,直到所有元素被访问完结束,迭代器只能往前不会后退. 迭代器有两个基本方法:iter ,nex ...

最新文章

  1. zabbix 乱码的问题
  2. 自然语言处理NLP之文本摘要、机器翻译、OCR、信息检索、信息抽取、校对纠错
  3. 金融类APP不得强制读取通讯录
  4. js如何判断字符串里面是否含有某个字符串
  5. python安装完后无法打开运行_安装Python完成后无法正确运行
  6. oracle 日期格式转换 ‘ddMONyyyy’ 'ddMMMyyyy'
  7. VS2010 发布网站时文件丢失解决办法
  8. 【转载】关于 Google Chrome 中的全屏模式和 APP 模式
  9. SmartTemplate学习入门一
  10. python list保存至csv文件
  11. 学习如何看懂SQL Server执行计划(一)——数据查询篇
  12. 下载UltraEdit UE 破解版方法
  13. 04【副词】(Adverb)位置,形态,时间/频度副词,强调?
  14. 刘洪波《英文字根词源精讲》完整目录
  15. 泉城济南——三妮儿暴走一日游
  16. 程序员如何增加收入?
  17. python isidentifier_【我们一起自学Python】-字符串操作
  18. 主流操作系统的开发语言
  19. 后端人眼中的Vue(五)
  20. PEO-b-PTMPM的嵌段共聚物复合囊泡/具有pH响应性的纳米颗粒/卤化银纳米粒子/聚合物纳米

热门文章

  1. flask sqlalchemy踩坑记录
  2. 不要纠结于过去发生的事
  3. 格式化_icecream_python
  4. linux模拟器 cygwin源
  5. LeetCode简单题之将每个元素替换为右侧最大元素
  6. OpenCL通用异构开放环境
  7. 将代码生成器带入TVM
  8. 2021年大数据常用语言Scala(二十九):scala面向对象 单例对象
  9. 2021年大数据Flink(二十五):Flink 状态管理
  10. [JAVA EE] 内联用法