lecture2主要讲解函数调用过程,纯函数、非纯函数,从环境角度解释函数调用等。
分析代码 print(print(1), print(2))
的执行过程和输出结果。
背景:非纯函数
-
纯函数(Pure Function)
- 函数的输出只取决于输入,没有副作用。
- 执行纯函数不会影响程序的其他部分。
-
非纯函数(Non-Pure Function)
- 函数的执行可能对外部环境产生影响,或者依赖外部状态。
print
是非纯函数,因为它会输出到控制台(产生副作用)。
print(print(1), print(2))
的分析
print
函数本身有副作用,因为它会直接打印到屏幕上。同时,它的返回值是 None
。
执行步骤
-
最内层函数首先被执行
- 由于函数调用有从内到外的顺序,
print(1)
和print(2)
会首先执行。 - 执行
print(1)
时:- 副作用:打印
1
。 - 返回值:
None
。
- 副作用:打印
- 执行
print(2)
时:- 副作用:打印
2
。 - 返回值:
None
。
- 副作用:打印
- 由于函数调用有从内到外的顺序,
-
外层函数接收返回值
print(print(1), print(2))
中的外层print
函数接收到两个返回值,分别是:- 第一个参数:
print(1)
的返回值None
。 - 第二个参数:
print(2)
的返回值None
。
- 第一个参数:
-
外层
print
函数执行- 外层
print
的作用是打印其接收到的两个参数。 - 参数是
None, None
,因此打印None None
。
- 外层
最终输出
按顺序分析副作用和返回值,输出结果如下:
- 执行
print(1)
,打印1
。 - 执行
print(2)
,打印2
。 - 外层
print
打印None None
。
最终输出:
1
2
None None
总结:副作用的关键
print
函数有副作用:打印到屏幕。print
函数的返回值是None
,可以被其他函数使用。- 嵌套调用时,先执行内层函数,副作用和返回值逐步传递到外层。
关于 变量作用域 和 闭包 的问题 (重点)
【python技巧060】形象理解闭包,玩转闭包
完