如何在Python中动态更改函数名称

9

我希望根据从另一个函数获得的结果更改函数名称,但函数定义保持不变。我该怎么做?我尝试了下面的示例,但它没有起作用。

def f(text):
   def x(text):
     return text+"example"
   name=x(text)
   def name(y):
     return y
   return name
p=f("hi ")
print p("hello")
print p.__name__

输出

hello
name

但是我希望函数名p.__name__显示为"hi example"而不是"name"


5
为什么有人想要这样做? - user2665694
2
@esaelPsnoroMoN: 我不能代表OP说话,但就我个人而言,我已经这样做了,以便为闭包定制文档,并动态分配__doc__。闭包保留内部名称,这可能应该被封装。 - cdarke
1个回答

8

你可以简单地将值赋给 __name__

def f(text):
   def r(y):
     return y
   r.__name__ = text + "example"
   return r
p = f("hi ")
print (p("hello")) # Outputs "hello"
print (p.__name__) # Outputs "hi example"

请注意,函数名称并不影响函数的行为,并且除了作为字符串表示或调试辅助的一部分外,没有任何含义。

我不太确定__name__是否是实现细节,它被列为数据模型的一部分。 - Matthew Trevor
@MatthewTrevor 哦,你说得对 - 它甚至被声明为可写的。已修复。 - phihag

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接