gpt4 book ai didi

python - 将逻辑运算符(和部分表达式)传递到函数参数 Python

转载 作者:太空宇宙 更新时间:2023-11-03 12:58:46 26 4
gpt4 key购买 nike

在 SQLAlchemy 中,可以这样做:

mytable.query.filter(mytable.some_col < 5).all()

我怎样才能实现类似的东西?我希望开发人员用户能够将逻辑操作传递给函数。这是一个例子:

class row_obj:
def __init__(self, val1, val2, val3, val4):
self.val1 = val1
self.val2 = val2
self.val3 = val3
self.val4 = val4
def __repr__(self):
return str(self.val1)+","+str(self.val2)+","+str(self.val3)+","+str(self.val4)

class table_obj:
""" takes a list of row_objs """
def __init__(self, rows):
self.rows = rows #rows is a list of row_obj
def __repr__(self):
return "\n".join([str(row) for row in self.rows])
def filter(self, condition):
# I would like to return all rows which meet the condition here
return table_obj([row for row in self.rows if condition])

a = table_obj([ row_obj(1,2,3,4),
row_obj(5,6,7,8),
row_obj(2,4,6,8),
row_obj(5,2,7,4)])

print a.filter(row_obj.val3 == 7)
#should return
#5,6,7,8
#5,2,7,4

最佳答案

正如您提到的,SQLAlchemy 允许这样的表达式:

mytable.query.filter(mytable.some_col < 5).all()

这是可能的,因为 mytable.some_col 为每个返回一些其他对象的逻辑运算符实现了魔术方法(在本例中为 __lt__)。所以运算符并没有真正传入。在我的应用程序中,它定义了一个 User 对象,这可以通过以下方式看到:

>>> User.first_name == 'John'
<sqlalchemy.sql.elements.BinaryExpression object at 0x10f0991d0>

你可以做同样的事情来达到同样的效果。

关于python - 将逻辑运算符(和部分表达式)传递到函数参数 Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30061085/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com