使用一个简单的过滤器来测试0-100范围内的输入。
def foo(foo_input):
if 0 <= foo_input <= 100:
return f_input
如果foo_input is > 100
,则返回none。但它真的“不”会返回任何东西吗?或者功能总是必须返回一些东西?
答案 0 :(得分:21)
当在执行期间没有达到return语句并且到达函数结束时,函数总是返回一些东西(至少None
。)
另一种情况是他们被例外打断。
在这种情况下,异常处理将“占据堆栈”并且您将返回到相应的except
或者得到一些令人讨厌的错误:)
关于你的问题我必须说有两种可能性: 要么你有东西可以归还,要么你没有。
None
会告诉来电者情况属实(
没有更好的方法告诉来电者None
然后返回“无”,所以检查一下,你会没事的。)答案 1 :(得分:14)
没有。如果在函数结束之前未达到return
语句,则返回隐式None
。
答案 2 :(得分:6)
如果未达到return语句,则函数返回None
。
def set_x():
x = 2
答案 3 :(得分:3)
我不确定你到底想要做什么。以下是您可能会喜欢的一些事项:
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]"
等等,你说“过滤”。您是否过滤了一系列值,而您只想提取符合条件的值?这在Python中很简单:
def foo_check(x):
return 0 <= x <= 100
filtered_list = [x for x in unfiltered_sequence if foo_check(x)]
你说“链接功能”。如果我们谈论过滤序列,那么这很容易:
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)
编辑:这是对Python中迭代器和生成器的一个很好的介绍。 http://www.learningpython.com/2009/02/23/iterators-iterables-and-generators-oh-my/
答案 4 :(得分:0)
答案 5 :(得分:0)
我有点像隐式rootfs_update_timestamp
,但pylint将其标记为不良样式,警告:
函数中的所有return语句都应返回 表达,或者都不表达 should.pylint(不一致的退货声明)
因此
return None
即使功能上相同,也可能是更好的样式。
更多信息可用here,其中Pylint更改日志指出:
添加了新的Python检查器以警告 不一致的退货陈述。函数或方法具有 如果返回显式和返回值不一致的返回语句 隐式值...
根据PEP8,如果任何return语句返回一个表达式,则任何 不返回任何值的return语句应明确声明 这作为return None,并且明确的return语句应该是 在功能末尾显示(如果可以访问)。