如果其他方法成功用一行返回方法
问题描述:
我很难找到适合此问题的标题,所以请原谅我。如果其他方法成功用一行返回方法
在我班上的很多方法是这样的:
def one_of_many():
# code to determine `somethings`
for something in somethings:
if self.try_something(something):
return
# code to determine `something_else`
if self.try_something(something_else):
return
…
其中self.try_something
回报True
或False
。
有喜欢的东西来表达这样一种方式:
def one_of_many():
# code to determine `somethings`
for something in somethings:
self.try_something_and_return(something) # this will return from `one_of_many` on success
# code to determine `something_else`
self.try_something_and_return(something_else) # this will return from `one_of_many` on success
…
我用的装饰和背景的经理摆弄要做到这一点,但没有成功,但我仍然认为,“必须有一个更好的办法! ”。
答
if self.try_something(a_thing) or self.try_something(another_thing):
return
但是你要么需要知道你thing
的事先..或者与函数调用中的表达式计算它们。
答
它看起来像itertools
救援:
当你说的方法,我想这是一个类的方法,这样的代码看起来是这样的:
import itertools
class Thing:
def one_of_many(self):
# code to determine `somethings`
for something in itertools.chain(somethings,[something_else]):
if self.try_something(something):
return
希望something_else
是不是太难以计算。
答
希望这MCVE模仿你的问题:
a = [1,2,3]
b = 3
def f(thing):
print(thing)
return False
class F:
pass
self = F()
self.trysomething = f
地图的方法把所有的东西,并采取行动,如果任何回报True
if any(map(self.trysomething, a + [b])):
print('yeay')
else:
print('nay')
根据什么a
和b
实际上,你可能有玩弄连接或拼合/添加或连锁的方式,如提到的@quamrana。
通过将'return'移动到同一行上,你可以将'self.try_something(something):return'这样的东西放到一行上,但它在大多数情况下并不能真正帮助可读性。尝试拥有代表调用者返回的'try_something_and_return'方法会更糟。 – user2357112
@Davit我希望它只是返回(如在第一个代码片段中)。 – balast