Ian*_*n P 17 python arguments function operators
我不太清楚我的意思,所以请耐心等待..
在sqlalchemy中,似乎我应该传递一个表达式?到过滤器()在某些情况下.当我尝试自己实现这样的东西时,我最终得到:
>>> def someFunc(value):
... print(value)
>>> someFunc(5 == 5)
True
Run Code Online (Sandbox Code Playgroud)
如何从函数内部获取传递给==的值?
编辑:我正在努力实现这样的目标
>>> def magic(left, op, right):
... print(left+" "+op+" "+right)
>>> magic(5 == 5)
5 == 5
Run Code Online (Sandbox Code Playgroud)
编辑:如果其中一个参数是一个对象怎么办?
Nel*_*son 26
如果你将"op"作为一个函数,你可以实现你的例子:
>>> def magic(left, op, right):
... return op(left, right)
...
>>> magic(5, (lambda a, b: a == b), 5)
True
>>> magic(5, (lambda a, b: a == b), 4)
False
Run Code Online (Sandbox Code Playgroud)
这比传递一个字符串更像Pythonic.这就是sort()这样的函数的工作方式.
那些带有filter()的SQLAlchemy示例令人费解.我不知道关于SQLAlchemy的内部结构,但我猜测像query.filter(User.name =='ed')这样的例子是User.name是一个SQLAlchemy特有的类型,有一个奇怪的__eq()函数的实现,它为filter()函数生成SQL而不是进行比较.即:他们创建了特殊的类,允许您键入发出SQL代码的Python表达式.这是一种不寻常的技术,我除了建立一些像ORM这样的桥接两种语言之外的东西.
Nelson解决方案的更加pythonic变体是使用标准库中的操作员模块的操作员功能; 没有必要创建自己的lambdas.
>>> from operator import eq
>>> def magic(left, op, right):
... return op(left, right)
...
>>> magic(5, eq, 5)
True
Run Code Online (Sandbox Code Playgroud)