x = None或object()是否等于显式检查?

ato*_*era 2 python python-3.x

我有函数声明,如:

def function(list_of_objects = None)
Run Code Online (Sandbox Code Playgroud)

如果*list_of_objects*没有传递(是None)我需要像空列表一样定义它.明确的方法是:

def function(list_of_objects = None):
    if not list_of_objects:
        list_of_objects = list()
Run Code Online (Sandbox Code Playgroud)

要么

def function(list_of_objects = None):
    list_of_objects = list() if not list_of_objects else list_of_objects
Run Code Online (Sandbox Code Playgroud)

上面的代码是否等于下一个?

def function(list_of_objects = None):
    list_of_objects = list_of_objects or list()
Run Code Online (Sandbox Code Playgroud)

我测试了它,但我仍然不确定

>>> def func(my_list = None):
...     my_list = my_list or list()
...     print(type(my_list), my_list)
... 
>>> func()
(<type 'list'>, [])
>>> func(['hello', 'world'])
(<type 'list'>, ['hello', 'world'])
>>> func(None)
(<type 'list'>, [])
>>> 
Run Code Online (Sandbox Code Playgroud)

Ign*_*ams 7

不,因为None不是唯一的虚假对象.还包括[],(),0,当然False.