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
2
3
def <name>(arg1, arg2,..., argN):
<statements>
return <value>

Python 的 return 语句可以在函数主体中的任何地方出现,它表示函数调用的结束,并将结果返回至函数调用处。

return 语句是可选的,如果没有出现,那么函数将会在控制流执行完函数主体时结束。一个没有返回值的函数会自动返回 None 对象。

2.2 def 语句是实时执行的

Python 的 def 语句是一个可执行的语句:当它运行的时候,它创建一个新的函数对象并将其赋值给一个变量名。

def 很像 = 语句,它在运行时简单地给一个变量名进行赋值。Python 函数在程序运行之前并不需要全部定义。def 在运行时才进行评估。

3. 定义和调用

3.1 定义

1
2
def times(x, y):
return 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