Python简明教程第11节:表达式
在Python 中有一些代码块的功能可以使用表达式来实现。
条件表达式
![](https://img.haomeiwen.com/i9552257/b85e0f93174888f8.png)
![](https://img.haomeiwen.com/i9552257/90805d6f7117a7ad.png)
这种写法有点类似于英语语法,英文好的同学应该很容易理解。
一般条件表达式的改写常用语条件二选一的情况,这点和Java中三元表达式也很相似。
除此之外,还有一种不是很常见的有元组改写而来的表达式:
![](https://img.haomeiwen.com/i9552257/d0b40329db5d777c.png)
在这种表达式中,将两种结果作为两个元素存储在元组中,然后由其索引得到相应的值。Python中0等价于假,1等价于真。在索引表达式为真的时候相当于取元组中索引为1的元素,索引表达式为假的时候相当于取元组中索引为0的元素。
列表推导式
variable = [out_exp_res for out_exp in input_list if condition ]
out_exp_res: 列表生成元素表达式,可以是有返回值的函数。
for out_exp in input_list: 迭代input_list将out_exp传入out_exp_res表达式中。
condition : 根据条件过滤哪些值可以。
假设我们需要将一个字符串中的所有字符转换为大写字母存储在列表中:
![](https://img.haomeiwen.com/i9552257/839e9f8e2c7eba09.png)
![](https://img.haomeiwen.com/i9552257/1fec9653f87fd74b.png)
列表推导的表达十分简洁,而且执行速度与也比普通的for循环操作要快。其实列表推导还有更强大的功能,在for循环我们也可以加上筛选的操作,来得到符合我们需要的内容。
下面是一个例子:我们需要找到一个字符串中所有的大写字母并将其添加到列表中:
![](https://img.haomeiwen.com/i9552257/9ab6f9b3dbbdcb0b.png)
元组推导式
variable =(out_exp_res for out_exp in input_tuple if condition )
out_exp_res: 列表生成元素表达式,可以是有返回值的函数。
for out_exp in input_ tuple : 迭代input_ tuple 将out_exp传入out_exp_res表达式中。
condition : 根据条件过滤哪些值可以。
元组和列表之间差异很小,只是元组元素不支持改变。我们使用方括号来表示列表,圆括号来表示元组。
关于元组推导其实也和列表推导很相似,只是采用圆括号来表示而已。
假设,我们需要(1,2,3,4,5)这样一个元组:
![](https://img.haomeiwen.com/i9552257/5e17bcb5f7c4a688.png)
其实我们打印的时候并没有得到我们需要得到的元组,而是一个生成器对象。所以元组推导有时候也被称为生成器表达式。
![](https://img.haomeiwen.com/i9552257/8593b0290f9a30af.png)
其实没有的得到元组的原因就是元组推导不会立即计算出所有的表达式的值,它只是一个表达式,会在你调用的时候计算出表达式的值。大概的意思就是我们的得到了一个其中存储着几个表达式的元组,当我们需要取元组中元素的时候,这个表达式会计算出具体值返回给我们。
![](https://img.haomeiwen.com/i9552257/a320e42837f20b8f.png)
![](https://img.haomeiwen.com/i9552257/5c05218eb791a111.png)
我们去元组中元素赋值给列表,看到表达式已经计算出值了。这里只是演示结果,证明的元组推导的时候表达式会在被调用的执行。
命名元组
表达式其实常见的就这么多,只是说到元组就想说一下命名元组。
命名元组的作用我们可以一个典型的例子说明,其实我感觉用的也不多。
我们定义一个表示在二维坐标系中的点的类:
![](https://img.haomeiwen.com/i9552257/c1da3b0db1d95f0b.png)
这是常规的写法,然后是使用命名元组的方式:
![](https://img.haomeiwen.com/i9552257/8ea6a5983fc5345e.png)
这样就使用命名元组的方式定义了一个类。
我了解到的命名元组的使用还只到这种程度,希望你有更好的命名元组的使用场景可以告诉我,谢谢。
字典推导式
它们跟列表推导式也是类似的。 唯一的区别在于它使用大括号{}。
variable ={key_exp : value_exp for key , value in dic_items if condition}
key_exp : value_exp : 键值对表达式,可以是有返回值的函数。
for key , value in dic_items : 迭代 dic_items 将key传入 key_exp 表达式中,将value传入value_exp表达式中。
condition : 根据条件过滤哪些值可以。
下面是 一个快速交换key和value的例子:
![](https://img.haomeiwen.com/i9552257/b54ef244d0beb836.png)
![](https://img.haomeiwen.com/i9552257/5433262595fab085.png)
Then,that’s all,thank you。