2012-01-11 77 views
4
class test: 
    def __init__(self, val): 
     self.val = val 
     self.val.lower() 

爲什麼在這段代碼中val()的內容沒有運算?爲什麼這個函數不會在__init__方法中觸發?

+1

實際上它確實存在,但不存儲結果。看看aix寫了些什麼。 – freakish 2012-01-11 12:56:13

+5

請記住,字符串在Python中是不可變的。沒有什麼可以改變一個字符串對象 - 你只能得到一個修改後的副本。 – 2012-01-11 12:56:46

回答

15

你大概的意思是:

self.val = self.val.lower() 

或者,更簡潔:

class test: 
    def __init__(self, val): 
     self.val = val.lower() 

要精心,lower()不會修改到位的字符串(它不能,因爲字符串是不可改變的) 。相反,它會返回一個字符串的副本,並進行相應的修改。

5

documentation指出它很清楚:

返回字符串的與所有的套管字符[4]轉換爲小寫的副本。

0

在Python中有兩種類型的函數會導致這種混淆。例如,以一個列表排序,你可以這樣做:

>>> a.sort() 

>>> a = sorted(a) 

第一個排在「A」,但第二各種各樣的「a」,並返回新的排序列表。

+0

然後告訴我應該用什麼函數來降低'self.val'中的字符串而不是返回它。 – Tadeck 2012-01-12 07:37:38

2

這是因爲字符串是不可變的。你不能在原地改變它們。

因此,你必須覆蓋這樣的變量的值:

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'] 

幫助?

相關問題