Python 笔记
记录写 Python 需要注意的问题,以及一些技巧。
在 Python 中 Everything is Object。
Python 中的模块
- standard modules
- built-in modules
- dynamic modules
命名空间
a = 10
# a是一个在名字空间中的名字
# 10是一个整数对象在对象空间中
- 名字空间是一个字典,他是 name-objects 的映射
- 函数对象有一个名空间叫 local namespace
- 每一个模块有自己的名空间叫 global namespace
- Python中有一个模块叫 built-in 这个模块的 global namespace 就是built-in-namespace
名字查找顺序
Python中遇到一个变量会按照这样的顺序进行搜索
Local->当前作用域被嵌入的本地作用域(Enclosing locals)-> Global -> Built-in
写操作将会打断往外层 namespace 的查找过程
Python 闭包
闭包并不只是一个Python中的概念,在函数式编程语言中应用较为广泛。理解 Python 中的闭 包一方面是能够正确的使用闭包,另一方面可以好好体会和思考闭包的设计思想。概念介绍:首先看一下维基上对闭包的解释,在计算机科学中,闭包(英语:Closure),又称词法闭包(LexicalClosure)或函数闭包 (functionclosures),是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。所以,有另一种说法认为闭包是自由函数和与其相关的引用环境组合而成的实体。闭包在运行时可以有多个实例,不同的引用环境和相同的函数组合可以产生不同的实例。简单来说就是一个函数定义中引用了函数外定义的变量,并且该函数可以在其定义环境外被执行。这样的一个函数我们称之为闭包。实际上闭包可以看做一种更加广义的函数概念。因为其己经不再是传统意义上定义的函数。
Python 反射
pass
Python 高级主题
pass
Python 自省
自省就是面向对象的语言所写的程序在运行时所能知道对象的类型。运行时能够获得对象的类型。相关函数如下:
- type()
- dir() 返回一个名字列表,可以通过obj.XXX访问的名字。方法名不在其中。
- getattr()
- hasattr()
- isinstance()
obj.__dict__
__dict__ : a map of (name,object) pairs
newinstancemethod 会修改对象的名空间
Python 协程
进程和线程都面临着内核态和用户态切换的问题,协程就是用户自己控制切换的时机,不需要陷入系统的内核态.
== 和 is
Semantics of "=="
两个值相等
Semantics of "is"
两个是同一个对象
Python 对象
- id() 判断对象的地址。
- Python 小对象池,其中包括 str 或者 int 类型,Python 的编译选项可设置大小。
- NoneType None只有一份,bool 类型 True和False只有一份。
Python 网络编程
- Python 使用 socket socket() 来创建关键字
- 再将套接字 ip 与 port 绑定
- 服务端调用 accept() 方法来接收客户端
Python Json
- json.dumps将 Python 对象编码为 json 字符串
- json.loads将已经编码的 json 字符串解码为 Python 对象
data = [{'a':1,'b':2,'c':3}]
jsonstr = json.dumps(data)
print jsonstr
# 对象.dumps生成 json 字符串
# json字符串.loads 生成 python 对象
Note
- 最好使用不可变参数做默认参数
- 可变对象容易缓存
- 函数的默认参数保存在函数对象中
- print 在2.x版本中是关键字
- 大量列表元素需要遍历可以使用生成器,将列表解析中的[]换成()
- range()产生一个list,xrange()产生一个迭代器