python 函数的进阶

一.函数参数补充

  动态参数:

    动态位置参数     *args  #动态位置参数获取的是一个元组(万能传参),*号后边的字母可以自己定义,通常会用                                             args.

    动态关键字参数   **kwargs  #动态关键字传参或取到的是一个字典形式

  参数位置:

    位置参数 > 动态位置参数 > 默认(关键字)参数 >动态关键字参数

二.名称空间

  1.名称空间划分:局部命名空间

         全局命名空间

         内置命名空间

  2.加载顺序:内置 > 全局 > 局部

   取值顺序:局部 > 全局 > 内置

  3.作用域:

    全局作用域:  内置 + 全局

    局部作用域:  函数局部

  4.#print(globals())     #查看全局作用域中的变量和函数名

   #print(lovals())      #产看局部作用域中的变量和函数名

三.函数的嵌套: 

def f():
    print(11)
    def f1():
        print(22)
        def f2():
            print(33)             **********重要
        f2()

    f1()
f()

  函数的注释:更方便地明确函数的作用

def func():
    #     '''
    #     这是打印的函数
    #     :param a: 没啥用1
    #     :param b: 没啥用1
    #     :param c: 没啥用1
    #     :param d: 没啥用1
    #     :return:  返回的None
    #     '''
    #     print(a,b,c,d)

  global:可变数据类型在函数中可以直接进行操作,不可变数据类型需要使用global才能操作

      注意:可变数据类型在函数中进行操作不会改变数据的ID,但通过global改变的数据,只是开辟了新的内存地址重新赋值给变量.

a = 12
print(id(a))      #1954966896
def func():
    a = 15      # 在函数的局部中
    print(a)    # 使用的是局部   a = 15
    print(id(a))   #1954966992
func()

  nonlocal:改变最近的父级变量,如果上级没有能改变的就继续向上走,直到最外层函数就停止,注意不能改变全局变量.

a = 1           #全局
def fun_1():    #全局
    a = 2           # fun_1 的局部变量
    def fun_2():    # fun_1  下定义了fun_2
        nonlocal a  # 申明更改父级的变量值
        a = 3       # 更改
        def fun_3(): # 定义fun_3
            a = 4    # 定义fun_3的局部变量
            print(a) #  4
        print(a)     # 3 fun_2
        fun_3()      # 调用函数
        print(a)     # 3/4
    print(a)    # 2 打印的是 fun_1的局部变量
    fun_2()     # 调用函数
    print(a)    # 3
print(a)       # 1 打印的全局的
fun_1()        # 调用函数
print(a)       # 1

  

        

原文地址:https://www.cnblogs.com/wangtaobiu/p/9890088.html