栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python操作符也是一种函数

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python操作符也是一种函数

Python操作符也是一种函数

最近在学习SQLAlchemy,发现它的sql查询的filter是这么写的:

rows = session.query(User).filter(User.name=='Tom').all()

其中filter把User.name=='Tom'这个表达式当成参数我是没想到的,表达式的返回值不是True或False吗?各种百度谷歌之后我找到这么一个答案:

python中的操作符也是一种函数

很神奇对不对,相信下面一段代码可以解释这个答案

class A(object):
    def __eq__(self, other):
        print("equal",other)
    def __getitem__(self, item):
        print("getitem",item)
if __name__ == '__main__':
    A.__eq__(A, 'B')               #equal B
    A.__getitem__(A, 'B')          #getitem B
    a = A()
    a == 'b'                       #equal b
    a['b']                         #getitem b

这里的==和[]平时分别是用于相同判断和字典取值的,在这里对__eq__()和__getitem__()重新定义后,这两个符号(函数)的功能也就发生了变化。
分析至此,我们上面提到的sqlalchemy中的filter功能也就不难理解了。那么在我看来,其filter功能大致和以下代码中的filter函数功能类似:

class Field(object):
    def __init__(self,key):
        self.key = key
    def __eq__(self, other):
        return '%s = %r'%(self.key, other)
    def __lt__(self, other):
        return '%s < %r'%(self.key,other)
class User(object):
    name=Field('name')
    age=Field('age')
def filter(str):
    return querySql(str)
def querySql(str):
    res = str #看成str处理后的结果
    return res
if __name__ == "__main__":
    print(filter(User.name == 'zhang'))
    print(filter(User.age < 20))

其中User用于定义数据模型,Field为字段模型,querySql为数据库查询函数。
以上,filter函数就可以经由上面传入的表达式来达到查询效果。
上述代码输出如下:

name = 'zhang'
age < 20
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/991425.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号