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

beo*_*ver 18 python function

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

def foo(foo_input):
    if 0 <= foo_input <= 100:
        return f_input
Run Code Online (Sandbox Code Playgroud)

如果,则返回none foo_input is > 100.但它真的"不"会返回任何东西吗?或者功能总是必须返回一些东西?

Nob*_*ody 25

函数总是返回一些东西(至少None,在执行期间没有达到return语句并且到达函数结束时).

另一种情况是它们被异常中断.在这种情况下,异常处理将"在堆栈上占主导地位",你将返回到适当的except或得到一些讨厌的错误:)

关于你的问题,我必须说有两种可能性:要么有东西可以归还,要么你没有.

  • 如果你有东西可以返回,那么这样做,如果没有,那么不要.
  • 如果你依赖某些类型的返回但是你不能返回任何有意义的类型,那么None就会告诉调用者这是这种情况(没有更好的方法告诉调用者返回"nothing"然后None,所以检查它,你会没事的)


Ign*_*ams 15

否.如果return在函数结束之前未到达语句,None则返回隐式.


Bil*_*ljk 6

如果未达到return语句,则函数返回None.

def set_x():
    x = 2
Run Code Online (Sandbox Code Playgroud)


ste*_*eha 5

我不确定你真正想做什么。以下是您可能会喜欢的一些内容:

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]"
Run Code Online (Sandbox Code Playgroud)

等等,你说的是“过滤器”。您是否正在过滤一系列值并且只想提取符合条件的值?这在 Python 中很简单:

def foo_check(x):
    return 0 <= x <= 100

filtered_list = [x for x in unfiltered_sequence if foo_check(x)]
Run Code Online (Sandbox Code Playgroud)

你说“链接函数”。如果我们谈论过滤序列,这又很容易:

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)
Run Code Online (Sandbox Code Playgroud)

编辑:这是对 Python 中的迭代器和生成器的很好的介绍。 http://www.learningpython.com/2009/02/23/iterators-iterables-and-generators-oh-my/