在python中是否可以不从函数返回任何内容?

在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语句且到达函数末尾时) 另一种情况是它们被异常中断。 在这种情况下,异常处理将“支配堆栈”,您将返回到相应的,但除外,或者出现一些严重错误:) 关于你的问题,我必须说有两种可能性: 要

使用一个简单的过滤器,根据0-100范围测试输入

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