class test:
def __init__(self, val):
self.val = val
self.val.lower()
为什么lower()不对此代码中的val内容进行操作?
答案 0 :(得分:15)
你可能意味着:
self.val = self.val.lower()
或者,更简洁:
class test:
def __init__(self, val):
self.val = val.lower()
详细说明,lower()
不会修改字符串(它不能,因为字符串是不可变的)。相反,它返回一个适当修改的字符串副本。
答案 1 :(得分:5)
documentation非常明确地说明了这一点:
返回字符串的副本,其中所有套接字符[4]都转换为小写。
答案 2 :(得分:2)
这是因为字符串是不可变的。你不能就地改变它们。
因此,您必须覆盖变量的值:
self.val = self.val.lower()
注意:当然,除非您的self.val
不是字符串,而是在调用lower()
方法后就地更改的一些可变对象。但事实并非如此(如果你创建了self.val
的类,你可以这样做。)
使用lower()
方法更改原位的可变对象示例:
>>> class LowerableList(list):
def lower(self):
for i, item in enumerate(self):
self[i] = item.lower()
>>> a = LowerableList(['A', 'a', 'X', 'D'])
>>> a
['A', 'a', 'X', 'D']
>>> a.lower()
>>> a
['a', 'a', 'x', 'd']
有帮助吗?
答案 3 :(得分:0)
在Python中,有两种类型的函数会导致这种混淆。例如,您可以对列表进行排序:
>>> a.sort()
或
>>> a = sorted(a)
第一个在“a”中排序,但第二个排序“a”并返回新的排序列表。