xonsh:别名和具有相同名称的函数之间的冲突

时间:2018-05-25 10:55:41

标签: python function shell alias xonsh

我在xonshrc

中定义了此功能
def turn_into_alias(func, keep=False):
    aliases[func.__name__] = func
    del func

它应该将函数转换为别名。但它不起作用。它添加了别名,但del eting不起作用,因为它删除了传递给它的函数引用。

是否可以设置xonsh以便为别名提供更高的优先级? (可能不是,因为它毕竟是python,在这种情况下:)

有没有办法在xonsh中达到我想要的效果?

1 个答案:

答案 0 :(得分:0)

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