为什么对Python字符串函数采用不同的方法

为什么对Python字符串函数采用不同的方法,python,python-2.7,Python,Python 2.7,从Python开始 有人能解释一下为什么一些内置字符串函数在括号内使用参数,如下所示: length = len("This is a string") 而其他一些函数似乎只是“链接”到它们正在操作的字符串的末尾,例如: uppercase = "lowercase string".upper() foo = (1,2,3) len(foo) >>> 3 bar = ['a', 'b', 'c', 'd'] len(bar) >>> 4 可能是个愚蠢的

从Python开始

有人能解释一下为什么一些内置字符串函数在括号内使用参数,如下所示:

length = len("This is a string")
而其他一些函数似乎只是“链接”到它们正在操作的字符串的末尾,例如:

uppercase = "lowercase string".upper()
foo = (1,2,3)
len(foo)
>>> 3

bar = ['a', 'b', 'c', 'd']
len(bar)
>>> 4
可能是个愚蠢的问题,但我只是想知道这背后是否有我不知道的原因。

函数len()是该语言中的内置函数


您使用的.upper()函数是string类的一部分

在第一种情况下,
len
是一个在当前名称空间中调用的函数,并向其传递一个参数。在第二种情况下,调用
xyz.upper()
意味着您正在对String对象“lowercase String”调用方法
.upper()

len()
函数调用传递给它的对象上的
\uu len\uu()
方法,因此实际上它只是调用该方法的快捷方式。其他一些用户已经发布了相关链接,指向这背后的原因(感谢larsmans的更正)。

len()是一个内置函数,它返回序列的长度,也就是说,您可以将列表、元组传递给len(),而不仅仅是字符串。例如:

uppercase = "lowercase string".upper()
foo = (1,2,3)
len(foo)
>>> 3

bar = ['a', 'b', 'c', 'd']
len(bar)
>>> 4
关于方括号-在您的示例中,方括号之间是一个字符串。您也可以这样做:

foo = "This is a string"
len(foo)

"lowercase string".upper()
正在调用字符串对象的方法,该方法返回该字符串的大写字母。您可以对以下各项执行相同的操作:

foo = "lowercase string"
uppercase = foo.upper()

Len是一个函数,一个内置函数,因此使用Len(某物)可以对输入应用转换并获得输出,类似于Y=f(X)

some string.upper()是实例“some string”的一个方法;“some string”属于类string,并有其方法。 请注意,像这样编写的“some string”是一个对象,它包含所有的方法,如果您键入:

>>type("some string")
str

总而言之:len是一个函数,是在外部定义的,.upper()是在对象本身中定义的一个方法

相关:这里已经回答了这个问题,也相关(特别是问题中的链接和引用):对于重复的问题,我深表歉意!啊,我知道你想要的是推理,而不是区别……第二段没有多大意义
len
对于不同的类型有不同的实现,称为
\UuuLen\UuUn
,所以说“总是相同的函数”只是在非常有限的意义上是正确的。你是对的,我更改了答案。