重复一个函数:检查返回结果和'not None`

时间:2017-01-20 00:18:06

标签: python python-2.7

所以我'使用重复功能重复调用一次函数n次:

def repeat_function(sleep_time, times, expected_result, function, *args):
    for i in range(times):
        time_to_sleep = sleep_time/times
        sleep(time_to_sleep)
        result = function(*args)
        if result == expected_result:
            break
    return result

这可以作为polling机制,在收到expected_result之前不断调用函数。

现在我需要使用相同的函数(如果需要修改)来检查函数的结果是否也是not None

类似的东西:

repeat_function(4, 4, not None, func)

问题显然是if result == expected_result,我无法将not None用作expected_result 将重复函数修改为if result == expected_result or result is expected_result似乎也不符合逻辑(可能有副作用)。

有没有办法使用 not None运算符检查方法的返回是否为==

对于如何解决问题的任何建议表示赞赏。

3 个答案:

答案 0 :(得分:3)

传递一个检查预期结果的函数:

def repeat_function(sleep_time, times, is_expected_result, function, *args):
    for i in range(times):
        time_to_sleep = sleep_time/times
        sleep(time_to_sleep)
        result = function(*args)
        if is_expected_result(result):
            break
    return result

这样称呼:

repeat_function(4, 4, lambda x: x != None, func)
repeat_function(4, 4, lambda x: x == "expected_result", func)
repeat_function(4, 4, lambda x: x == 1234, func)

答案 1 :(得分:0)

好的,这是另一个去吧。我的解决方案是在你的函数中定义一个类:

var myBtn = UIButton()
myBtn.isEnabled = true

这是class bool_check: def __init__(self, value): self.value = value def __eq__(self, value): if self.value or self.value == value: return True else: return False 对象与另一个值相比会返回的内容。这绝不包括所有实例,但具体涵盖了您的问题。

bool_check

您看到的是,当您比较>>> t = bool_check(2) >>> t == 2 True >>> f = bool_check(None) >>> f == True False >>> f = bool_check(False) >>> f == True False >>> f == False True 时,您会得到bool_check(None) == True,这就是您想要的。当您比较False时,您会得到bool_check(2) == True,这也是您想要的。

以下是如何使用的:

True

如果您将def repeat_function(sleep_time, times, expected_result, function, *args): for i in range(times): time_to_sleep = sleep_time/times sleep(time_to_sleep) result = function(*args) if bool_check(result) == expected_result: break return result 传递给True,那么如果expected_result返回function(*args),则检查会解析为None并且不会中断。如果它返回了某些内容,那么False类的__eq__方法将返回bool_check

这将满足您的需求(我认为),但不会涵盖所有可能性。

答案 2 :(得分:0)

您可以传递python函数或使用lambda表达式,下面是使用后者的示例:

def repeat_function(sleep_time, times, eval_result, function, *args):
    for i in range(times):
        time_to_sleep = sleep_time/times
        sleep(time_to_sleep)
        result = function(*args)
        if eval_result(result):
            break
    return result

eval_result = lambda result: result is not None
eval_result = lambda result: result == 4