global __import__ eventlet functools实现aop等简单示例

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'



你可能感兴趣的:(AOP,Decorator,function,python,import,wrapper)