global
1、global---将变量定义为全局变量。可以通过定义为全局变量,实现在函数内部改变变量值。
2、一个global语句可以同时定义多个变量,如 global x, y, z
示例程序:
>>> def func():
... global x
... print 'x is ', x
... x = 2
... print 'Change local x to ', x
...
>>> x = 50
>>> func()
x is 50
Change local x to 2
__import__
python中的__import__方法,在导入位于子包下的模块时,必须有fromlist参数,否则返回的不正确。
__import__也不能导入module下的class,可以自己写一个函数来解决这个问题
Python代码
def importAny(name):
try:
return __import__(name,fromlist=[''])
except:
try:
i = name.rfind('.')
mod = __import__(name[:i],fromlist=[''])
return getattr(mod,name[i+1:])
except:
raise RuntimeError('No module of: %s found'%(name))
xxx = importAny('my.xxx')
cls = importAny('my.xxx.SomeClass')
#相当于 Class.forName('my.xxx.SomeClass')
obj = cls('xxxx')
#相当于newInstance(‘xxx')
eventlet
Eventlet的基础是 greenlet,这是实现 "协程(Coroutine)" 的基础.协程又被称作 "微线程“,简单点说就是在一个原生线程上通过 "拷贝" 和 "切换" 堆栈帧数据来实现执行多个工作绪.看上去和传统的 "单CPU,多线程(Threading)" 执行方式差不多. swpan() 启动一个 GreenThread 执行目标函数,wait() 返回函数执行结果。
•import eventlet
•pool = eventlet.GreenPool()
•while True: pool.spawn(func,args )
上面这段代码,几乎就是使用eventlet的范式:
•GreenPool 用来实现协程,保证并行;
•Spawn 用来调用相应的函数,完成具体业务
•每个func之间切换,实施“你运行一会、我运行一会”,并且在进行切换时必须指定何时切换以及切换到哪,当出现阻塞时,就显式切换到另一段没有被阻塞的代码段执行,直到原先的阻塞状况消失以后,再人工切换回原来的代码段继续处理.
functools实现aop
>>> from functools import wraps
>>> def my_decorator(f):
... @wraps(f)
... def wrapper(*args, **kwds):
... print 'Calling decorated function'
... return f(*args, **kwds)
... return wrapper
...
>>> @my_decorator
... def example():
... """Docstring"""
... print 'Called example function'
...
>>> example()
Calling decorated function
Called example function
>>> example.__name__
'example'
>>> example.__doc__
'Docstring'