python operator模块

2020-08-24  本文已影响0人  转身丶即天涯

前言

在python2中,有一个cmp函数用于对比两个对象,但是在python3中已经被舍弃,其功能集成到了operator模块。

例子

官方文档:https://docs.python.org/zh-cn/3.7/library/operator.html

import operator

# 1. int, equal
res = operator.eq(2, 2)

# 2. int, lt(小于)
res = operator.lt(1, 2)

# 3. int, le(小于等于)
res = operator.le(2, 2)

# 4. custom obj
class MyObj(object):
    def __init__(self, a):
        self.a = a


a1, a2 = MyObj(1), MyObj(1)
res = operator.eq(a1, a2)
print(id(a1), id(a2))       # 输出id不同
print(res)      # False


# 5. singleton obj
class Singleton(object):
    def __new__(cls, *args, **kwargs):
        if not hasattr(cls, "_instance"):
            cls._instance = super().__new__(Singleton)

        return cls._instance


s1, s2 = Singleton(), Singleton()
res = operator.eq(s1, s2)
print(id(s1), id(s2))       # 输出id相同,是同一对象
print(res)      # True

这里主要对自定义类进行测试,自定义类分为两种,一种是单例模式类产出的对象,另一种是非单例模式产出的对象。
单例对象,operator.eq永远返回True,因为eq是根据id来判断是否为同一对象的。
同理,非单例对象,operator.eq永远返回False。

上一篇下一篇

猜你喜欢

热点阅读