python笔记day15-函数参数补充、名称空间 作用域
函数参数补充
命名关键字参数(了解)
在定义函数是,*海购定义的参数,成为命名关键字参数
#命名官字子实参必须按照key=value的形式为其传值
def func(x,y,*args,a,b):#其中a和b称之为命名关键字参数
print(x,y)
print(a,b)
func(1,2,a=1111,b=2222)
#可以有默认值
def func(x,y,*args,a=1111,b):#其中a和b称之为命名关键字参数
#不是默认形参不会报错
print(x,y)
print(a,b)
func(1,2,b=2222)
1 2
1111 2222
1 2
1111 2222
组合使用
位置形参+默认形参+*args、+默认关键字+**kargs
几乎没有应用场景
def func(x,y=111,*args,z,**kargs):
print(x)
print(y)
print(args)
print(z)
print(kargs)
def func(x,y,z,a,b,c):
print(x,y,z,a,b,c)
func(1,*[2,3],**{'b':555,'c':666},a=444)
1 2 3 444 555 666
1.名称空间nameapce
- 栈区存放的变量名划分
有名称空间后就可以在栈区中存放相同的名字
1.1内置名称空间
存放的名字:存放的python解释器内置的名字
存活周期:python解释器启动产生,关闭销毁
1.2全局名称空间
存放的名字:运行顶级代码产生的名字,不是函数内定义的也不是内置的
存活周期:python文件执行产生,运行完销毁
def func():#其中func是顶级 a,b是函数内局部
a=111
b=222
class fOO:#FOO是顶级,内部是局部
pass
1.3局部名称空间
存放的名字:在调用函数时,运行函数体代码过程中产生的函数内的名字
存货周期:调用时存活,第哦啊用完毕后则销毁
1.4 名称空间加载顺序
内置名称空间》全局名称空间》局部名称空间
销毁顺序
局部》全局》内置
def func(a,b):
pass
func(1,1)#调用一次创建销毁一次名称空间
func(2,2)
1.5 名字查找优先级
从当前所在空间向上一层一层查找
如果当前在全局-则从全局开始找-找不到找内置-再找不到报错
input=333
def func():
input=444
print(input)
func()
print(input)
a=[1,]
444
333
#示范
def func():
print(x)
x=111
func()
#示范2:名称空间嵌套关系是以函数定义阶段为准,与调用位置无关
x=1
def func():
print(x)
def foo():
x=222
func()
foo()
111
1
#示范3 函数嵌套定义
input=111
def f1():
input=222
def f2():
input=333
print(input)
f2()
f1()
#示范4 定义阶段为准
x=111
def func():
print(x)#报错-识别成局部x 但运行前还没有定义 所以报错
x=222
func()
333
---------------------------------------------------------------------------
UnboundLocalError Traceback (most recent call last)
Cell In[30], line 16
14 print(x)#报错-识别成局部x 但运行前还没有定义 所以报错
15 x=222
---> 16 func()
Cell In[30], line 14, in func()
13 def func():
---> 14 print(x)#报错-识别成局部x 但运行前还没有定义 所以报错
15 x=222
UnboundLocalError: cannot access local variable 'x' where it is not associated with a value
作用域 作用范围
全局作用域
1.全局存活:内置名称空间、全局名称空间
2.全局有效:被所有函数共享
局部作用域:局部名称空间的名字
1.临时存活
2.局部有效:函数内有效
内置 全局 作用在全局
局部名称空间 作用在局部
def foo():
x=111
print(x)
def bar():
y=222
print(y)
foo()
bar()
#LEGB
#Basic
#Global
def f1():
#e
def f2():
#e
def f3():
#local
pass
global 和nonglobal
x=111
def func():
x=222
print(x)
func()
print(x)
x=111
def func():
global x#指定x为全局 不可变类型
x=222
print(x)
func()
print(x)
222
111
222
222
#可变类型
l=[111,222]
def func():
l.append(2)
print(l)#当前local没有从global找到这个可变类型
func()
print(l)
[111, 222, 2]
[111, 222, 2]
nonlocal 了解
x=0
def f1():
x=11
def f2():
global x#修改成全局
x=22
f2()
print(x)
f1()
print(x)
x=0
def f1():
x=11
def f2():
nonlocal x#修改函数外层函数的不可变类型
#向外层找直到找到 没有则报错
x=22
f2()
print(x)
f1()
print(x)
11
22
22
0
#可变类型
def f1():
x=[]
def f2():
x.append(11111)
f2()
print('f1内的x',x)
f1()
f1内的x [11111]

浙公网安备 33010602011771号