[转]Python魔法

Friday, July 9, 2010

定义一个函数,变量name并不是全局变量

def test():
    print name

这样的函数会正确执行?不可能,任何有些编程常识的TX都会得出这样的结论。
可是如果在framework中,需要这样做呢?

比如

def index(request):
    if request.method==POST:
         #do something
    else:
         #do another process

def index():
    if request.method==POST:
         #do something
    else:
         #do another process

框架的侵入性哪个高,必然是上面一个,而且每次都要多敲几下键盘也影响了开发效率
回到第一个test()例子,如果framework在执行test()之前,先对test作如下操作:

test.func_globals['name']='rock'

那么test()会漂亮滴执行完并输出'rock'

其实test.func_globals就是locals()所取得的那个上下文 囧~~

可以改成以下代码:

locals()['name']='rock'
def test():
    print name

照样执行正常,如同定义了全局变量一样
转自: http://blog.sina.com.cn/s/blog_4406d9090100iwi1.html

This entry was tagged Python

comments powered by Disqus

© 2009-2013 lxneng.com. All rights reserved. Powered by Pyramid

go to Top