我不太清楚我在这里的意思,所以请容忍我。。
在SQLAlchemy中,在某些情况下,我似乎应该将表达式传递给^{
>>> def someFunc(value):
... print(value)
>>> someFunc(5 == 5)
True
如何从函数内部获取传递给==
的值?
我在努力实现这样的目标
>>> def magic(left, op, right):
... print(left+" "+op+" "+right)
>>> magic(5 == 5)
5 == 5
如果其中一个参数是对象呢?
不能。表达式
5 == 5
被求值,然后结果才传递给someFunc。不管表达式是什么,函数只得到True
(确切地说,是True
对象)。编辑:关于您的编辑,this question有点接近。
编辑2:可以将表达式作为字符串传递并使用eval,如下所示:
不知道这对你有没有帮助。请记住
eval
是一个强大的工具,因此将任意(甚至可能是用户生成的)输入传递给它是危险的。如果将“op”设为函数,则可以实现示例:
这比传递字符串更像是Python。这就是像^{} 这样的函数的工作原理。
那些带有
filter()
的SQLAlchemy示例令人费解。我不知道SQLAlchemy的内部原理,但我猜在一个类似query.filter(User.name == 'ed')
的例子中,User.name
是一个特定于SQLAlchemy的类型,有一个__eq()
函数的奇怪实现,它为filter()
函数生成SQL,而不是进行比较。Ie:他们制作了一些特殊的类,可以让您键入发出SQL代码的Python表达式。这是一种不寻常的技术,除非构建一种连接两种语言的东西,比如ORM,否则我会避免这种技术。纳尔逊解决方案的一个更像Python的变体是使用标准库中operator模块中的运算符函数;不需要创建自己的lambdas。
相关问题 更多 >
编程相关推荐