2016-10-09 52 views
0

所以在python中,如果你創建了list,那麼新建一個變量reject_list併爲其分配.pop()方法,它會改變之前list變量的值。.pop()方法如何通過僅僅是另一個的值來重新定義一個變量?

list = ['item', 'thing', 'piece'] 
reject_list = list.pop() 
print(list) 

['item', 'thing'] 

我明白這個效果,但並不知道它有多可能。如何分配一個變量的方法的另一個追溯改變原變量的值,而不首先將該值被定義,像這樣:

list = ['item', 'thing', 'piece'] 
list = list.pop()  
print(list) 

['item', 'thing'] 

舉例來說,這並不與.title()方法工作:

name = mike 
new_name = name.title() 
print(name) 

mike 
#the original name did not capitalize 

那麼.pop()方法如何能夠通過僅僅是另一個值來重新定義一個變量?

+0

'title()'返回字符串的一個副本,其中所有單詞的首字母大寫。 –

+0

您可能希望避免使用名稱「list」,因爲它是一個保留關鍵字。 – sytech

回答

1

您對您所看到的內容的解釋不正確。 list的值的更改與您將list.pop()的結果指定爲reject_list無關。

Python是基於對象的語言,這意味着數據的基本元件在它是對象,其是數據的集合(或狀態)和功能(稱爲方法)。方法可以訪問它們被調用的對象中包含的狀態,並且可以對其進行修改。在列表的情況下,它的元素就是它的狀態。 pop()的行爲是通過刪除所調用列表的最後一個元素並將其返回來修改此狀態。因此,在調用它之後,原始列表會縮短一個元素。

有一個看看這個例子:

>>> a = [1, 2, 3] 
>>> b = a   # the name "b" refers to the same list as the name "a" 
>>> a.pop()  # we pop off a value but don't assign it anywhere 
3 
>>> a 
[1, 2] 
>>> b 
[1, 2] 

注意的a.pop()結果沒有分配到任何東西,但a仍會被改變。您可以將a.pop()的含義想象爲「刪除列表a的最後一個元素(同時也將其作爲結果返回)」。

另請注意,使用名稱list並不是一個好主意,因爲它是一個內置標識符,指的是列表類型本身,您正在重新定義它。

+0

對不起,我是Python新手,所以我肯定缺乏正確的詞彙來問我的問題。我理解你的例子,因爲在第3行有一個變量被重新定義。 但是,pop()不需要它,它可以放入另一個變量的值中,同時改變原來的變量。類似地,upper()方法可以放置在另一個變量的值中,並保留原始值: a ='hey' b = a.upper() print(a) print(b) - >嘿 - >嘿 但彈出()不這樣做,這是否有道理?對不起,謝謝你的幫助 – Mike

+0

'pop'和'upper'不會被放置到另一個變量中。他們被調用了一些對象'a',語法爲'a.pop()'或'a.upper()',並告訴他們計算結果並返回。然後將它們的* result *放置到另一個變量中,或者您可以決定不這樣做(這是'b = a.pop()'和'b.pop()'之間的區別)。它們之間的區別在於'upper'是一個* pure *函數,這意味着它保持原始值不變,只需使用它來計算新值。另一方面,'pop'顯式地改變了原始值(通過去除它的最後一個元素)。 – dkasak

+0

此外,該變量是* not *在第3行被重新定義,只有它所指的對象正在被改變(變異)。在Python中,名稱(變量)不同於它們所指的對象。這個例子中的要點是,兩個名稱'a'和'b'都指向與名稱無關的** ** **對象。 – dkasak

0

答案是list.pop()方法專門修改對象; 刪除並從列表中返回一個項目。 str.title()在標題大小寫中返回一個版本,但不會修改字符串本身。

值得注意的是,字符串在Python中是不可變的。

my_list = ["a", "b", "c"] 
popped_element = my_list.pop() 
print(my_list) 
#['a', 'b'] 
print(popped_element) 
#'c' 
相關問題