在python中是否可以不从函数返回任何内容?
使用一个简单的过滤器,根据0-100范围测试输入在python中是否可以不从函数返回任何内容?,python,function,Python,Function,使用一个简单的过滤器,根据0-100范围测试输入 def foo(foo_input): if 0 <= foo_input <= 100: return f_input def foo(foo_输入): 如果0函数总是返回某些内容(至少None,在执行过程中未到达return语句且到达函数末尾时) 另一种情况是它们被异常中断。 在这种情况下,异常处理将“支配堆栈”,您将返回到相应的,但除外,或者出现一些严重错误:) 关于你的问题,我必须说有两种可能性: 要
def foo(foo_input):
if 0 <= foo_input <= 100:
return f_input
def foo(foo_输入):
如果0函数总是返回某些内容(至少None
,在执行过程中未到达return语句且到达函数末尾时)
另一种情况是它们被异常中断。
在这种情况下,异常处理将“支配堆栈”,您将返回到相应的,但除外,或者出现一些严重错误:)
关于你的问题,我必须说有两种可能性:
要么你有东西要还,要么你没有
- 如果你有东西要归还,那么就归还,如果没有,就不要归还
- 如果您依赖于返回的具有特定类型的内容,但无法返回此类型的任何有意义的内容,则
None
将告诉调用方情况就是这样(
没有更好的方法告诉调用者,None
返回“nothing”(无),因此检查一下就可以了)
否。如果在函数结束前未到达返回
语句,则返回隐式无
。如果未到达返回语句,函数返回无
def set_x():
x = 2
我不知道你到底想做什么。以下是一些您可能喜欢的东西:
def foo(foo_input, foo_default):
if 0 <= foo_input <= 100:
return f_input
else:
return foo_default
def foo(foo_input):
if 0 <= foo_input <= 100:
return f_input
raise ValueError, "foo_input was not in range [0, 100]"
def foo(foo_输入,foo_默认值):
如果0I有点像隐式返回None
,但将其标记为坏样式,警告:
函数中的所有return语句都应返回
表达,或者不表达
should.pylint(返回语句不一致)
因此,
def foo(foo_input):
if 0 <= foo_input <= 100:
return f_input
return None
def foo(foo_输入):
如果0为什么会困扰您?函数返回None
?链接函数,如果我必须为每个函数编写try:except子句(因为传递的是None),请使用969617:如果没有返回输出,会发生什么?如果是被跳过的执行,那么您可以使用If语句来检查无
,获得相同的功能-尽管如果得到的结果比没有更可能,捕获异常是一个更好的主意,因为Python遵循了请求原谅,非许可原则。我想知道我是否可以不使用if语句就可以逃脱:)好吧,记住异常会失效,所以如果您想捕获由于None
过程中的任何地方导致的错误,那么您可以简单地将整个块包装在TypeError
s的捕获中。显然,只需包装必要的段,但不需要大量相同的try。。。除了…
块,如果我过滤100秒左右就可以了?没有理由在那里使用函数,更清楚的是按照[x为x的顺序,如果0@steveha:当有内置的过滤器
函数时,为什么要使用列表理解?过滤列表=过滤器(foo\u过滤器,未过滤的序列)
@Lattyware:我会说另外一种。这也取决于读者对一种或另一种结构的使用方式。作为一个懒惰的程序员,我会说:它比较短:)@Nobody,启动Python 2.x,然后从>
提示符键入帮助(过滤器)
并阅读它所说的内容。它非常清楚地说,它将返回一个列表、一个元组或一个字符串。现在启动Python 3.x并做同样的事情;它非常清楚地说,它将返回一个迭代器。因此,也许你不明白它为什么要这样做,但我正在谈论它实际做的事情。我认为原因是历史性的:我认为filter()
是在添加迭代器之前引入的。当然,在Python 2.x中,您可以使用itertools.ifilter()
或编写自己的函数来循环和调用yield
。
def foo_filter(seq):
for x in seq:
if 0 <= x <= 100:
yield x
def other_filter(seq):
for x in seq:
if meets_criterion(x):
yield x
def do_the_task(seq):
for x in other_filter(foo_filter(seq)):
do_something(x)
def foo(foo_input):
if 0 <= foo_input <= 100:
return f_input
return None