lecture2主要讲解函数调用过程,纯函数、非纯函数,从环境角度解释函数调用等。


分析代码 print(print(1), print(2)) 的执行过程和输出结果。

背景:非纯函数

  1. 纯函数(Pure Function)

    • 函数的输出只取决于输入,没有副作用。
    • 执行纯函数不会影响程序的其他部分。
  2. 非纯函数(Non-Pure Function)

    • 函数的执行可能对外部环境产生影响,或者依赖外部状态。
    • print 是非纯函数,因为它会输出到控制台(产生副作用)。

print(print(1), print(2)) 的分析

print 函数本身有副作用,因为它会直接打印到屏幕上。同时,它的返回值是 None

执行步骤

  1. 最内层函数首先被执行

    • 由于函数调用有从内到外的顺序,print(1)print(2) 会首先执行。
    • 执行 print(1) 时:
      • 副作用:打印 1
      • 返回值:None
    • 执行 print(2) 时:
      • 副作用:打印 2
      • 返回值:None
  2. 外层函数接收返回值

    • print(print(1), print(2)) 中的外层 print 函数接收到两个返回值,分别是:
      • 第一个参数:print(1) 的返回值 None
      • 第二个参数:print(2) 的返回值 None
  3. 外层 print 函数执行

    • 外层 print 的作用是打印其接收到的两个参数。
    • 参数是 None, None,因此打印 None None

最终输出

按顺序分析副作用和返回值,输出结果如下:

  1. 执行 print(1),打印 1
  2. 执行 print(2),打印 2
  3. 外层 print 打印 None None

最终输出:

1
2
None None

总结:副作用的关键

  1. print 函数有副作用:打印到屏幕。
  2. print 函数的返回值是 None,可以被其他函数使用。
  3. 嵌套调用时,先执行内层函数,副作用和返回值逐步传递到外层。

关于 变量作用域 和 闭包 的问题 (重点)

【python技巧060】形象理解闭包,玩转闭包

https://www.bilibili.com/video/BV1Vx4y1u7YX/?spm_id_from=333.337.search-card.all.click&vd_source=8d6caf2fc8a5b1cb6a27b567749e948b