Day10 函数的动态参数,注释,名称空间,作用域和函数嵌套
def func(a):
print(a)
func(1)
args
def func(args): #args 是万能(接受任意多个)的位置参数,在定义函数的时候叫聚合
print(args)
func(1,2,3,4,5,6,7)
def func(a,b,args): #args聚合
print(a,b,*args) # *args 打散 #元组(接受的位置参数)
func(1,2,3,4,5,6,0)
位置参数>动态位置参数>默认参数
def func(*args,a = 1,b = 2):
print(a,b,args) #元组(接受的位置参数)
func(12,14,15,16,10)
def func (a,b,**kwargs):
print(a,b,kwargs) # 字典(接受的关键字的参数)
func(1,2,c=1,d=2)
def func(a,b,args,c=1,d=2,**kwargs):
print(a,b,args,c,d,kwargs) #kwargs #字典(接受关键字的参数)#*kwargs可以拿到键
func(1,2,3,4,c=8,d=10,e='alex',f='wusir')
def func(args,**kwargs): #万能传参
print(kwargs,*args)
func(1,2,3,a=1,b=2,d=4)
参数优先级
1.位置参数> 动态位置参数>默认参数(关键字参数)>动态关键字参数
2.位置参数,动态位置参数
3.动态位置参数(args),关键字参数(c=1),动态关键字参数(kwargs)
函数的注释
在每行代码下写上注释
"""
"""
名称空间
内置空间:print input len()
全局空间:当前py文件需要开辟的空间存放在全局空间
局部空间:函数中开辟的空间就是局部空间
加载顺序
内置空间>全局空间>局部空间
a = 10
def func():
a = 5
print(a)
func()
取值顺序
局部空间>全局空间>内置空间(找不到就报错)
作用域
全局作用域:内置空间+全局空间
局部作用域:局部空间
函数的嵌套:
def func():
print(1)
def f1():
print(2)
return f1()
func()
不管在什么位置,只要是函数名+()就是在调用此函数
函数调用执行后,函数体中开辟的空间就自动销毁
def func():
a = 1
def foo():
b =2
print(b)
print(a)
def f1():
print(b)
return f1()
return foo()
func()
函数的互相引用
def func():
a = 1
foo()
print(a)
def foo():
b = 2
print(b)
print(func()) #答:1,2 func(c)返回NONE
def a():
a1 =1
c()
print(c)
def b():
b1 =1
print(b1)
def c():
c1 = 3
print(a)
def run():
a()
run() # 同一级的函数不能向另一个索要数据
def func():
a = 1
def b():
print(a)
def foo():
b = 1
def z():
print(func)
print(b)
ret = z()
func()
return ret
def run():
foo()
print(run()) 答:1.func的地址 2.1 3.none
def func(a):
foo(a)
def foo(e):
b(e)
def b(c):
print(c)
return 10
print(func(5))答:5,没有10 ,因为b(c)哟返回值,
foo(e)开始就没有return了,所以10 传递不到func(a)
golbal
a = 10
def func():
global a #声明修改全局变量
a += 1
print(a)
func()
a = 10
def f1():
a = 10
def f2():
a =15
def f3():
global a
a += 1
print(a)#16
print(a)#15
f3()
print(a)#10
f2()
print(f1()) #none
nonlocal
a = 10
def func():
a = 30
def f1():
def foo():
nonlocal a
a += 1
print(a) #31
foo()
print(a)#31
f1()
func()
print(a)#10
global:修改全局空间的变量对应的值
nonlocal:在外层函数中,修改局部空间的变量值,
完全不涉及全局空间,只修改离它最近的。
上一层没有变量,继续向上,直到找到最外层函数。(全局空间除外)
6.三元运算符
a = 10
b = 20
c = a if a> b else b
变量名 = 条件成立的结果 条件 条件不成立的结果
今日总结
1.函数的动态参数
动态位置参数agrs 动态关键字参数**kwargs 万能传参
定义阶段(args,**kwargs)聚合
args---tuple v
**kwargs---dict
使用阶段(args,*kwargs)打散
*args---源数据类型
**kwargs---打散的是字典的键
位置参数>动态位置参数>默认参数>动态关键字参数
lst = [12,23,3,4,5,6]
lst1 = [12,23,3,4,5,6]
def func(*args):
print(args)
func(lst[0:len(lst)+1])# 笨的办法
func(lst,lst1)#新办法
dic={'key':1,'key1':34}
dic1={'key2':2,'key3':45}
def func(kwargs):
print(*kwargs)
func(dic,**dic1)#快速获取字典的键
2.函数的注释
"""
每次写函数的时候需要写注释
函数名.doc
"""
3.名称空间
内置空间:python解释器自带的
全局空间:当前文件(.py文件)
局部空间:函数题开辟的空间
加载顺序:内置>全局>局部
取值顺序:局部>全局>内置
作用域
全局作用域 内置+全局
局部作用域 局部
4.函数嵌套
函数中套函数
函数嵌套调用
函数嵌套参数的传递
函数嵌套返回值的传递
5.glocal nonlocal
global:修改全局空间的变量对应的值
nonlocal:在外层的函数中变量值,修改局部空间的