考虑三个功能:
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(假设它不是动物或其他东西)。
person
def get_mother(person): if is_human(person): return person.mother else: return None
使用 return
出于与break循环相同的原因使用它。返回值并不重要,你只想退出整个函数。即使你不经常使用它,它在某些地方也非常有用。
我们有15个人prisoners,我们知道其中一个人有一把刀。我们prisoner逐个循环检查它们是否有刀。如果我们用小刀打人,则可以退出该功能,因为我们知道只有一把小刀,没有理由检查其余部分prisoners。如果找不到prisoner刀子,则会发出警报。可以用许多不同的方法完成此操作,使用return它甚至可能不是最好的方法,但这只是显示如何return用于退出函数的一个示例。
prisoners
prisoner
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(),因为返回值不是要捕获的。
var = find_prisoner_with_knife()
使用无return可言
这也将返回None,但是该值并不意味着要使用或捕获。这仅表示该功能已成功结束。它基本上是相同return的void语言,如C ++或Java功能。
None
return
void
C ++
Java
在下面的示例中,我们设置了人的母亲的名字,然后该函数在成功完成后退出。
def set_mother(person, mother): if is_human(person): person.mother = mother
注意:绝对不要这样做var = set_mother(my_person, my_mother),因为返回值不是要捕获的。
var = set_mother(my_person, my_mother)