一.函数参数补充
动态参数:
动态位置参数 *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