В Python и, следовательно, xonsh, del
только изменяет текущую область.Так что в вашем примере вы действительно просто удаляете имя func
внутри turn_into_alias()
.Объект функции все еще может иметь ссылки на него в другом месте, поэтому Python не удалит его.
Поскольку это в вашем xonshrc, вероятно, самое простое, что можно сделать, это удалить его из globals()
или __xonsh_ctx__
.
. Что-то вроде следующего должно работать
def turn_into_alias(func, keep=False):
name = func.__name__
aliases[name] = func
del globals()[name]
или
def turn_into_alias(func, keep=False):
name = func.__name__
aliases[name] = func
del __xonsh_ctx__[name]