-
函数重要参数
-
名称空间
-
名称空间的查找顺序
-
名称空间的作用域
-
global与nonlocal关键字
-
-
1.可变形参
""" *args:接收多余的位置参数,以元组形式储存
**kwargs:接收多余的关键字参数,以字典形式储存 """
# def func(*args, **kwargs):
# print(args)
# print(kwargs)
# func() # () {}
2.可变实参
""" *args:接收多余的位置参数,以元组形式储存
**kwargs:接收多余的关键字参数,以字典形式储存 """
# def func(*args, **kwargs):
# print(args)
# print(kwargs)
# l1 = [1, 3, 5, 7]
# func(*l1) # (1, 3, 5, 7) {}
# l1 = {'name':'kevin','age':22}
# func(**l1) # () {'name': 'kevin', 'age': 22}
3.关键字形参
""" 形参中c必须以关键字参数传值位置必须在*args参数后面,如果有**kwargs,在它之前"""
# def func(name,age,*args,c):
# print(name, age, args, c)
# func('kevin',22,c = 'read') # kevin 22 () read
# func('kevin', 22,'read') # 报错
# def func(*args,c, **kwargs):
# print(args, c, kwargs)
# func(c = 'read') # () read {}
1.定义:存放变量名与数据值绑定关系的空间
2.分类:
2.1 内置名称空间 len()
python解释器中创建好的空间,解释器运行立即创建,解释器关闭销毁2.2 全局名称空间
py文件运行代码过程中创建的变量名存入的空间,文件执行结束销毁普通代码里面的变量名 a
分支结构里面的变量名 b
循环结构里面的变量名 i
定义函数的函数名 func
定义类的类名
# a = 111 # if 1 == 1: # b = 333 # for i in range(3): # pass # def func(): # pass
2.3 局部名称空间函数体代码运行过程中创建的变量名存入的空间,函数体代码运行结束立即失效名称
空间的查找顺序注:局部名称空间>>>全局名称空间>>>内置名称空间
当前所在名称空间>>>(局部名称空间>>>全局名称空间>>>内置名称空间)
# len = '全局空间中' # def func(): # print(len) # func() # 全局空间中 <built-in function len> # def func(): # len = '局部空间中' # print(len) # func() # <built-in function len>
-
名称空间的作用域
1.内置名称空间
在程序任意位置都可使用(全局有效)
2.全局名称空间
在程序任意位置都可使用(全局有效)
3.局部名称空间
在各自的局部空间可以使用(局部有效)
4.案例
4.1 互不干涉,若所在局部名称空间变量名无则报错
def func(): name = 'kevin' print(age) def func1(): age = 22 print(name) func() func1()
4.2先看当前所在func2的局部空间查找,若无查找func1的局部空间查找,无从func的局部空间查找,无从全局空间查找
a = 1
def func(): # a = 2 def func1(): # a = 3 def func2(): # a = 4 print(a) func2() func1() func()
4.3函数在定义阶段已确定变量名,所在局部名称空间中在打印之后被定义则报错
# a = 1 # def func(): # print(a) # a = 2 # func()
global与nonlocal关键字
1.修改全局作用域中的变量
# a = 100 # def func(): # a = 1000 # print(a) # 1000 # func() # print(a) # 100 # a = 100 # def func(): # global a # a = 1000 # print(a) # 1000 # func() # print(a) # 1000
2.修改局部作用域中的变量
2.1 修改可变类型直接用append
l1 = [1, 2, 3] def func(): l1.append(99) print(l1) func() # [1, 2, 3, 99]
2.2 修改不可变类型
def func(): a = 2 def func1(): nonlocal a
a = 3 print(a) # 3 3不存在2 func1() func()
-
函数名的多种使用方式
1.函数名可以被多次赋值
def func():
print('kvin')
name = func
func() # kvin
name() # kvin
2.函数名可以当做实参的参数
def func():
print('kvin')
def name(a):
print(a)
name(func) # <function func at 0x000001CBB92054C8>
3.函数名可以当做返回值
def func():
print('kvin')
def name():
return func
res = name()
print(res) # <function func at 0x0000017C1A1C54C8>
res() # kvin
4.函数名还可以当做容器类型里面的数据值
def func():
print('kvin')
l1 = [1, 2, 3, func]
print(l1) # [1, 2, 3, <function func at 0x000001BC67095288>]
l1[-1]() # kvin
posted on
浙公网安备 33010602011771号