_xxx 不能用’from module import *’导入
__xxx__ 系统定义名字
__xxx 类中的私有变量名
核心风格:避免用下划线作为变量名的开始
“单下划线” 开始的成员变量叫做保护变量,意思是只有类对象和子类对象自己能访问到这些变量;
“双下划线” 开始的是私有成员,意思是只有类对象自己能访问,连子类对象也不能访问到这个数据。
2.关于pickling与unpickling
pickling过程是将python对象转换成字符串,存储到文件中。pickling要比使用纯文本文件安全。
import pickle
data = {'one':1,
'two':2,
'three':3 }
pklF = open('data.pkl', 'wb')
pickle.dump(data, pklF) #把pickled数据写入文件
pklF.close()
import pickle
pklF = open('data.pkl', 'rb')
data = pickle.load(pklF) #把数据load到变量中去
print data
pklF.close()
3.生成器yield
yield的作用是把一个函数变成一个生成器generator,带有yield的函数不再是一个普通函数,Python解释器会将其视为一个generator,当调用该函数时不会立即执行,而是返回一个iterator对象
4.python内存管理
在Python中,每个对象都有存有指向该对象的引用总数,即引用计数。当Python的某个对象的引用计数降为0时,说明没有任何引用指向该对象,该对象就成为要被回收的垃圾了。
Python同时采用了分代(generation)回收的策略。这一策略的基本假设是,存活时间越久的对象,越不可能在后面的程序中变成垃圾。Python将所有的对象分为0,1,2三代。所有的新建对象都是0代对象。当某一代对象经历过垃圾回收,依然存活,那么它就被归入下一代对象。垃圾回收启动时,一定会扫描所有的0代对象。如果0代经过一定次数垃圾回收,那么就启动对0代和1代的扫描清理。当1代也经历了一定次数的垃圾回收后,那么会启动对0,1,2,即对所有对象进行扫描。
5.python装饰器
代码运行期间动态增加功能的方式,称之为“装饰器”
import functools
def log(text): #带参数的decorator
def decorator(func):
@functools.wraps(func) #复制被装饰函数func的__name__属性到wrapper函数中
def wrapper(*args, **kw):
print '%s %s():' % (text, func.__name__) #添加的功能
return func(*args, **kw)
return wrapper
return decorator
@log("execute")
def fun():
print "fun is decorated"
4.python中的lambda
lambda定义了一个匿名函数,是一个表达式而非语句。
lambda的一般形式是关键字lambda后面跟一个或多个参数,紧跟一个冒号,以后是一个表达式。
f = lambda x, y, z : x+y+z
print f(1,2,3)
L = [(lambda x:x+1),
(lambda x:x+2),
(lambda x:x+3)]
print L[0](2), L[1](2),L[2](2)
5.python单例模式
class Singleton(object):
__instance = None
def __init__(self):
pass
def __new__(cls, *args, **kwagrs):
if not cls.__instance:
cls.__instance = super(Singleton, cls).__new_(cls, *args, *kwargs)
return cls.__instance