转:ython动态添加变量、函数


Ipython有个特性,里面有类似_i1、_i2这样的变量,表示第1次第二次输入的语句,很有意思。。
要动态添加变量,给变量一些带序号的名字,最笨的方法当然是eval或者exec了。。但是很不Pythonic蛤蛤

注意到locals()这个内建函数返回了一个本地变量的词典~
所以就可以这样:
Vmnnl1FlASBH5nf4yeSEMRpB0KA8S9kIt32RWJigvdO9AQAA4gAAAFBO
locals()没啥副作用的样子。。在函数内部调用自然就是函数内部的变量了,在最外围调用自然就是全局的变量了。。

但是这个没有完全解决问题,如果想要动态添加一个类的成员变量和函数肿摸办?

成员变量很简单:
RaB6rv91Wm-PjtHlw5rhdDBa1r1lScV-ivkYkmAuqS4yAgAAxAAAAFBO
当然直接调用so easy

成员函数有点麻烦,因为默认调用时,成员函数都会有一个参数,即self,这只是一个参数而不是关键字,传进去了一个类的实例。更多可以看:http://blog.jobbole.com/53989/ 介绍的很好
类似:
5
是错误的~运行
T=Test()
T.genAddFunction()
print T.add4(5)
时会报错,因为add4传入了俩参数,但genFunction只接受了一个参数。
当然如果喜欢脱裤子放屁,一开始的genFunction可以这样写:
I9r_6S1zFtILB-Gxw34MRHFHjOygRR8xcafPY8vCDrloAQAAXgAAAFBO
这样就没问题了= =

想要不默认传self参数,一般来说用的是@ staticmethod
所以最后这个成品就是这样:
27
还不明白有什么更深层的用处。。这样的代码有点儿函数编程的味道了吧哈哈哈

http://www.guokr.com/post/556411/

普人特福的博客cnzz&51la for wordpress,cnzz for wordpress,51la for wordpress