python闭包函数 python3 闭包( 二 )


2 Python 中单下划线和双下划线
_xxx 不能用'from module import *'导入 以单下划线开头的表示的是保护类型的变量 。即保护类型只能允许其本身与子类进行访问 。
_ _xxx__ 系统定义的是特列方法 。像__init__之类的
__xxx 类中的私有变量名 双下划线的表示的是私有类型的变量 。只能是允许这个类本身进行访问了 。连子类也不可以
3 python中的不定长参数 *args and **kwargs
不确定函数里传递参数个数时可以用*args
def getall(*args):
for item in args:
print(item)
getall('a','b','c')
getall(*['a','b','c']) # 打散
使用没有事先定义的参数名kwargs**
def get_undifined(**kwargs):
for item in kwargs.items():
print(item[0],item[1])
get_undifined(name='amy',age=14) # 打散
get_undifined(**{'a':1,'b':'hello'}) # 打散
注意两者共同使用的时候 位置参数 要在前
4 python中装饰器 与 AOP 面向切面编程
切面需求: 较为经典的有插入日志、性能测试、事务处理等
而装饰器这种设计模式 是解决这类问题的绝佳途径,可以为已经存在的对象添加额外的功能
5 python中鸭子模型
会鸭子叫的就是鸭子 , 不关心对象是什么类型,只关心对象的特性 。
比如众多的文件句柄,可迭代对象等具有同一类特征的不同数据对象
鸭子类型在动态语言中经常使用,非常灵活
6 Python中的作用域
python中,一个变量的作用域总是由在代码中被赋值的地方所决定的 。
Python变量的搜索顺序:
本地作用域(Local)→当前作用域被嵌入的本地作用域(Enclosing locals)→全局/模块作用域(Global)→内置作用域(Built-in)
7 python中的语法结构闭包
闭包(closure)是函数式编程的重要的 语法结构 。闭包也是一种组织代码的结构,它同样提高了代码的可重复使用性 。
当一个内嵌函数引用其外部作作用域的变量,我们就会得到一个闭包. 总结一下,创建一个闭包必须满足以下几点:
1 必须有一个内嵌函数
2 内嵌函数必须引用外部函数中的变量
3 外部函数的返回值必须是内嵌函数
8 python 的 垃圾回收机制
Python垃圾回收机制
Python GC主要使用 引用计数(reference counting)来跟踪和回收垃圾 。在引用计数的基础上,通过“标记-清除”(mark and sweep)
解决容器对象可能产生的循环引用问题,通过“分代回收”(generation collection)以空间换时间的方法提高垃圾回收效率 。
1 引用计数
PyObject是每个对象必有的内容,其中ob_refcnt就是做为引用计数 。当一个对象有新的引用时 , 它的ob_refcnt就会增加,
当引用它的对象被删除,它的ob_refcnt就会减少.引用计数为0时,该对象生命就结束了 。
2 标记-清除机制
基本思路是先按需分配,等到没有空闲内存的时候从寄存器和程序栈上的引用出发 , 遍历以对象为节点、以引用为边构成的图 , 
把所有可以访问到的对象打上标记,然后清扫一遍内存空间 , 把所有没标记的对象释放 。
3 分代技术
分代回收的整体思想是:将系统中的所有内存块根据其存活时间划分为不同的集合,每个集合就成为一个“代”,
垃圾收集频率随着“代”的存活时间的增大而减?。?存活时间通常利用经过几次垃圾回收来度量 。
Python默认定义了三代对象集合,索引数越大,对象存活时间越长 。
9 python种类以及与其他计算机语言类型对比
C语言: 代码编译得到机器码 ,机器码在处理器上直接执行,每一条指令控制CPU工作–速度较快

推荐阅读