将带有值的比较运算符传递给函数

时间:2019-07-09 12:14:31

标签: python function arguments operators comparison-operators

我正在定义一个函数,其中一个参数应该是比较运算符。

我尝试了不同版本的转换命令,例如float和input

我正在尝试的代码:

def factor_test(factor1, factor2, criteria1, text, criteria2):
    bool_mask1 = rnt2[factor1].str.contains(criteria1,na=False)
    bool_mask2 = rnt2[factor2] criteria2
    # Returns values that are TRUE i.e. an error, not an Boolean dataframe but actual values
    test_name = rnt2[(bool_mask1) & (bool_mask2)] 

criteria2应该为> 0.75

bool_mask2 = rnt2[factor2] > 0.75

在我可以同时在>0.75中放置一个参数的情况下,首选参数应该使用约15次,分别是!===和{ {1}}。

2 个答案:

答案 0 :(得分:0)

使用operator模块:

def factor_test(factor1, factor2, criteria1, text, criteria2, op):
    bool_mask1 = rnt2[factor1].str.contains(criteria1,na=False)
    bool_mask2 = op(rnt2[factor2], criteria2)
    test_name = rnt2[(bool_mask1) & (bool_mask2)] 

然后与其他接线员通话:

import operator

factor_test(factor1, factor2, criteria1, text, criteria2, operator.le)  # <=
factor_test(factor1, factor2, criteria1, text, criteria2, operator.eq)  # ==
# etc

答案 1 :(得分:0)

如果要同时将比较运算符及其值作为一个参数传递,则有几种选择:

  1. 使用operator函数和functools.partial

    import operator
    from functools import partial
    
    # simple example function
    def my_function(condition):
        return condition(1)
    
    two_greater_than = partial(operator.gt, 2)
    my_function(two_greater_than)
    # True
    
  2. 使用dunder methods

    two_greater_than = (2).__gt__
    my_function(two_greater_than)
    # True
    
  3. 使用lambda (如jonrsharpe's comment

    two_greater_than = lambda x: 2 > x
    my_function(two_greater_than)
    # True
    
  4. 使用功能:

    def two_greater_than(x):
        return 2 > x
    
    my_function(two_greater_than)
    # True
    

将这些方法中的任何一种与几个参数一起应用到您的函数中应该是微不足道的。