3 函数¶
说明
本文档为个人整理的复习概要,内容侧重重点提炼而非详细讲解,不适合零基础的同学
3.1 def
语句和参数¶
在这个函数的定义中,有一个名为 name
的变元。保存在变元中的值,在函数返回后就丢失了
- 定义 一个函数就是创建一个函数
hello('Alice')
调用 刚才创建的函数- 也称为将字符串值
'Alice'
传递 给该函数 - 传递给函数的值是 参数
- 接收参数值的变量是 变元
3.2 返回值和 return
语句¶
可以用 return
语句指定应该返回什么值
3.3 None
值¶
None
表示没有值。None
是 NoneType
数据类型的唯一值
有一个使用 None
的地方就是 print()
函数的返回值
对于所有没有 return
语句的函数定义,Python 都会在末尾上加上 return None
。如果使用不带值的 return
语句,也返回 None
3.4 关键字参数和 print()
函数¶
大多数参数是由它们在函数调用中的位置来识别的。但是,“关键字参数”是在函数调用时由它们前面的关键字来识别的。关键字参数通常用于“可选变元”。例如,print()
函数有可选的变元 end
和 sep
,分别指定在参数末尾输出什么,以及在参数之间输出什么来隔开它们
类似地,如果向 print()
函数传入多个字符串值,该函数就会自动用一个空格分隔它们
部分编辑器可以使用 Ctrl+Left Button 单击某个函数,跳转至该函数的定义处或引用处,例如单击 print()
函数:
可以看到 sep
默认值便是 ' '
,end
默认值便是 \n
3.5 调用栈¶
“调用栈”是 Python 记住每个函数调用后在哪里返回执行的方式。当程序调用一个函数时,Python 在调用栈的顶部创建一个“帧对象”。帧对象保存了最初函数调用的行号,使得 Python 可以记住返回的位置
当函数调用返回时,Python 从栈顶部删除一个帧对象,并将执行转移至保存在其中的行号。帧对象始终是从栈顶部添加和删除的,而不是从其他任意位置
3.6 局部和全局作用域¶
在被调用函数内赋值的变元和变量,处于该函数的 局部作用域 中。在所有函数之外赋值的变量,处于 全局作用域 中。处于局部作用域中的变量,被称为 局部变量。处于全局作用域中的变量,被称为 全局变量。一个变量必属于其中一种,不能既是局部的又是全局的
可以将 作用域 看成变量的容器。当作用域被销毁时,所有保存在该作用域内的变量的值就被丢弃了。只有一个全局作用域,它是在程序开始时创建的。如果程序终止,全局作用域就被销毁,它的所有变量就被丢弃了
一个函数被调用时,就创建了一个局部作用域。在这个函数内赋值的所有变量,存在于该局部作用域内。该函数返回时,这个局部作用域就被销毁了,这些变量就丢失了。下次调用这个函数时,局部变量不会记得改函数上次被调用时它们保存的值
- 全局作用域中的代码不能使用任何局部变量
- 局部作用域中的代码可以访问全局变量
- 一个函数的局部作用域中的代码,不能使用其他局部作用域中的变量
- 在不同的作用域中,你可以用相同的名字命名不同的变量
3.6.1 局部变量不能在全局作用域内使用¶
3.6.2 局部作用域不能使用其他局部作用域内的变量¶
3.6.3 全局变量可以在局部作用域中读取¶
3.6.4 名称相同的局部变量和全局变量¶
3.7 global
语句¶
如果需要在一个函数内修改全局变量,就是用 global
语句。如果在函数的顶部有 global eggs
这样的代码,则说明在接下来的代码中,使用全局变量 eggs
3.8 异常处理¶
错误可以由 try
和 except
语句来处理。那些可能出错的语句被放在 try
子句中。如果错误发生,程序执行就转到接下来的 except
子句开始处
try
语句块中,发生的所有错误都会被捕捉