目录
可变长参数
*
* 形参
形参中的* 会将溢出的位置实参全部接收 , 存储为元组的形式 , 然后把元组赋值给*后的参数 ,
约定俗成形参名为 *args
def sum_self(*args):
res = 0
for num in args:
res += num
return res
res = sum_self(1, 2, 3, 4)
print(res) # 10
知识兔* 实参
实参中的 * ,* 会将* 后参数的值循环取出,打散成位置实参 , 然后传值给形参。以后但凡碰到实参中带*的,它就是位置实参,应该马上打散成位置实参去看。
def func(x, y, z, *args):
print(x, y, z, args)
func(1, *(1, 2), 3, 4)
# 1 1 2 (3, 4)
知识兔**
** 形参
形参中的** 会将溢出的关键字实参全部接收,然后存储字典的形式,然后把字典赋值给**后的参数
约定俗成形参名为 **kwargs
def func(**kwargw):
print(kwargw)
func(a=5) # 接收关键字实参 {'a': 5}
知识兔** 实参
实参中的,会将** 后参数的值循环取出,打散成关键字实参
def func(x, y, z, **kwargs):
print(x, y, z, kwargs)
func(1, 3, 4, **{'a': 1, 'b': 2}) # 1 3 4 {'a': 1, 'b': 2}
知识兔函数对象
函数对象 == 函数名 , 变量对象可以做的函数对象也可以。函数对象的四大功能如下:
- 引用
- 当做容器类元素
- 当做参数传给一个函数
- 当做函数的返回值
函数嵌套
def 函数名():
def 函数名():
代码块
知识兔名称空间
内置名称空间
内置名称空间:存放Pyhton解释器自带的名字,如int、float、len
生命周期:在解释器启动时生效,在解释器关闭时失效
全局名称空间
全局名称空间:除了内置和局部的名字之外,其余都存放在全局名称空间
生命周期:在文件执行时生效,在文件执行结束后失效
局部名称空间
局部名称空间:用于存放函数调用期间函数体产生的名
生命周期:在文件执行时函数调用期间时生效,在函数执行结束后失效
加载顺序
内置--》全局--》局部
查找顺序
从当前的所在位置开始查找,如果当前所在的位置为局部名称空间,则查找顺序为:局部--》全局--》内置
不会逆向查找
作用域
作用域关系在函数定义阶段就固定死了,与函数的调用无关
全局作用域
全局有效,全局存活,包含内置名称空间和全局名称空间。
局部作用域
局部有效,临时存储,只包含局部名称空间。
global
修改全局作用域中的变量 , 即局部的可以修改全局的
nonlocal
修改局部作用域中的变量 , 即局部的修改外层局部的