我正在定义一个函数,其中一个参数应该是比较运算符。
我尝试了不同版本的转换命令,例如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}}。
答案 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)
如果要同时将比较运算符及其值作为一个参数传递,则有几种选择:
使用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
two_greater_than = (2).__gt__
my_function(two_greater_than)
# True
使用lambda
(如jonrsharpe's comment)
two_greater_than = lambda x: 2 > x
my_function(two_greater_than)
# True
使用功能:
def two_greater_than(x):
return 2 > x
my_function(two_greater_than)
# True
将这些方法中的任何一种与几个参数一起应用到您的函数中应该是微不足道的。