簡體   English   中英

可以在定義中更改函數名稱嗎?

[英]Possible to change function name in definition?

我嘗試了幾種方法來更改定義中的函數名稱,但是它們都失敗了。

>>> def f():
        pass
>>> f.__name__
'f'
>>> def f():
        f.__name__ = 'new name'
>>> f.__name__
'f'
>>> def f():
        self.__name__ = 'new name'
>>> f.__name__
'f'

但我可以在定義后更改name屬性。

>>> def f():
        pass
>>> f.__name__ = 'new name'
>>> f.__name__
'new name'

有什么方法可以在定義中更改/設置它(除了使用裝飾器)?

在執行該函數之前,不會執行函數體。 你可以使用裝飾器:

def rename(newname):
    def decorator(f):
        f.__name__ = newname
        return f
    return decorator

然后像這樣使用它:

@rename('new name')
def f():
    pass
print f.__name__

但是,該功能仍然只能作為f訪問。

不可以。最接近你的是定義一個可調用的類,每個實例在初始化器中設置了__name__

在調用函數之前不會執行函數體,因此您無法使用函數體來更改定義時發生的情況。 你為什么要這樣做呢? 如果您正在編寫該函數並希望它具有不同的名稱,則只需使用其他名稱進行定義即可。

如果你把它放在函數體中,你就說f執行部分是將它的名字設置為'new name' 顯然,在調用函數之前不會做任何事情。

使用裝飾器一種規范的方式來聲明一個函數與它單獨的def塊有點不同,並且你不會找到更好的東西。

這可能是愚蠢但有點有效?

>>> f = None
>>> def new_name():
    global f
    f = new_name


>>> new_name()
>>> f
<function new_name at 0x01945108>
>>> f.__name__
'new_name'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM