2017-05-26 109 views
1

如果有人能向我解釋以下情況,我將不勝感激。我是Python中的最新版本,也是編程中的最新版本。可能是沒有意義的。對象發生了什麼?

當我使用這個片段將返回我無:

(in) dic = {'a':1, 'b':2} 
(in) print(dic.update({'c':3})) 
(out) None 

但是當我用這一個返回我更新DIC:

(in) dic = {'a':1, 'b':2} 
(in) dic.update({'c':3}) 
(in) print(dic) 
(out) {'a': 1, 'b': 2, 'c': 3} 

爲什麼呢?爲什麼我必須完全符合訂單?

進一步編輯... 好的。我還不明白。是否與此代碼有任何關聯/關係:

(in) lst = [1,3,2,4,6,5] 
(in) print(lst.sort()) 
(in) print(sorted(lst)) 

(out) None 
(out) [1, 2, 3, 4, 5, 6] 

在這兩種情況下,無論是函數還是方法,列表被假定爲已排序。但 當我通過方法調用打印時,它返回None。

(in) lst = [1,3,2,4,6,5] 
(in) lst.sort() 
(out) print(lst) 
+1

因爲'update'修改你的字典並返回'None'。這從代碼中看起來很清楚。 – khelwood

+1

切線相關:https://nedbatchelder.com/text/names.html。 'dic'和'dic.update(...)'是表達式,它們簡單地評估爲兩個不同的對象。 – chepner

回答

1

在第一種情況下,您試圖打印dic.update呼叫的返回值。沒有一個。

在第二種情況下,您正在打印修改過的字典本身。

這兩個程序基本上做了完全不同的事情,它與任何「訂單」無關。

0

沒有閱讀文檔,我猜update方法確實更新了對象(dic),但不返回任何內容(None)。 print打印由update返回的內容,即,即沒有。嘗試在第一個print後面加上print(dic)

1
type(dic.update({'c':3})) 
>>> <class 'NoneType'> 

type(dic) 
>>> <class 'dict'> 

type(sum) 
>>> <class 'builtin_function_or_method'> 

嘗試類型(),你會發現差異。某些「功能」在返回「無」時更新對象,例如object.append(),object.sort()。