已发“坑”列表:Python函数默认值参数的2个坑,Python编程中一定要注意的那些“坑”(一),Python编程中一定要注意的那些“坑”(二),Python中一定要注意的那些“坑”(三),Python编程一定要注意的那些“坑”(四),Python编程一定要注意的那些“坑”(五),Python编程一定要注意的那些“坑”(六)
今天介绍一下函数返回值的“坑”,其实严格来说这并不是坑,而是程序员不熟悉或者不注意函数或方法的工作机制和返回值造成的。
在Python中,如果函数或方法中没有return语句、有return语句但是没有执行到、有return语句也执行到了但是该return语句没有返回任何值,那么Python都会认为这个函数或方法返回的空值None。
看下面的代码:
from random import shuffle
lst = list(range(20))
lst = shuffle(lst)
print(lst.index(5))
这段代码无法运行,并抛出下面的异常:
Traceback (most recent call last):
File "C:\Python36\test.py", line 5, in <module>
print(lst.index(5))
AttributeError: 'NoneType' object has no attribute 'index'
原因在于,标准库random的shuffle()随机打乱列表中元素顺序的操作属于原地操作,也就是说直接对列表进行操作,并没有返回值,或者说返回控制None,而None是没有index()方法。
上面的代码对shuffle()函数的用法是错误的,正确的应该是下面的样子:
from random import shuffle
lst = list(range(20))
shuffle(lst)
print(lst.index(5))
在使用内置函数、标准库函数、扩展库函数或对象方法时,一定要注意它们的用法,是原地操作还是返回处理后的新对象,这决定了该函数或方法的用法。