初识表达式:

  优雅、清晰和务实是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. xshell操作

    (1)命令ls——列出文件 ls -la 给出当前目录下所有文件的一个长列表,包括以句点开头的“隐藏”文件 ls a* 列出当前目录下以字母a开头的所有文件 ls -l *.doc 给出当前目录下以. ...

  2. Core Mvc传值Query、Form、Cookies、Session、TempData、Cache

    1.传值方法 使用Request的方法(1-3): 1)Query:获取链接?后面的值 如:http://localhost:55842/Home/About?name=kxy public IAct ...

  3. mysql 原理 ~ redo

    一 简介:redo log二 文件   ib_logfile0 ib_logfile1 两个redo log 默认为一组 循环覆盖写入三 相关参数   innodb_log_file_size=256 ...

  4. es集群数据库~原理细节

    ES原理一 基本定义  index(索引)  相当于mysql中的数据库  type(类型)  相当于mysql中的一张表  document(文档)  相当于mysql中的一行(一条记录)  fie ...

  5. const关键字的作用

    1.防止被修饰的成员的内容被改变. 2.修饰类的成员函数时,表示其为一个常函数,意味着成员函数将不能修改类成员变量的值. 3.在函数声明时修饰参数,表示在函数访问时参数(包括指针和实参)的值不会发生变 ...

  6. 引入第三方SDK allowBackup value不一致引起的编译异常

    项目中要引入一个客服的SDK,项目中 <application android:name=".AppApplication" android:allowBackup=&quo ...

  7. JavaWeb - Servlet教程

    http://www.runoob.com/servlet/servlet-tutorial.html

  8. SpringCloud Feign

    ⒈Feign是什么? Feign是Netflix开发的声明式.模板化的HTTP客户端, Feign可以帮助我们更快捷.优雅地调用HTTP API. SpringCloud微服务项目之间调用是通过Res ...

  9. 网络爬虫构造出URL的列表数据

    urls = ['http://bj.xiaozhu.com/search-duanzufang-p{}-0/'.format(number) for number in range(1,14)] # ...

  10. caffe调试

    这里说一下关于如何进行Caffe的调试: 参考:https://blog.csdn.net/tsyccnh/article/details/51679121 简要说一下步骤: (1)首先对libcaf ...