初识表达式:

  优雅、清晰和务实是python的核心价值观,如果想通过操作和处理一个序列(或其他的可迭代对象)来创建一个新

的列表时可以使用列表解析(List comprehensions)和生成表达式,通过这两个操作,我们可以看到这三个观点是如何

在python中和谐统一起来的。

  一、三元表达式:

#定义阶段
def my_max(x,y): #定义一个比较两个参数大小的函数
max = x if x > y else y #用三元表达式表示
print(max) #打印最大值
#调用阶段
my_max(1,2) #按位置传入参数x=1,y=2
----------以下是输出结果-----------
2

  二、列表表达式:

  在需要改变列表而不是需要新建某列表时,可以使用列表解析。列表解析表达式为:

[expr for iter_var in iterable]
[expr for iter_var in iterable if judging condition]

  第一种语法:首先迭代iterable里所有内容,每一次迭代,都把iterable里相应内容放到iter_var中,再在表达式中应

用该iter_var的内容,最后用表达式的计算值生成一个列表。

  第二种语法:加入了判断语句,只有满足条件的内容才把iterable里相应内容放到iter_var中,再在表达式中应用该

iter_var的内容,最后用表达式的计算值生成一个列表。

  实例如下:

l=['egg%s' %i for i in range(8)] #没有判断条件的形式
print(l)
l1=['egg%s' %i for i in range(8) if i > 4] #有判断条件的形式
print(l1)
----------以下是输出的结果------------
['egg0', 'egg1', 'egg2', 'egg3', 'egg4', 'egg5', 'egg6', 'egg7'] #列表l的结果
['egg5', 'egg6', 'egg7'] #列表l1的结果

  以上例子不用列表表达式的话,代码如下:

l = [] #定义l为空列表
for i in range(8):
l.append('egg%s'%i) #往空列表追加内容
print(l) #打印输出
-----------------------------输出结果------------------------------
['egg0', 'egg1', 'egg2', 'egg3', 'egg4', 'egg5', 'egg6', 'egg7']
----------------以下是有判断条件的-----------------
l1 = [] #定义l为空列表
for i in range(8):
if i > 4 :
l1.append('egg%s'%i) #往空列表追加内容
print(l1) #打印输出
------------输出结果------------
['egg5', 'egg6', 'egg7']

  下面来一段相对复杂的代码:

  要求:将下面列表l和字符串s里的元素都一一搭配起来。

l = [1,2,3,4]
s = "hello"
l1 = []
-----------下面是没有判断条件的-----------
for i in l : #循环列表l
for j in s: #循环字符串s
t = (i,j) #将得到的值赋值给t
l1.append(t) #将t追加到空列表l1
print(l1) #打印输出
--------------------------------输出结果----------------------------------
[(1, 'h'), (1, 'e'), (1, 'l'), (1, 'l'), (1, 'o'), (2, 'h'), (2, 'e'),\
(2, 'l'), (2, 'l'), (2, 'o'), (3, 'h'), (3, 'e'), (3, 'l'), (3, 'l'), \
(3, 'o'), (4, 'h'), (4, 'e'), (4, 'l'), (4, 'l'), (4, 'o')]
---------------------------下面是有判断条件的------------------------------
for i in l : #循环列表l
if i > 2 : #加上判断条件
for j in s: #循环字符串s
t = (i,j) 将得到的值赋值给t
l1.append(t) #将t追加到空列表l1
print(l1) #打印输出
-------------------输出结果-------------------
[(3, 'h'), (3, 'e'), (3, 'l'), (3, 'l'), (3, 'o'),\
(4, 'h'), (4, 'e'), (4, 'l'), (4, 'l'), (4, 'o')]

  下面用列表表达式来执行:

l = [1,2,3,4]
s = "hello"
l1 = [(i,j) for i in l for j in s]
print(l1)
--------------------------------输出结果--------------------------------
[(1, 'h'), (1, 'e'), (1, 'l'), (1, 'l'), (1, 'o'), (2, 'h'), (2, 'e'),\
(2, 'l'), (2, 'l'), (2, 'o'), (3, 'h'), (3, 'e'), (3, 'l'), (3, 'l'), \
(3, 'o'), (4, 'h'), (4, 'e'), (4, 'l'), (4, 'l'), (4, 'o')]
-------------------------下面是有判断条件的-------------------------------
l1 = [(i,j) for i in l if i > 2 for j in s]
print(l1)
---------------------输出结果------------------------
[(3, 'h'), (3, 'e'), (3, 'l'), (3, 'l'), (3, 'o'),\
(4, 'h'), (4, 'e'), (4, 'l'), (4, 'l'), (4, 'o')]

  三、生成器表达式:

  在应用场景中当序列过长, 而每次只需要获取一个元素时,应当考虑使用生成器表达式而不是列表解析。生

成器表达式的语法和列表解析一样,只不过生成器表达式是被()括起来的,而不是[],如下:

[expr for iter_var in iterable]
[expr for iter_var in iterable if judging condition]

  语法同上面列表解析,此处略。

  实例如下:

g = ("egg%s"%i for i in range(8) if i > 3) #有判断条件的生成器表达式
print(g)
print(next(g)) #手动next1
print(next(g)) #手动next2
for i in g: #自动在g里使用next方法
print(i) #打印结果
--------------------------以下输出结果------------------------------
<generator object <genexpr> at 0x0000000002532D58> #生成器g的内存地址
egg4 #手动next1结果
egg5 #手动next1结果
egg6 #使用for循环的结果,因为迭代器是一次性的,so,会接着上面打印
egg7 #使用for循环的结果

  说明:

    1、当需要只是执行一个循环的时候尽量使用循环而不是列表解析,这样更符合python提倡的直观性。

    2、当有内建的操作或者类型能够以更直接的方式实现的,不要使用列表解析。  

    3、当序列过长, 而每次只需要获取一个元素时,使用生成器表达式。

    4、列表解析的性能相比要比map要好,实现相同功能的for循环效率最差(和列表解析相比差两倍)。

    5、列表解析可以转换为 for循环或者使用map(其中可能会用到filter、lambda函数)表达式,但是列表解析更

为简单明了,后者会带来更复杂和深层的嵌套。

Python基础之关于表达式的更多相关文章

  1. Python基础—15-正则表达式

    正则表达式 应用场景 特定规律字符串的查找替换切割等 邮箱格式.URL.IP等的校验 爬虫项目中,特定内容的提取 使用原则 只要是能够使用字符串函数解决的问题,就不要使用正则 正则的效率较低,还会降低 ...

  2. python基础之生成器表达式形式、面向过程编程、内置函数部分

    生成器表达式形式 直接上代码 1 # yield的表达式形式 2 def foo(): 3 print('starting') 4 while True: 5 x=yield #默认返回为空,实际上为 ...

  3. Python基础笔记系列一:基本工具与表达式

    本系列教程供个人学习笔记使用,如果您要浏览可能需要其它编程语言基础(如C语言),why?因为我写得烂啊,只有我自己看得懂!! 工具基础(Windows系统下)传送门:Python基础笔记系列四:工具的 ...

  4. Python之路3【第一篇】Python基础

    本节内容 Python简介 Python安装 第一个Python程序 编程语言的分类 Python简介 1.Python的由来 python的创始人为吉多·范罗苏姆(Guido van Rossum) ...

  5. 进击的Python【第三章】:Python基础(三)

    Python基础(三) 本章内容 集合的概念与操作 文件的操作 函数的特点与用法 参数与局部变量 return返回值的概念 递归的基本含义 函数式编程介绍 高阶函数的概念 一.集合的概念与操作 集合( ...

  6. 进击的Python【第二章】:Python基础(二)

    Python基础(二) 本章内容 数据类型 数据运算 列表与元组的基本操作 字典的基本操作 字符编码与转码 模块初探 练习:购物车程序 一.数据类型 Python有五个标准的数据类型: Numbers ...

  7. python基础之循环结构以及列表

    python基础之编译器选择,循环结构,列表 本节内容 python IDE的选择 字符串的格式化输出 数据类型 循环结构 列表 简单购物车的编写 1.python IDE的选择 IDE的全称叫做集成 ...

  8. Python基础+Pythonweb+Python扩展+Python选修四大专题 超强麦子学院Python35G视频教程

    [保持在百度网盘中的, 可以在观看,嘿嘿 内容有点多,要想下载, 回复后就可以查看下载地址,资源收集不易,请好好珍惜] 下载地址:http://www.fu83.cc/ 感觉文章好,可以小手一抖 -- ...

  9. python基础-函数式编程

    python基础-函数式编程  高阶函数:map , reduce ,filter,sorted 匿名函数:  lambda  1.1函数式编程 面向过程编程:我们通过把大段代码拆成函数,通过一层一层 ...

随机推荐

  1. url编码解码的问题(urlencode/quote)

    import urllib.parse params = { "wd":"hello人工智能" } # 将字典形式的进行编码 query_str = urlli ...

  2. Ant 与jemter的结合--批量执行jmeter脚本

    一.Ant 介绍&作用: Apache Ant,是一个将软件编译.测试.部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发. 作用:打包,部署,运行Java工程 二.下 ...

  3. box-shadow阴影覆盖问题

    “商品库”栏下方阴影被覆盖,解决方法:给“商品库”盒子加“position:relative”

  4. 转:springmvc常用注解标签详解

    Spring5:@Autowired注解.@Resource注解和@Service注解 - IT·达人 - 博客园--这篇顺序渐进,讲得超级好--此人博客很不错http://www.cnblogs.c ...

  5. Discuz!X 3.4 前台任意文件删除漏洞复现

    Discuz!X 3.4 前台任意文件删除漏洞复现 参考链接: http://www.freebuf.com/vuls/149904.html http://www.freebuf.com/artic ...

  6. setValuesForKeysWithDictionary:的用途

    setValuesForKeysWithDictionary :今天发现这个高大上的功能,让我心奋不已,以后妈妈再也不用担心模型属性多了,再也不用担心将字典中的值赋值到模型中的麻烦操作了. 模型的.h ...

  7. SpringBoot实现标准的OAuth服务提供商

    ⒈添加pom依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId&g ...

  8. Linux DTS(Device Tree Source)设备树详解之二(dts匹配及发挥作用的流程篇)【转】

    转自:https://blog.csdn.net/radianceblau/article/details/74722395 版权声明:本文为博主原创文章,未经博主允许不得转载.如本文对您有帮助,欢迎 ...

  9. Linux kernel学习-内存管理【转】

    转自:https://zohead.com/archives/linux-kernel-learning-memory-management/ 本文同步自(如浏览不正常请点击跳转):https://z ...

  10. python字典不区分大小写

    from multidict import CIMultiDict dic=CIMultiDict() dic["key"]="1234" print(dic[ ...