如何将函数的名称作为字符串?

时间:2017-05-28 11:06:16

标签: python python-2.7 python-3.x

在Python中,如何将函数的名称作为字符串?

我希望将str.capitalize()函数的名称作为字符串。该函数似乎具有__name__属性。当我做的时候

print str.__name__

我按预期得到了这个输出:

str

但是当我运行str.capitalize().__name__时,我收到错误,而不是将名称“大写”。

> Traceback (most recent call last):
> File "string_func.py", line 02, in <module>  
>    print str.capitalize().__name__
> TypeError: descriptor 'capitalize' of 'str' object needs an argument

类似地,

greeting = 'hello, world'
print greeting.capitalize().__name__

给出了这个错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute '__name__'

出了什么问题?

3 个答案:

答案 0 :(得分:11)

greeting.capitalize是一个函数对象,该对象具有您可以访问的.__name__属性。但是greeting.capitalize()调用函数对象并返回greeting字符串的大写版本,并且该字符串对象没有.__name__属性。 (但即使它确实有.__name__,它也是字符串的名称,而不是用于创建字符串的函数的名称。并且你不能str.capitalize(),因为当你打电话给&#34; raw&#34; str.capitalize函数需要传递一个可以大写的字符串参数。

所以你需要做

print str.capitalize.__name__

print greeting.capitalize.__name__

答案 1 :(得分:4)

让我们从错误

开始
  

追踪(最近的呼叫最后):
    文件“”,第1行,在中     AttributeError:'str'对象没有属性' name '

具体

  

AttributeError:'str'对象没有属性' name '

你正在尝试

greeting = 'hello, world'
print greeting.capitalize().__name__

将大写hello world并将其作为字符串返回。

如错误所述,string没有attribute _name_

capitalize()将立即执行该函数并使用结果,而capitalize将代表该函数。

如果您想在JavaScript中看到解决方法,

检查以下代码段

function abc(){
  return "hello world";
}

console.log(typeof abc); //function
console.log(typeof abc());

所以,不要执行。

只需使用

greeting = 'hello, world'
print greeting.capitalize.__name__

答案 2 :(得分:1)

您无需调用此功能,只需使用名称

即可
>>> str.capitalize.__name__