• 知识点总结 2022-8-16


    lambda 表达式

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

    举个例子:

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

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

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

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

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

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

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

    生成器

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

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

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


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

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

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

    1. >>> counter()
    2. object counter at 0x0000025835D0D5F0>

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

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

    支持 next() 函数:

    1. >>> c = counter()
    2. >>> next(c)
    3. 0
    4. >>> next(c)
    5. 1
    6. >>> next(c)
    7. 2
    8. >>> next(c)
    9. 3
    10. >>> next(c)
    11. 4
    12. >>> next(c)
    13. 5
    14. next(c)
    15. Traceback (most recent call last):
    16. File "", line 1, in
    17. next(c)
    18. StopIteration

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

    生成器表达式

    1. >>> t = (i ** 2 for i in range(10))
    2. >>> next(t)
    3. 0
    4. >>> next(t)
    5. 1
    6. >>> next(t)
    7. 4
    8. >>> next(t)
    9. 9
    10. >>> next(t)
    11. 16
    12. >>> for i in t:
    13. ... print(i)
    14. ...
    15. 25
    16. 36
    17. 49
    18. 64
    19. 81

  • 相关阅读:
    蓝牙耳机哪个牌子续航能力强?蓝牙耳机续航能力排行
    【暑期每日一题】洛谷 P7257 [COCI2009-2010#3] FILIP
    计算机网络谢希仁第七版课后答案-第二章 物理层(1-19题)
    【滤波器设计】微波带低通高通带通滤波器设计【含Matlab源码 2217期】
    python Matplotlib Tkinter-->tab切换3
    2023校招C++开发oppo笔试
    stm32管脚重映射
    WHALE 会员指南(第 1 部分)
    Redisson 实现分布式锁
    Python数据特征分析1-分布分析(极差,频率直方图等)
  • 原文地址:https://blog.csdn.net/m0_63619203/article/details/126374836