Python积累

来源:互联网 发布:tenga 知乎 编辑:程序博客网 时间:2024/05/17 22:53

Python解释器由于设计时有GIL全局锁,导致了多线程无法利用多核。多线程的并发在Python中就是一个美丽的梦。import functools是导入functools模块。模块的概念稍候讲解。现在,只需记住在定义wrapper()的前面加上@functools.wraps(func)即可。返回闭包时牢记的一点就是:返回函数不要引用任何循环变量,或者后续会发生变化的变量。把函数作为参数传入,这样的函数称为高阶函数,函数式编程就是指这种高度抽象的编程范式。生成器的两种实现方式 1列表生成式改用()    2利用yieldpython实现下标循环
>>> for i, value in enumerate(['A', 'B', 'C']):...     print i, value...0 A1 B2 C


from collections import Iterable isinstance('abc', Iterable)判断是否可迭代

for value in d.itervalues()    for k, v in d.iteritems()

isinstance(x, (int, float))   type(xxx)也可以判断类型

>>> import types>>> type('abc')==types.StringTypeTrue>>> type(u'abc')==types.UnicodeTypeTrue>>> type([])==types.ListTypeTrue>>> type(str)==types.TypeTypeTrue

>> setattr(obj, 'y', 19) # 设置一个属性'y'>>> hasattr(obj, 'y') # 有属性'y'吗?True>>> getattr(obj, 'y') # 获取属性'y'19

最后注意到有一种类型就叫TypeType,所有类型本身的类型就是TypeType,比如:

>>> type(int)==type(str)==types.TypeTypeTrue

Python函数在定义的时候,默认参数L的值就被计算出来了,即[],因为默认参数L也是一个变量,它指向对象[],每次调用该函数,如果改变了L的内容,则下次调用时,默认参数的内容就变了,不再是函数定义时的[]了。

为什么要设计strNone这样的不变对象呢?因为不变对象一旦创建,对象内部的数据就不能修改,这样就减少了由于修改数据导致的错误。此外,由于对象不变,多任务环境下同时读取对象不需要加锁,同时读一点问题都没有。我们在编写程序时,如果可以设计一个不变对象,那就尽量设计成不变对象。

ord()   转字符为unicode编码    chr()转unicode为字符   int()字符串转数字

Python对bytes类型的数据用带b前缀的单引号或双引号表示

以Unicode表示的str通过encode()方法可以编码为指定的bytes,例如:

>>> 'ABC'.encode('ascii')b'ABC'>>> '中文'.encode('utf-8')b'\xe4\xb8\xad\xe6\x96\x87'
len('中文') = 2  计算字符数  要获取占用空间 可以 len('中文'.encode('utf-8'))