2013-08-02 46 views
0

我有很多的方法,这些方法如下格式:是否可以使用代码动态填充Python方法?

def p_methodone(a): 
    pass 

def p_methodtwo(a): 
    pass 

... 

我想用代码a[0] = a[1]删除pass和填充这些方法。是否可以使用类似反射的动态方式在Python中执行此操作?原因是我的lot这些方法,并且代码a[0] = a[1]可能会在以后更改 - 这将是很好的,只需要在一个地方(而不是做一个搜索和替换)进行更改。

(注:因为外部库依赖于他们在这个格式是我不能以任何方式改变这些定义)

+1

有没有可能是该计划的其他部分已经得到了你想要改变功能的参考?如果是这样,这些零件在重新命名为sfk和Rustam建议之后仍然会具有旧功能。即使在这种情况下也应该能够工作的解决方案在演讲中提出[不要这样做:有些事情你不应该在python中完成](http://www.reddit.com/r/programming/comments/1hu12x/dont_do_this_some_things_you_should_never_do_in /)。它涉及到'__code__'属性。这当然只有学术兴趣,因为你*不应该那样做。 :) –

回答

1

使用lambda表达式,而不是!

y = lambda a: a[0] = a[1] 
y([1, 2, 3]) 
+0

这看起来不错!谢谢! – sdasdadas

0

您可以覆盖一个函数的定义与lambda函数或使用其他功能

>>> def newdef(a): return a+1 
... 
>>> p_methodone = newdef 
>>> p_methodone(10) 
11 

>>> def newdef(a): return a+2 
... 
>>> p_methodone = newdef 
>>> p_methodone(10) 
12 
相关问题