不仅将布尔结果作为 PYTHON 中函数的输入,它本身还进行逻辑运算
Take logic operation it self not only the boolean result as a input of function in PYTHON
在 SqlAlchemy 中,我看到了这种类型的表达式:
s = select([users, addresses]).where(users.c.id == addresses.c.user_id)
看起来它不仅将布尔结果作为输入,还接受了它自己的逻辑运算。例如,如果我想构建一个像这样的函数:
def myfunc(argument): # I know its not right, I just want to show what I am suppose to do
print(argument[key], argument[operation], argument[value])
myfunc(myage >= 10)
>> I want to get output like "myage", ">=" (or something similar), 10
有人知道怎么做吗?
谢谢
正如 指出的那样,这通过将比较运算符重载为 return 除了布尔值之外的其他东西来实现。这是一个小例子:
class col(object):
def __init__(self, name):
self.name = name
def __lt__(self, other):
return [self.name, '<', other]
def myfunc(arg):
print(arg)
myage = col('myage')
myfunc(myage < 10)
导致
['myage', '<', 10]
重点是函数(myfunc
)只"sees"参数表达式的求值结果。但是您可以通过重写 class.
的 __lt__
(小于)方法来控制(例如)评估“<”的方式
要使这项工作普遍适用,您必须覆盖更多 special methods。
在 SqlAlchemy 中,我看到了这种类型的表达式:
s = select([users, addresses]).where(users.c.id == addresses.c.user_id)
看起来它不仅将布尔结果作为输入,还接受了它自己的逻辑运算。例如,如果我想构建一个像这样的函数:
def myfunc(argument): # I know its not right, I just want to show what I am suppose to do
print(argument[key], argument[operation], argument[value])
myfunc(myage >= 10)
>> I want to get output like "myage", ">=" (or something similar), 10
有人知道怎么做吗?
谢谢
正如
class col(object):
def __init__(self, name):
self.name = name
def __lt__(self, other):
return [self.name, '<', other]
def myfunc(arg):
print(arg)
myage = col('myage')
myfunc(myage < 10)
导致
['myage', '<', 10]
重点是函数(myfunc
)只"sees"参数表达式的求值结果。但是您可以通过重写 class.
__lt__
(小于)方法来控制(例如)评估“<”的方式
要使这项工作普遍适用,您必须覆盖更多 special methods。