model.query.filter(model.c.filed1 > model.c.cfiled2).all()
model.c.field1 > model.c.field2 这不是个比较语句么?不是会把结果当成参数传进去么?
1
Morriaty 2017 年 10 月 12 日
def __gt__(self, other):
if self.data > other.data: return "condition_string_one" else: return "two" |
2
cevincheung OP |
3
guoziyan 2017 年 10 月 12 日
scala 会认为是 lambda python 也是这么处理的吗
|
4
jakes 2017 年 10 月 12 日 via iPhone
操作符重载
|
5
xmcp 2017 年 10 月 12 日 via iPhone
这应该是这个库的一个语法糖。让__lt__返回一个奇怪的对象传到 filter 里。
|
6
jyf 2017 年 10 月 12 日
python 的 orm 库里好多这种 都是生成器把戏 这个会重载生成器 然后分析你原始的输入 替换成相应的 sql
|
7
raiz 2017 年 10 月 12 日
应该是重载运算符,返回一个 callable 对象,filter 函数里回调这个方法吧
|
8
northisland 2017 年 10 月 12 日
一直觉得 numpy 是个比较神的库
竟然有 mat_a[...] = mat_b[:, 1, :, :] 这种操作。谁知道这种运算符是咋搞出来的?没时间查源码。 |
9
ToughGuy 2017 年 10 月 12 日
这不就登录传一个 bool 值进去么, 有神码奇怪的。
|
10
ToughGuy 2017 年 10 月 12 日
In [1]: x = lambda x: print(x)
In [2]: x(1>2) False In [3]: x(1>0) True |
11
ToughGuy 2017 年 10 月 12 日
额 上面例子匿名函数变量名和参数一样, 看起来有点奇怪。
In [1]: x = lambda y: print(y) In [2]: x(1>2) False In [3]: x(1>0) True In [4]: print(1>2) False In [5]: print(1>0) True |
13
linuxchild 2017 年 10 月 12 日
重构了吧 - -
|
14
CSM 2017 年 10 月 12 日 @northisland Python 里的 `...` 是 `ellipsis` 的实例,又名 `Ellipsis`:
>>> ... Ellipsis >>> ... is Ellipsis True >>> type(Ellipsis) <class 'ellipsis'> 而 `mat_b[:, 1, :, :] ` 就是个多维切片嘛。。。 |
15
yonka 2017 年 10 月 12 日
class Field:
def field_value(self, o): return getattr(o, field_name) # field_name 用 meta class 等机制得到 def __gt__(self, other): return lambda o: cmp(self.field_value(o), other.field_value(o)) |
16
weifding 2017 年 10 月 13 日
就是个匿名函数。
|
17
msg7086 2017 年 10 月 13 日
大致可以理解成 model.c.filed1.__gt__(model.c.cfiled2) 。
DSL 里比较常用的技巧,重载各种运算符然后返回各种构造器并且内部构建语法树。 |