【问题标题】:Translating a callable test into a collection membership test将可调用测试转换为集合成员资格测试
【发布时间】:2012-11-28 15:40:41
【问题描述】:

什么是最优雅和最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,以及它是否会更好使用它或替代可调用的type kwarg。

【问题讨论】:

    标签: python function collections coding-style argparse


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2011-07-11
      • 2020-05-05
      • 2012-03-02
      • 2021-10-10
      • 1970-01-01
      • 2015-09-12
      • 2011-07-10
      • 2018-08-11
      • 1970-01-01
      相关资源
      最近更新 更多