Python-return, return None, and no return at all?
考虑三个功能:
def my_func1():
print "Hello World"
return None
def my_func2():
print "Hello World"
return
def my_func3():
print "Hello World"
它们似乎都返回None。这些函数的返回值的行为方式之间有什么区别吗?有什么理由偏爱一个?
-
在实际行为上,没有区别。他们都回来了None,就是这样。但是,所有这些都有时间和地点。以下说明基本上是应如何使用不同方法的方法(或至少应告诉我应如何使用它们的方法),但它们不是绝对的规则,因此你可以根据需要将它们混合使用。
使用 return None
这说明该函数确实是要返回一个值以供以后使用,在这种情况下,它返回None。None然后可以在其他地方使用此值。return None如果该函数没有其他可能的返回值,则永远不要使用。
在下面的例子中,我们返回
person
的mother,如果person
给出的一个人。如果不是人类,我们将返回,None因为person
它没有mother(假设它不是动物或其他东西)。def get_mother(person): if is_human(person): return person.mother else: return None
使用 return
出于与break循环相同的原因使用它。返回值并不重要,你只想退出整个函数。即使你不经常使用它,它在某些地方也非常有用。
我们有15个人
prisoners
,我们知道其中一个人有一把刀。我们prisoner逐个循环检查它们是否有刀。如果我们用小刀打人,则可以退出该功能,因为我们知道只有一把小刀,没有理由检查其余部分prisoners
。如果找不到prisoner
刀子,则会发出警报。可以用许多不同的方法完成此操作,使用return它甚至可能不是最好的方法,但这只是显示如何return用于退出函数的一个示例。def find_prisoner_with_knife(prisoners): for prisoner in prisoners: if "knife" in prisoner.items: prisoner.move_to_inquisition() return # no need to check rest of the prisoners nor raise an alert raise_alert()
注意:绝对不要这样做
var = find_prisoner_with_knife()
,因为返回值不是要捕获的。使用无return可言
这也将返回
None
,但是该值并不意味着要使用或捕获。这仅表示该功能已成功结束。它基本上是相同return
的void
语言,如C ++
或Java
功能。在下面的示例中,我们设置了人的母亲的名字,然后该函数在成功完成后退出。
def set_mother(person, mother): if is_human(person): person.mother = mother
注意:绝对不要这样做
var = set_mother(my_person, my_mother)
,因为返回值不是要捕获的。