知识点总结 2022-8-16

lambda 表达式

lambda 是个关键字,然后是冒号,冒号左边是传入函数的参数,冒号后边是函数实现表达式以及返回值。
如果使用传统的函数定义方式,应该是这样:
def <lambda>(arg1, arg2, arg3, ... argN):
...     return expression

举个例子:

>>> def squareX(x):
...     return x * x
...
>>> squareX(3)
9
>>> squareY = lambda y : y * y
>>> squareY(3)
9

前者是函数定义的方法,后者是使用lambda表达式

lambda 是一个表达式,因此它可以用在常规函数不可能存在的地方:

举个例子,比如放在列表之中:

>>> y = [lambda x : x * x, 2, 3]
>>> y[0](y[1])
4
>>> y[0](y[2])
9

与map(),filter()函数混合使用

>>>  list(mapped = map(lambda x : ord(x) + 10, "FishC"))
[80, 115, 125, 114, 77]
>>> list(filter(lambda x : x % 2, range(10)))
[1, 3, 5, 7, 9]

生成器

在 Python 中,使用了 yield 语句的函数被称为生成器(generator)。

与普通函数不同的是,生成器是一个返回生成器对象的函数,它只能用于进行迭代操作,更简单的理解是 —— 生成器就是一个特殊的迭代器。

在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 yield 方法时从当前位置继续运行。


定义一个生成器,很简单,就是在函数中,使用 yield 表达式代替 return 语句即可。
 

>>> def counter():
...     i = 0
...     while i <= 5:
...         yield i
...         i += 1

现在我们调用 counter() 函数,得到的不是一个返回值,而是一个生成器对象:

>>> counter()
<generator object counter at 0x0000025835D0D5F0>

我们可以把它放到一个 for 语句中:

>>> for i in counter():
...     print(i)
... 
0
1
2
3
4
5

支持 next() 函数:

>>> c = counter()
>>> next(c)
0
>>> next(c)
1
>>> next(c)
2
>>> next(c)
3
>>> next(c)
4
>>> next(c)
5
next(c)
Traceback (most recent call last):
  File "<pyshell#51>", line 1, in <module>
    next(c)
StopIteration

由于生成器每调用一次获取一个结果这样的特性,导致生成器对象是无法使用下标索引这样的随机访问方式

生成器表达式

>>> t = (i ** 2 for i in range(10))
>>> next(t)
0
>>> next(t)
1
>>> next(t)
4
>>> next(t)
9
>>> next(t)
16
>>> for i in t:
...     print(i)
... 
25
36
49
64
81

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值