为什么Python函数有名称?

为什么Python函数有名称?,python,Python,我不认为func_名称有任何意义/用途。两个不同的函数可以有相同的名称,知道函数的引用就足够了。请参阅下面的示例代码 def a(): print "function a" b=a def a(): print "new function a" >>> b.func_name 'a' >>> a.func_name 'a' a()和b()都有相同的函数名,但都是对不同函数对象的引用 >>> b.func_name 'a' &

我不认为func_名称有任何意义/用途。两个不同的函数可以有相同的名称,知道函数的引用就足够了。请参阅下面的示例代码

def a():
    print "function a"
b=a
def a():
    print "new function a"
>>> b.func_name
'a'
>>> a.func_name
'a'
a()和b()都有相同的函数名,但都是对不同函数对象的引用

>>> b.func_name
'a'
>>> a.func_name
'a'

有人能帮我理解为什么python存储func_名称没有用处吗?

这个名称用于某些事情
repr(fn)
使用
fn.func_name
显示函数名<代码>帮助(fn)还使用
fn.func\u名称
作为文档

pickle函数还使用
func_name
属性,既可以作为pickle中存储的名称,也可以检查函数是否在模块中定义(因此,当函数检查模块中是否定义了具有相同名称和相同代码对象的函数时,不能对另一个函数中定义的函数进行pickle)


请注意,堆栈跟踪使用附加到代码对象
fn.func\u code.co\u name
的名称,因此不能更改堆栈跟踪中显示的名称,因为该名称是只读属性。

函数具有要命名的名称。作为使用示例:

import math
for name in dir(math):
    try :
        if eval('math.'+name)(0)==0 : print (name,end=', ')  
    except : pass
print('\b\b know origin of things.')
版画:“asin,asinh,atan,atanh,ceil,degrees,erf,expm1,fabs,floor,isinf,isnan,log1p,radians,sin,sinh,sqrt,tan,tanh,trunc知道事物的起源。”


\uuuu name\uuuuu
可以被看作是人类的名字,你通常没有理由改变它。Python与C不同,它允许重新声明。善用资源是你的责任

@deceze,实际上stacktrace中的名称来自
a.func_code.co_name
文档?至少,函数名是由
help(a)
报告的。注意,在Python 3中是
\uuuu name\uuuu
。我们从帮助中了解函数名,但这只会让我感到困惑,我可能有两个不同描述的函数名。