3-1-函数基础
1. 为何使用函数
- **最大化的代码重用和最小化代码冗余。**函数允许整合以及通用化代码,以便这些代码能够在之后多次使用。
- **流程的分解。**函数提供了一种将一个系统分割为定义完好的不同部分的工具。
2. 编写函数
关于 Python 函数背后的一些主要概念的介绍:
- **def 是可执行的代码。**Python 的函数由 def 语句进行编写。在典型的操作中,def 语句在模块文件中编写,并自然而然地在模块文件第一次被导入的时候生成定义的函数。
- **def 创建了一个对象并将其赋值给某一变量名。**函数名称为某一个函数的引用。
- lambda 创建一个对象但将其作为结果返回。
- **return 将一个结果对象发送给调用者。**函数通过 return 语句将计算得到的值传递给调用者,返回值称为函数调用的结果。
- **yield 向调用者发回一个结果对象,但是记住它离开的地方。**像生成器这样的函数也可以通过 yield 语句来返回值,并挂起它们的状态以便稍后能够恢复状态。
- **global 声明了一个模块级的变量并被赋值。**默认情况下,所有在一个函数中被赋值的对象,是这个函数的本地变量,并且仅在这个函数运行的过程中存在。为了分配一个可以在整个模块中都可以使用的变量名,函数需要在 global 语句中将它列举出来。
- **nonlocal 声明了将要赋值的一个封闭的函数变量。**nonlocal 语句允许一个函数来赋值一条语法封闭的 def 语句的作用域中已有的名称。这就允许封闭的函数作为保留状态的一个地方——当一个函数调用的时候,信息被记住了——而不必使用共享的全局名称。
- 参数是通过赋值(对象引用)传递的。
- 参数是通过位置传递的,除非另外指定。
- 参数、返回值以及变量并不是声明。
2.1 def 语句
def 语句创建一个函数对象并将其赋值给一个变量名:
1 | def <name>(arg1, arg2,..., argN): |
Python 的 return 语句可以在函数主体中的任何地方出现,它表示函数调用的结束,并将结果返回至函数调用处。
return 语句是可选的,如果没有出现,那么函数将会在控制流执行完函数主体时结束。一个没有返回值的函数会自动返回 None 对象。
2.2 def 语句是实时执行的
Python 的 def 语句是一个可执行的语句:当它运行的时候,它创建一个新的函数对象并将其赋值给一个变量名。
def 很像 = 语句,它在运行时简单地给一个变量名进行赋值。Python 函数在程序运行之前并不需要全部定义。def 在运行时才进行评估。
3. 定义和调用
3.1 定义
1 | def times(x, y): |
Python 会创建一个新的函数对象,封装这个函数的代码并将这个对象赋值给变量名 times。
3.2 调用
在 def 运行之后,可以在程序中通过在函数名后增加括号调用(运行)这个函数。
1 | times(2, 4) |
8
1 | times('Ni', 4) |
'NiNiNiNi'
3.3 Python 中的多态
times 函数中表达式 x*y
的意义完全取决于 x 和 y 的对象类型。Python 对某一对象在某种语法的合理性交由对象自身来判断,这种依赖类型的行为称为多态。
1 |