2015-09-15 25 views
5

我有一個Python套件包括幾個值,我想使用方法鏈是這樣的:方法並不鏈在Python設置

>>> f = {1, 2, 3} 
>>> g = f.copy().discard(3) 
>>> g 
>>> 

變空。然而,它沒有鏈接工作:

>>> g = f.copy() 
>>> g 
{1, 2, 3} 
>>> g.discard(3) 
>>> g 
{1, 2} 

有人可以解釋我這種行爲?

+4

是什麼使您得出結論:方法通常在python中鏈接? – burnpanck

回答

2

當你做了g = f.copy().discard(3),你正在存儲方法「丟棄(3)」的返回值。在這種情況下,它不返回任何內容,但會改變對象。這就是爲什麼在第二種情況下它的工作原理。

5

discard()丟棄集合中的元素並返回None

所以當你分配

g = f.copy().discard(3) 

這相當於

h = f.copy() # now h = f 
g = h.discard(3) # g = None; h = {1,2} 

它給你留下g = None

0

這是因爲.discard返回None

所以當你做g = f.copy().discard(3)它創建一個f的副本,丟棄最後一個元素,然後返回None。由於要返回的最後一件事是分配給變量的值,所以g最後的值爲None

+0

謝謝,我不明白一個變量是由鏈中最後一個方法的返回值賦值的。 –

1

您可以改爲f - {3},因爲-集合是生產值並且不會修改其輸入。