可以在定义中更改函数名称吗?

bea*_*rdc 7 python attributes function

我尝试了几种方法来更改定义中的函数名称,但是它们都失败了.

>>> def f():
        pass
>>> f.__name__
'f'
>>> def f():
        f.__name__ = 'new name'
>>> f.__name__
'f'
>>> def f():
        self.__name__ = 'new name'
>>> f.__name__
'f'
Run Code Online (Sandbox Code Playgroud)

但我可以在定义后更改name属性.

>>> def f():
        pass
>>> f.__name__ = 'new name'
>>> f.__name__
'new name'
Run Code Online (Sandbox Code Playgroud)

有什么方法可以在定义中更改/设置它(除了使用装饰器)?

Thi*_*ter 18

在执行该函数之前,不会执行函数体.你可以使用装饰器:

def rename(newname):
    def decorator(f):
        f.__name__ = newname
        return f
    return decorator
Run Code Online (Sandbox Code Playgroud)

然后像这样使用它:

@rename('new name')
def f():
    pass
print f.__name__
Run Code Online (Sandbox Code Playgroud)

但是,该功能仍然只能作为f.

  • 嗨@ThiefMaster。但是我怎样才能更改函数的名称并使其可访问呢? (2认同)