class test:
def __init__(self, val):
self.val = val
self.val.lower()
爲什麼在這段代碼中val()的內容沒有運算?爲什麼這個函數不會在__init__方法中觸發?
class test:
def __init__(self, val):
self.val = val
self.val.lower()
爲什麼在這段代碼中val()的內容沒有運算?爲什麼這個函數不會在__init__方法中觸發?
你大概的意思是:
self.val = self.val.lower()
或者,更簡潔:
class test:
def __init__(self, val):
self.val = val.lower()
要精心,lower()
不會修改到位的字符串(它不能,因爲字符串是不可改變的) 。相反,它會返回一個字符串的副本,並進行相應的修改。
的documentation指出它很清楚:
返回字符串的與所有的套管字符[4]轉換爲小寫的副本。
在Python中有兩種類型的函數會導致這種混淆。例如,以一個列表排序,你可以這樣做:
>>> a.sort()
或
>>> a = sorted(a)
第一個排在「A」,但第二各種各樣的「a」,並返回新的排序列表。
然後告訴我應該用什麼函數來降低'self.val'中的字符串而不是返回它。 – Tadeck 2012-01-12 07:37:38
這是因爲字符串是不可變的。你不能在原地改變它們。
因此,你必須覆蓋這樣的變量的值:
self.val = self.val.lower()
注:除非,當然,你的self.val
不是一個字符串,而是一些可變對象改變IN-請撥打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']
幫助?
實際上它確實存在,但不存儲結果。看看aix寫了些什麼。 – freakish 2012-01-11 12:56:13
請記住,字符串在Python中是不可變的。沒有什麼可以改變一個字符串對象 - 你只能得到一個修改後的副本。 – 2012-01-11 12:56:46