[英]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.