Eliminar una función no es algo que se le ocurra a la función en sí; que es algo que se hace para el espacio de nombres que vive. (Así como la eliminación del número 3 de la lista no es algo que se hace con el número 3, que es algo que se hace a la lista.)
suponga que dicen
def foo(x): return 1
bar = foo
Luego, (más o menos) tiene dos nombres, foo
y bar
, para exactamente la misma función. Ahora suponga que llama al delete_function(foo)
o delete_function(bar)
. El exactamente lo mismo, es decir, un objeto de función, se pasa al delete_function
.Pero lo que realmente quiere eliminar es la asociación entre el nombre foo
o bar
y ese objeto, y no hay manera posible de que delete_function
(como usted lo defina) pueda saber si es foo
o bar
o algo más que quiere deshacerse de.
(Bueno ... En realidad, no existe. Hay cosas desagradables hacky que puede hacer que permitiría el código en delete_function
saber más acerca de cómo se llamaba. Pero ni siquiera piensan acerca de pensar en ellos.)
So. Tus opciones son las siguientes. (1) Nasty cosas desagradables, como acabo de mencionar. No lo hagas (2) Pase delete_function
no es el objeto de la función, sino la información sobre el nombre de la función y de lo que intenta eliminar. Esto es feo y desgarbado. (3) No te molestes.
Recomiendo encarecidamente # 3, a menos que la única razón por la que está haciendo esto es para aprender más sobre cómo funciona Python. En este último caso, un buen lugar para comenzar podría ser http://docs.python.org/reference/executionmodel.html.
¿cuál es el problema que espera resolver con esta técnica? – SingleNegationElimination
De hecho. ¿Por qué, por amor al código, por qué? – Macke
Si tiene que hacer esto, es probable que haya algún problema con su implementación. –