将可调用测试转换为集合成员资格测试

时间:2012-12-11 05:39:29

标签: python function collections coding-style argparse

什么是最优雅和pythonic的方式来进行测试,如:

def is_even(n):
  return n % 2 == 0

进入逻辑等效(但语法不同)的测试,例如:

if n in even_numbers:
  # assert is_even(n)
  # ...

我可以想到创建对象even_numbers的几种方法,但我很想知道是否有一些很好的方法可能会被忽略。


注意:我知道这可能听起来像是一个XY问题,所以我的用例是关于choices kwarg到argparse.ArgumentParser.add_argument,是否是会更好地使用它或者使用munge可调用的type kwarg。

1 个答案:

答案 0 :(得分:1)

我会将even_numbers转换为容器类型:

class EvenNumbers(object):

    # Add other container methods as needed

    def __contains__(self, value):
        return value % 2 == 0

even_numbers = EvenNumbers()

然后,

>>> 3 in even_numbers
False
>>> 4 in even_numbers
True