2017-05-26 139 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()。