Python – 返回,返回None,根本不返回
考虑三个function:
def my_func1(): print "Hello World" return None def my_func2(): print "Hello World" return def my_func3(): print "Hello World"
他们都似乎返回None。 这些函数的返回值是如何performance的? 有什么理由更喜欢一个人呢?
在实际行为上,没有区别。 他们都返回None
,就是这样。 但是,所有这些都有一个时间和地点。 下面的说明基本上是应该如何使用不同的方法(或至less我是如何教他们应该使用),但他们不是绝对的规则,所以你可以混合起来,如果你觉得有必要。
使用return None
这表明该函数确实意味着返回一个值供以后使用,在这种情况下返回None
。 这个值可以在其他地方使用。 如果函数没有其他可能的返回值,则return None
。
在下面的例子中,如果给出的人是人类,我们会返回人的母亲。 如果它不是人类,我们会返回None
因为这个“人”没有母亲(假设它不是一个动物)。
def get_mother(person): if is_human(person): return person.mother else: return None
使用return
这与循环中的break
相同。 返回值并不重要,你只想退出整个函数。 这在某些地方是非常有用的,即使你经常不需要它。
我们有15名囚犯,我们知道其中一人有一把刀。 我们循着每个囚犯一个接一个地检查他们是否有刀。 如果我们用刀打人,我们可以退出function,因为我们知道,只有一把刀,没有理由检查囚犯的其余部分。 如果我们没有用刀find这个囚犯,我们就提醒一下。 这可以用许多不同的方法来完成,使用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
,但是这个值并不意味着被使用或被捕获。 它只是意味着function成功结束。 这与C ++或Java等语言中的void
函数的return
基本相同。
在下面的例子中,我们设置了人的母亲的名字,然后function成功完成后退出。
def set_mother(person, mother): if is_human(person): person.mother = mother
注意:你不应该做var = set_mother(my_person, my_mother)
,因为返回值不能被捕获。
是的,他们都是一样的。
我们可以查看解释的机器代码,以确认它们都在做同样的事情。
import dis def f1(): print "Hello World" return None def f2(): print "Hello World" return def f3(): print "Hello World" dis.dis(f1) 4 0 LOAD_CONST 1 ('Hello World') 3 PRINT_ITEM 4 PRINT_NEWLINE 5 5 LOAD_CONST 0 (None) 8 RETURN_VALUE dis.dis(f2) 9 0 LOAD_CONST 1 ('Hello World') 3 PRINT_ITEM 4 PRINT_NEWLINE 10 5 LOAD_CONST 0 (None) 8 RETURN_VALUE dis.dis(f3) 14 0 LOAD_CONST 1 ('Hello World') 3 PRINT_ITEM 4 PRINT_NEWLINE 5 LOAD_CONST 0 (None) 8 RETURN_VALUE
他们每个返回相同的单身人士None
– 没有function差异。
我认为,除非你需要早日退出函数(在这种情况下,一个普通的return
更常见),否则返回非“ None
东西是合理的。 这也是有道理的,似乎是写作return None
惯例,当它在一个函数,有另一个path返回非None
东西。 写入return None
显式是一个可视的提示给读者,有另一个分支返回一些更有趣的东西(调用代码可能需要处理这两种types的返回值)。
通常在Python中,返回None
的函数就像C中的void
函数一样使用 – 它们的目的通常是对input参数进行操作(除非使用全局数据( 颤抖 ))。 返回None
通常会更明确地表明参数是变异的。 这使得它更清楚一点,为什么从“语言惯例”的观点来看,把return
声明放开是有道理的。
也就是说,如果你在一个已经有了预先约定的代码库中工作,那么我肯定会效仿这个代码来保持统一。