Python函数

函数

1.定义一个函数(空函数用pass保证语法完整)

   Python函数

2.函数返回值

  • 默认返回 None(不写return)
  • 返回值个数:
    • 单个值,类型由返回的内容确定
    • 多个值,其实是返回了一个元组

3.解包(unpack)

  • 被解包的对象,需要是容器类型(由多个元素组成的对象)
  • 平均分配:每人分到一份,且必须刚好分完,不然会出现解包错误。
  • 不平均分配:多人各分一份,剩余的分给一人。接收剩余份额的使用*,*只能出现一次。

4.参数

        1.位置参数:

             定义:在函数名后的括号中的参数列表中,根据形参定义顺序,从左到右

                         Python函数

              调用:实参列表中,从左到右传递;形参有多少个,实参必须传递多少个。

                         Python函数

        2.默认值参数:

  •       说明:为形参指定一个默认值,如果在调用时,该参数所在位置没有传递实参,则会使用这个默认值。
  •       注意:默认值参数的定义和调用传参,必须位于位置参数后面(物以类聚)。
  •       定义:

                       Python函数

  •        调用:

                       按形参定义顺序,全部给出

                       Python函数

                       按形参定义顺序,只给没有提供默认值的位置参数传递实参

                       Python函数

                    当默认值有多个,在位置参数全部传递了值之后,可以根据参数名为默认值参数提供实参,而不用考虑默认值参数的位置(此时是根据参数名来分配值的)

                      Python函数

  •             注意:必须先全部提供位置参数所需要的实参,然后再考虑默认值参数。

            3.可变参数

            4.关键字参数

5.变量作用域

  • 生命周期:被创建(放到内存中)-> 被使用 -> 被销毁(从内存中被移除,资源回收)
  • 全局变量:直接在文件中(函数外)定义的变量

       Python函数

  • 局部变量:在函数中定义的变量(生命周期,只在函数体内部有效)

       Python函数

  • Python中函数可以嵌套(嵌套层级,通过缩进控制):

       Python函数

  • 在函数内部:
  1. 进行赋值操作,默认会创建新只在该层函数体内部有效的新变量,会屏蔽上层同名变量。
  2. 不进行赋值操作,可以访问上层(->上层函数->更上一次的函数->全局(最顶层的函数之外))变量

         Python函数

  • 在函数中修改上层变量:
  1. 全局变量:
    1. 需要在进行变量赋值之前,将变量声明(global)为全局变量。
    2. 在声明之后,赋值操作就不会创建新的变量,而是仅仅进行赋值。
    3. 被声明的变量,必须要是全局变量中已经存在了的。
    4. global只能用在函数内部

                  Python函数

                  Python函数

说明: 不管函数嵌套了多少层,只要使用global声明全局变量,就可以直接使用最顶层函数外的变量。

                 Python函数

2.上层函数中定义的变量:

  1. 需要在进行变量赋值之前,将变量声明(nonlocal)为上层变量。
  2. 在声明之后,赋值操作就不会创建新的变量,而是仅仅进行赋值。
  3. 被声明的变量,必须要是上层函数中已经存在了的。
  4. nonlocal只能用于嵌套的函数中,不能用于顶层函数中。

         Python函数

         Python函数 

          解释:nonlocal声明变量,不仅仅是上一层的,可以是上面很多层的,只要是在顶层函数之中,都可以。

         Python函数

     补充:nonlocal声明的变量,上层函数中,如果很多层就出现过,那么在向上寻找的过程中,一旦找到了就不在继续向上寻找了。

         Python函数

;