如何在Python中防止函数在return语句后继续执行
我正在尝试创建一个函数,用来检查一个值是否有效。这个函数会放在另一个函数里,用来判断后面的代码是否继续执行。我的想法大致是这样的:
def test(value):
if value == 5:
return "Don't Continue"
def go(number):
test(number)
print('Here')
return 'Yes'
print('Now here')
go(5) # Returns "Don't Continue", 'Here'
为什么当test
函数返回一个值时,这个函数没有停止执行呢?有没有办法在不使用多行的if和else的情况下,创建这种类型的检查?
相关文章:
- 暂无相关问题
3 个回答
0
return
的意思是从当前的函数返回。所以如果你调用另一个返回值的方法,并不会让调用它的方法也返回。
你可以在 test
方法里抛出一个异常。这样就会停止执行。
或者你可以把 go
改成这样:
if test(number):
return
这样的话,它会根据调用 test
的结果来决定是否继续执行这个方法。
1
如果你的程序可能有很多不同的路径,而你又想避免写很多个if
语句,这里有一个方法可以尝试:
def test(value):
return value == 5
def passed():
return 'Passed'
def failed():
return 'Failed'
def router(value):
routes = {
True: passed,
False: failed,
}
result = test(value)
return routes[result]
def main(value):
route = router(value)
return route()
if __name__ == '__main__':
print(main(5))
print(main(4))
4
为什么当测试函数返回一个值时,函数不停止执行呢?
因为返回语句只对它所在的函数有效,而不影响调用这个函数的其他函数。
你想要的效果大概是这样的:
def test(value):
if value == 5:
return False
return True
# these 3 lines can be shortened to: return value == 5
def go(number):
if test(number): # test(value) returned True
print('Test succeeded')
return
print('Test failed')
go(5) # will print 'Test failed'
有没有办法在不使用多行if和else的情况下创建这种类型的测试?
如果你是想检查多个值,可以这样做:
def test(value):
# will return False if value is either 3 5 or 7
if value in [3, 5, 7]:
return False
return True
不过逻辑有点问题。更好的做法是,如果测试通过就返回True,如果没有通过就返回False。