我有函数声明,如:
def function(list_of_objects = None)
如果没有传递* list_of_objects *(是None)我需要像空列表一样定义它。明确的方法是:
def function(list_of_objects = None):
if not list_of_objects:
list_of_objects = list()
或
def function(list_of_objects = None):
list_of_objects = list() if not list_of_objects else list_of_objects
上面的代码是否等于下一个?
def function(list_of_objects = None):
list_of_objects = list_of_objects or list()
我测试了它,但我仍然不确定
>>> 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'>, [])
>>>
答案 0 :(得分:7)
不,因为None
不是唯一的假对象。还包括[]
,()
,0
,当然还有False
。
答案 1 :(得分:3)
惯用法是:
def function(list_of_objects=None):
if list_of_objects is None:
list_of_objects = []
None
是一个单身人士,因此您可以使用is
运算符进行比较。
您的代码测试list_of_objects
的真实性(在这种情况下,所有if
和or
变体都是等效的)。 The following values are considered false in Python:
无
假
任何数字类型的零,例如0
,0.0
,0j
。
任何空序列,例如''
,()
,[]
。
任何空映射,例如{}
。
用户定义类的实例,如果类定义了__bool__()
或__len__()
方法,则该方法返回整数零或bool值为False。
所有其他值都被认为是真的 - 因此许多类型的对象始终为真。
答案 2 :(得分:2)
通常的做法是:
def function(list_of_objects=None):
if list_of_objects is None:
list_of_objects = []
...
使用无,因为很容易区分其他错误值,例如空列表或空元组。
使用is None
测试而不是相等测试,因为无是单身(这是首选练习,每PEP 8)。