0

我很难为这个问题找到合适的标题,所以请原谅我。

我班上的许多方法如下所示:

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返回TrueFalse

有没有办法用类似的东西来表达这一点:

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
    …

我一直在摆弄装饰器和上下文管理器来实现这一点,但没有成功,但我仍然相信“一定有更好的方法!”。

4

3 回答 3

1

希望这个 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')

正如@quamrana 提到的,根据具体情况ab实际情况,您可能不得不尝试连接或展平/添加或链接的方法。

于 2017-10-12T21:50:13.520 回答
1

它看起来像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不会太难计算。

于 2017-10-12T20:27:51.327 回答
0
if self.try_something(a_thing) or self.try_something(another_thing):
    return

但是你要么需要thing事先知道你的 .. 要么用函数调用中的表达式计算它们。

于 2017-10-12T20:14:44.897 回答