2013-08-02 2 views
0

У меня есть несколько методов, которые имеют следующий формат:Возможно ли динамическое заполнение методов Python кодом?

def p_methodone(a): 
    pass 

def p_methodtwo(a): 
    pass 

... 

Я хотел бы, чтобы удалить pass и заполнить эти методы с кодом a[0] = a[1]. Возможно ли это сделать в Python динамически, используя что-то вроде отражения? Причина в том, что у меня есть лот этих методов, и код a[0] = a[1] может измениться позже - было бы неплохо изменить его только в одном месте (вместо поиска и замены).

(Примечание. Я не могу изменить эти определения в любом случае, так как внешняя библиотека опирается на них, находясь в этом формате)

+1

Возможно ли, что какой-либо другой части программы получил ссылку на функции вы хотите изменить? Если это так, эти части будут по-прежнему иметь старую функцию после перезаписи имени, например, sfk и Rustam. Решение, которое должно работать даже в этом случае, представлено в разговоре [Do not Do It: Некоторые вещи, которые вы никогда не должны делать в python] (http://www.reddit.com/r/programming/comments/1hu12x/dont_do_this_some_things_you_should_never_do_in /). Он включает беспорядок с атрибутом '__code__'. Конечно, это академический интерес, так как вы не должны этого делать. :) –

ответ

1

Используйте лямбды вместо этого!

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

Это кажется хорошим! Благодаря! – sdasdadas

0

Вы можете изменить определение функции с лямбда-функции или другой функции

>>> 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