在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__'
出了什么问题?
答案 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__