def insertion_sort(list):
for index in range(1,len(list)):
value = list[index]
i = index - 1
while i>=0:
if value < list[i]:
list[i+1] = list[i]
list[i] = value
i = i - 1
else:
break
a = [7,1,3,5,9,2,3]
print(insertion_sort(a))
此代码取自Khan Academy video。但是,当我尝试自己在Jupyter Notebook和IDLE上运行它时,都将输出None。我无法从视频中弄清楚为什么如此。 预先感谢您的帮助。
答案 0 :(得分:5)
您的函数在任何地方都没有return
语句。如果某个函数未明确return
,则它始终返回None
。
几乎可以肯定,此函数不返回任何内容。
请注意,该函数就地改变了其参数:
>>> a = [7,1,3,5,9,2,3]
>>> insertion_sort(a)
>>> a
[1, 2, 3, 3, 5, 7, 9]
在Python中,执行此操作的函数不返回任何内容是惯用法。例如,请参见内置方法,例如list.sort
和list.append
。
请注意,in the cited video正是老师的工作,他们不是print
的{{1}}结果,他们只是调用它,然后查看变量。
一般来说,像这样的就地改变值的函数采用命令式动词,例如列表方法sort
,而使参数不变但返回转换后的值的函数采用过去分词,例如内置函数sorted
。
因此,如果将此函数命名为insertion_sort
,Python程序员将期望它不理会参数并返回一个新的,已排序的列表。由于它的名称为insertion_sorted
,因此他们希望它能够对参数进行就地排序,并且不返回任何内容。