使用一个简单的过滤器,测试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,所以检查它,你会没事的)我不确定你真正想做什么。以下是您可能会喜欢的一些内容:
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/