markdown 蟒蛇中的列表推导式,拉姆达表达式和闭包
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了markdown 蟒蛇中的列表推导式,拉姆达表达式和闭包相关的知识,希望对你有一定的参考价值。
# List Comprehension列表推导式
```python
>>> [(x,y) for x in range(4) if x>1 for y in range(6) if y>3]
[(2, 4), (2, 5), (3, 4), (3, 5)]
```
以上列表推导式等价于
```python
l = []
for x in range(4):
if(x > 1):
for y in range(6):
if(y > 3):
l.append((x, y))
```
# lambda表达式和闭包
简单来说,编程中提到的lambda表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指**匿名函数**。
```python
>>> lambda x, y: x+y
```
x, y是匿名函数的两个参数,x+y是返回值
那么lamdba函数的正确使用场景在哪呢?
### 1、函数式编程
尽管Python算不上是一门纯函数式编程语言,但它本身提供了很多函数式编程的特性,像map、reduce、filter、sorted这些函数都支持函数作为参数,lambda 函数就可以应用在函数式编程中。
比如:一个整数列表,要求按照列表中元素的绝对值大小升序排列
```python
>>> ls = [5, 3, -1, 8, -3, 0, 1]
>>> sorted(ls, key = lambda x: abs(x))
[0, -1, 1, 3, -3, 5, 8]
```
排序函数`sorted`支持接收一个函数作为参数,该参数作为sorted的排序依据。
### 2、闭包
简单理解,闭包就是一个定义在函数内部的函数。闭包使得变量即使脱离了该函数的作用域也依然可以被访问。具体来说,闭包是指将当前作用域中的变量通过值或者引用的方式封装到lambda表达式当中,成为表达式的一部分,它使你的lambda表达式从一个普通的函数变成了一个带隐藏参数的函数。
```python
>>> def add_n(n):
... return lambda x: x+n
...
>>> add_5 = add_n(5)
>>> add_5(3)
8
```
这里的lambda表达式就是个闭包。函数add_n接收参数n,返回一个匿名函数。参数n的值在闭包的作用下,成为lambda表达式的一部分,使得它在全局作用域依然可以被访问到。
以上是关于markdown 蟒蛇中的列表推导式,拉姆达表达式和闭包的主要内容,如果未能解决你的问题,请参考以下文章
C# 拉姆达表达式相关,看一下两行代码的意思
python基础列表推导式&字典推导式&集合推导式
拉姆达表达式组合
java 拉姆达 lamdba get
C#基本功------委托和事件--拉姆达表达式
04python 中的各种推导式(python函数)