函数的动态参数:对于传入的实参数量不固定,万能参数,动态参数,*args,**kwargs
*: 在函数定义的时候聚合,在*位置参数聚合
在函数调用的时候打散,在*位置参数打散
l1 = [1, 2, 3, 4]
l2 = [a, b, c, 'alex']
def funcl(*args):
print(args)
funcl(*l1,*l2)
形参的位置参数:
位置参数,*args,默认参数,**kwargs顺序不能错乱,会报错
def funcl(a,b,*args,sex='男',**kwargs)
print(a,b)
print(sex)
print(*args)
print(**kwargs)
funcl(10,20,34,55,6,77,87,45,sex='nv',name='alex',age=10)
python中名称空间分为三种:
全局名称空间:所定义的值会在内存里开辟出一个空间,这个空间是存放着值跟变量的id
count = 0
def funcl():
count += 1
print(count)
funcl()
#显示报错信息:UnboundLocalError: local variable 'count' referenced before assignment
因为count=0是在全局名称空间中的,而局部名称空间只能引用,不能修改,而count+=1则是把count的值修改了
局部名称空间:所定义的函数,虽然系统会开辟出一个空间,但仅仅是存放这个函数的整体的,至于函数内部,系统并不关心,只有在调用时才会临时开辟出一个空间,当函数结束时,所开辟的空间也会一并消失
def funcl():
count = 3
print(count)
funcl()
此时count输出的是3,而如果print放在函数外面,将会报错,并提示count没有被定义
def funcl():
count = 3
funcl()
print(count)
内置名称空间:对于内置函数来说,len,print....本身的出现就会在系统里开辟了空间
作用域:就是作用范围,按照生效范围,可以分为全局作用域和局部作用域
全局作用域分为:全局名称空间,内置名称空间,整个文件的任意位置都可以被引用,全局有效
局部作用域:局部作用空间,只能在局部范围内引用
取值顺序:局部名称空间 ------->全局名称空间----->内置名称空间 单向从小到大范围
加载顺序:内置名称空间---->全局名称空间(当程序执行时)------>内置名称空间(当函数被调用时)
global:
1,在局部名称空间中声明一个全局变量
def func1():
global name
name = 'alex'
func1()
print(name)
2.在局部名称空间可以对全局变量进行修改
count = 0
def funcl():
global count
count += 1
funcl()
print(count)
nonlocal:不能修改全局变量,在局部作用域中,对父级作用域的变量,进行引用或修改,并且修改的那层,从哪层及以下的变量全部发生改变
def func1():
count = 666
def inner():
print(count)
def func2():
nonlocal count
count += 1
print('func2',count)
func2()
print('inner',count)
inner()
print('func1',count)
func1()
posted on
浙公网安备 33010602011771号