函数
1.定义一个函数(空函数用pass
保证语法完整)
2.函数返回值
- 默认返回
None
(不写return
) - 返回值个数:
- 单个值,类型由返回的内容确定
- 多个值,其实是返回了一个元组
3.解包(unpack)
- 被解包的对象,需要是容器类型(由多个元素组成的对象)
- 平均分配:每人分到一份,且必须刚好分完,不然会出现解包错误。
- 不平均分配:多人各分一份,剩余的分给一人。接收剩余份额的使用*,*只能出现一次。
4.参数
1.位置参数:
定义:在函数名后的括号中的参数列表中,根据形参定义顺序,从左到右
调用:实参列表中,从左到右传递;形参有多少个,实参必须传递多少个。
2.默认值参数:
- 说明:为形参指定一个默认值,如果在调用时,该参数所在位置没有传递实参,则会使用这个默认值。
- 注意:默认值参数的定义和调用传参,必须位于位置参数后面(物以类聚)。
- 定义:
- 调用:
按形参定义顺序,全部给出
按形参定义顺序,只给没有提供默认值的位置参数传递实参
当默认值有多个,在位置参数全部传递了值之后,可以根据参数名为默认值参数提供实参,而不用考虑默认值参数的位置(此时是根据参数名来分配值的)
- 注意:必须先全部提供位置参数所需要的实参,然后再考虑默认值参数。
3.可变参数
4.关键字参数
5.变量作用域
- 生命周期:被创建(放到内存中)-> 被使用 -> 被销毁(从内存中被移除,资源回收)
- 全局变量:直接在文件中(函数外)定义的变量
- 局部变量:在函数中定义的变量(生命周期,只在函数体内部有效)
- Python中函数可以嵌套(嵌套层级,通过缩进控制):
- 在函数内部:
- 进行赋值操作,默认会创建新只在该层函数体内部有效的新变量,会屏蔽上层同名变量。
- 不进行赋值操作,可以访问上层(->上层函数->更上一次的函数->全局(最顶层的函数之外))变量
- 在函数中修改上层变量:
- 全局变量:
- 需要在进行变量赋值之前,将变量声明(
global
)为全局变量。 - 在声明之后,赋值操作就不会创建新的变量,而是仅仅进行赋值。
- 被声明的变量,必须要是全局变量中已经存在了的。
global
只能用在函数内部
- 需要在进行变量赋值之前,将变量声明(
说明: 不管函数嵌套了多少层,只要使用global
声明全局变量,就可以直接使用最顶层函数外的变量。
2.上层函数中定义的变量:
- 需要在进行变量赋值之前,将变量声明(
nonlocal
)为上层变量。 - 在声明之后,赋值操作就不会创建新的变量,而是仅仅进行赋值。
- 被声明的变量,必须要是上层函数中已经存在了的。
nonlocal
只能用于嵌套的函数中,不能用于顶层函数中。
解释:nonlocal声明变量,不仅仅是上一层的,可以是上面很多层的,只要是在顶层函数之中,都可以。
补充:nonlocal
声明的变量,上层函数中,如果很多层就出现过,那么在向上寻找的过程中,一旦找到了就不在继续向上寻找了。