为什么Python函数有名字?

时间:2016-01-27 15:14:57

标签: python

我没有看到func_name的任何重要性/用法。两个不同的功能可以有相同的名称,它足以让人知道对功能的参考。请参阅下面的示例代码

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_name哪个没用?

2 个答案:

答案 0 :(得分:2)

该名称用于某些事情。 repr(fn)使用fn.func_name显示函数的名称。 help(fn)也使用fn.func_name作为文档。

腌制函数也使用func_name属性作为存储在pickle中的名称,并检查函数是否在模块中定义(因此您无法在另一个函数中定义函数)函数,因为它检查有一个具有相同名称和模块中定义的相同代码对象的函数。

请注意,堆栈跟踪使用附加到代码对象fn.func_code.co_name的名称,因此您无法更改堆栈跟踪中显示的名称,因为这是一个只读属性。

答案 1 :(得分:0)

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

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 know origin事情。“

__name__可以被视为人类的名字,你通常没有理由改变它。 Python不像C允许重新声明。充分利用这是你的责任。