第1月3周4天

  1. 函数的动态参数 *args,**kwargs,形参的顺序
  2. 名称空间,临时名称空间,作用域,取值顺序,加载顺序
  3. global,nonlocal
  4. 函数的嵌套

!!!note qi
是否需要垃圾桶?
收集组员信息
!!!

位置参数要在关键字参数前边

实参 1.位置参数,2.关键字参数,3混合参数
形参 1.位置参数,2.默认参数

函数体如果一行可以放在函数名后边

"汉字也是True"
In [8]: "喊".isalpha()
Out[8]: True 
def func4(l):
  return l[0:2] # 返回长度不超过2

所有项目的功能首先要想拓展性

动态参数

*args,**kwargs

在函数定义时,在位置参数加星,代表聚合
将所有实参的位置参数聚合到一个元组
并将元组返回给一个星变量名

在函数定义时,在关键字参数加两个星
将所有实参的关键字参数聚合到一个元组
并将元组返回给两个星变量名

星的用法

def func1(*args):
  print(args)
func1(*l1,*l2) "对列表解包"
#字典是*{'a':1,'b':2} 返回keys()

$$**{'a':'b'} => a = 'b'$$

默认参数要在位置动态参数后边,因为如果不这样收到的参数不对
默认参数要在关键字动态参数后边,因为后者会接收所有的关键字参数,默认参数只有默认值。

名称空间

程序编译时cpython从上到下一次运行时发现程序中的变量与值,会在内存中开辟空间叫名称空间,命名空间,全局名称空间存储变量名与值的内存地址的对应关系

看到函数名将函数名与函数体对应关系存放到名称空间,但函数体不加载到内存中。
直到碰到函数的调用,执行函数。在内存中临时开辟空间,加载函数体所有数据,这个空间会在函数执行完毕后消失,临时名称空间

  1. 全局名称空间 global
  2. 局部名称空间 local
  3. 内置名称空间 内置模块 builtins

作用域:

全局作用域

全局名称空间 > 内置名称空间

局部作用域

局部名称空间

取值顺序

就近原则 单向从小到大
外部有内部没有,引用不会,改变会报错

加载顺序

内置名称空间> 全局名称空间 (程序执行时)> 局部名称空间()

函数的嵌套

global nonlocal

局部名称空间,对全局名称空间的变量可以引用,但不能改变。

UnboundLocalError: local variable 'count' referenced befor assignment

如果你在局部名间对一个变量进行修改,那么解释器会认为你的变量在局部中,已经定义了。但是对于有上面的例题局部没有,所以报错

global 作用

  1. 局部名称空间声明一个全局变量,需要变量已存在
  2. 在局部名称空间可以对全局变量进行修改

nonlocal

在py2没有
外层对内层的影响是,内层可以引用外层变量,但无法改变。
子函数对父级函数的变量修改
此变量不能是全局变量。nonlocal 操作的是局部名称空间的变量。

猜你喜欢

转载自www.cnblogs.com/yonghuierming/p/9507675.html