2024-04-24 16:12:31 发布
网友
考虑三个功能:
def my_func1(): print "Hello World" return None def my_func2(): print "Hello World" return def my_func3(): print "Hello World"
它们似乎都没有返回。这些函数的返回值的行为有什么不同吗?有没有什么理由更喜欢其中一个?
是的,他们都一样。
我们可以检查解释过的机器代码,以确认它们都在做完全相同的事情。
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,就这样。然而,所有这些都有一个时间和地点。 下面的说明基本上是如何使用不同的方法(或者至少是如何教我应该使用它们),但它们不是绝对的规则,所以如果你觉得有必要的话,你可以把它们混在一起。
None
return None
这说明该函数确实要返回一个值以供以后使用,在本例中,它返回None。这个值None可以在其他地方使用。^如果函数中没有其他可能的返回值,则{}永远不会使用。
在下面的示例中,如果给定的person是人,则返回person的mother。如果它不是人类,我们返回None,因为person没有mother(假设它不是动物或其他什么)。
person
mother
def get_mother(person): if is_human(person): return person.mother else: return None
return
这与循环中使用break的原因相同。返回值无关紧要,您只想退出整个函数。它在某些地方非常有用,尽管你并不经常需要它。
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()
这也将返回None,但该值不是用来或捕获的。这仅仅意味着函数成功结束。在C++、java等语言中,^ ^ }基本上与^ {CD12}函数相同。
在下面的例子中,我们设置了person的母亲的名字,然后函数在成功完成后退出。
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)
它们各自返回相同的单体None——没有函数差异。
我认为,省略return语句是一种合理的习惯用法,除非您需要它提前脱离函数(在这种情况下,更常见的是一个空的return),或者返回None以外的内容。当它位于另一个路径而不是返回None的函数中时,编写return None也很有意义,而且似乎很习惯。显式地写出return None是向读者发出的一个视觉提示,即有另一个分支返回更有趣的内容(调用代码可能需要处理这两种类型的返回值)。
通常在Python中,返回None的函数就像C中的void函数一样使用——它们的目的通常是对输入参数进行操作(除非您使用的是全局数据(shubders)。返回None通常会使参数发生变异变得更加明确。这就更清楚地说明了为什么从“语言约定”的角度省略return语句是有意义的。
void
也就是说,如果你在一个已经有了关于这些事情的预设约定的代码库中工作,我肯定会跟进以帮助代码库保持一致。。。
是的,他们都一样。
我们可以检查解释过的机器代码,以确认它们都在做完全相同的事情。
在实际行为上,没有区别。它们都会返回
None
,就这样。然而,所有这些都有一个时间和地点。 下面的说明基本上是如何使用不同的方法(或者至少是如何教我应该使用它们),但它们不是绝对的规则,所以如果你觉得有必要的话,你可以把它们混在一起。使用
return None
这说明该函数确实要返回一个值以供以后使用,在本例中,它返回}永远不会使用。
None
。这个值None
可以在其他地方使用。^如果函数中没有其他可能的返回值,则{在下面的示例中,如果给定的
person
是人,则返回person
的mother
。如果它不是人类,我们返回None
,因为person
没有mother
(假设它不是动物或其他什么)。使用
return
这与循环中使用
break
的原因相同。返回值无关紧要,您只想退出整个函数。它在某些地方非常有用,尽管你并不经常需要它。我们有15个
prisoners
我们知道其中一个有一把刀。我们逐一循环检查每个prisoner
是否有刀。如果我们用刀子打人,我们可以退出函数,因为我们知道只有一把刀子,没有理由检查prisoners
的其余部分。如果我们用刀找不到prisoner
,我们会发出警报。这可以通过许多不同的方法来实现,使用return
可能不是最好的方法,但它只是一个示例,演示如何使用return
退出函数。注意:您不应该这样做
var = find_prisoner_with_knife()
,因为返回值不应该被捕获。完全不用
return
这也将返回 }基本上与^ {CD12}函数相同。
None
,但该值不是用来或捕获的。这仅仅意味着函数成功结束。在C++、java等语言中,^ ^在下面的例子中,我们设置了person的母亲的名字,然后函数在成功完成后退出。
注意:您不应该这样做
var = set_mother(my_person, my_mother)
,因为返回值不应该被捕获。它们各自返回相同的单体
None
——没有函数差异。我认为,省略
return
语句是一种合理的习惯用法,除非您需要它提前脱离函数(在这种情况下,更常见的是一个空的return
),或者返回None
以外的内容。当它位于另一个路径而不是返回None
的函数中时,编写return None
也很有意义,而且似乎很习惯。显式地写出return None
是向读者发出的一个视觉提示,即有另一个分支返回更有趣的内容(调用代码可能需要处理这两种类型的返回值)。通常在Python中,返回
None
的函数就像C中的void
函数一样使用——它们的目的通常是对输入参数进行操作(除非您使用的是全局数据(shubders)。返回None
通常会使参数发生变异变得更加明确。这就更清楚地说明了为什么从“语言约定”的角度省略return
语句是有意义的。也就是说,如果你在一个已经有了关于这些事情的预设约定的代码库中工作,我肯定会跟进以帮助代码库保持一致。。。
相关问题 更多 >
编程相关推荐