Python – 返回,返回None,根本不返回

问题:

考虑三个功能:

def my_func1():
  print "Hello World"
  return None

def my_func2():
  print "Hello World"
  return

def my_func3():
  print "Hello World"

他们都似乎返回无。这些函数返回值的行为是否有差异?有什么理由选择一个而不是另一个?

回答:

关于实际行为,没有什么区别。他们都返回None,就是这样。但是,所有这些都有时间和地点。
以下说明基本上是如何使用不同的方法(或至少如何被教导他们应该被使用),但它们不是绝对的规则,所以如果你有必要,可以混合使用。
使用return None
这表示该函数的确意味着返回一个值以备将来使用,在这种情况下返回None。此值None可以在其他地方使用。如果函数没有其他可能的返回值,则从不使用return None
在下面的例子中,如果给出的人是人类,我们会返回人的母亲。如果不是人,我们返回None,因为“人”没有母亲(假设这不是动物)。

def get_mother(person):
    if is_human(person):
        return person.mother
    else:
        return None

使用return
这与break in循环的原因相同。返回值无关紧要,您只想退出整个函数。这在某些地方是非常有用的,即使你经常不需要它。
我们有15个囚犯,我们知道其中一个有刀。我们一个接一个地循环穿过每个囚犯,检查他们是否有刀。如果我们用刀打人,我们可以退出这个功能,因为我们知道只有一把刀,没有理由检查其余的囚犯。如果我们没有用刀拿着囚犯,我们会提醒警戒。这可以通过许多不同的方式完成,并且使用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(),因为返回值并不意味着被捕获。
根本没有回报。
这也将返回None,但该值并不意味着被使用或被捕获。这只是意味着功能成功结束。它与void函数中的return基本相同,如C ++或Java等语言。
在下面的例子中,我们设置了人的母亲姓名,然后功能在成功完成后退出。

def set_mother(person, mother):
    if is_human(person):
        person.mother = mother

注意:您不应该执行var = set_mother(my_person, my_mother),因为返回值并不意味着被捕获。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Python — return, return None, and no return at all

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

5 + 1 =