"""Operator InterfaceThis module exports a set of functions corresponding to the intrinsicoperators of Python. For example, operator.add(x, y) is equivalentto the expression x+y. The function names are those used for specialmethods; variants without leading and trailing '__' are also providedfor convenience.This is the pure Python implementation of the module."""__all__ = ['abs', 'add', 'and_', 'attrgetter', 'concat', 'contains', 'countOf','delitem', 'eq', 'floordiv', 'ge', 'getitem', 'gt', 'iadd', 'iand','iconcat', 'ifloordiv', 'ilshift', 'imatmul', 'imod', 'imul','index', 'indexOf', 'inv', 'invert', 'ior', 'ipow', 'irshift','is_', 'is_not', 'isub', 'itemgetter', 'itruediv', 'ixor', 'le','length_hint', 'lshift', 'lt', 'matmul', 'methodcaller', 'mod','mul', 'ne', 'neg', 'not_', 'or_', 'pos', 'pow', 'rshift','setitem', 'sub', 'truediv', 'truth', 'xor']from builtins import abs as _abs# Comparison Operations *******************************************************#def lt(a, b):"Same as a < b."return a < bdef le(a, b):"Same as a <= b."return a <= bdef eq(a, b):"Same as a == b."return a == bdef ne(a, b):"Same as a != b."return a != bdef ge(a, b):"Same as a >= b."return a >= bdef gt(a, b):"Same as a > b."return a > b# Logical Operations **********************************************************#def not_(a):"Same as not a."return not adef truth(a):"Return True if a is true, False otherwise."return True if a else Falsedef is_(a, b):"Same as a is b."return a is bdef is_not(a, b):"Same as a is not b."return a is not b# Mathematical/Bitwise Operations *********************************************#def abs(a):"Same as abs(a)."return _abs(a)def add(a, b):"Same as a + b."return a + bdef and_(a, b):"Same as a & b."return a & bdef floordiv(a, b):"Same as a // b."return a // bdef index(a):"Same as a.__index__()."return a.__index__()def inv(a):"Same as ~a."return ~ainvert = invdef lshift(a, b):"Same as a << b."return a << bdef mod(a, b):"Same as a % b."return a % bdef mul(a, b):"Same as a * b."return a * bdef matmul(a, b):"Same as a @ b."return a @ bdef neg(a):"Same as -a."return -adef or_(a, b):"Same as a | b."return a | bdef pos(a):"Same as +a."return +adef pow(a, b):"Same as a ** b."return a ** bdef rshift(a, b):"Same as a >> b."return a >> bdef sub(a, b):"Same as a - b."return a - bdef truediv(a, b):"Same as a / b."return a / bdef xor(a, b):"Same as a ^ b."return a ^ b# Sequence Operations *********************************************************#def concat(a, b):"Same as a + b, for a and b sequences."if not hasattr(a, '__getitem__'):msg = "'%s' object can't be concatenated" % type(a).__name__raise TypeError(msg)return a + bdef contains(a, b):"Same as b in a (note reversed operands)."return b in adef countOf(a, b):"Return the number of times b occurs in a."count = 0for i in a:if i == b:count += 1return countdef delitem(a, b):"Same as del a[b]."del a[b]def getitem(a, b):"Same as a[b]."return a[b]def indexOf(a, b):"Return the first index of b in a."for i, j in enumerate(a):if j == b:return ielse:raise ValueError('sequence.index(x): x not in sequence')def setitem(a, b, c):"Same as a[b] = c."a[b] = cdef length_hint(obj, default=0):"""Return an estimate of the number of items in obj.This is useful for presizing containers when building from an iterable.If the object supports len(), the result will be exact. Otherwise, it mayover- or under-estimate by an arbitrary amount. The result will be aninteger >= 0."""if not isinstance(default, int):msg = ("'%s' object cannot be interpreted as an integer" %type(default).__name__)raise TypeError(msg)try:return len(obj)except TypeError:passtry:hint = type(obj).__length_hint__except AttributeError:return defaulttry:val = hint(obj)except TypeError:return defaultif val is NotImplemented:return defaultif not isinstance(val, int):msg = ('__length_hint__ must be integer, not %s' %type(val).__name__)raise TypeError(msg)if val < 0:msg = '__length_hint__() should return >= 0'raise ValueError(msg)return val# Generalized Lookup Objects **************************************************#class attrgetter:"""Return a callable object that fetches the given attribute(s) from its operand.After f = attrgetter('name'), the call f(r) returns r.name.After g = attrgetter('name', 'date'), the call g(r) returns (r.name, r.date).After h = attrgetter('name.first', 'name.last'), the call h(r) returns(r.name.first, r.name.last)."""__slots__ = ('_attrs', '_call')def __init__(self, attr, *attrs):if not attrs:if not isinstance(attr, str):raise TypeError('attribute name must be a string')self._attrs = (attr,)names = attr.split('.')def func(obj):for name in names:obj = getattr(obj, name)return objself._call = funcelse:self._attrs = (attr,) + attrsgetters = tuple(map(attrgetter, self._attrs))def func(obj):return tuple(getter(obj) for getter in getters)self._call = funcdef __call__(self, obj):return self._call(obj)def __repr__(self):return '%s.%s(%s)' % (self.__class__.__module__,self.__class__.__qualname__,', '.join(map(repr, self._attrs)))def __reduce__(self):return self.__class__, self._attrsclass itemgetter:"""Return a callable object that fetches the given item(s) from its operand.After f = itemgetter(2), the call f(r) returns r[2].After g = itemgetter(2, 5, 3), the call g(r) returns (r[2], r[5], r[3])"""__slots__ = ('_items', '_call')def __init__(self, item, *items):if not items:self._items = (item,)def func(obj):return obj[item]self._call = funcelse:self._items = items = (item,) + itemsdef func(obj):return tuple(obj[i] for i in items)self._call = funcdef __call__(self, obj):return self._call(obj)def __repr__(self):return '%s.%s(%s)' % (self.__class__.__module__,self.__class__.__name__,', '.join(map(repr, self._items)))def __reduce__(self):return self.__class__, self._itemsclass methodcaller:"""Return a callable object that calls the given method on its operand.After f = methodcaller('name'), the call f(r) returns r.name().After g = methodcaller('name', 'date', foo=1), the call g(r) returnsr.name('date', foo=1)."""__slots__ = ('_name', '_args', '_kwargs')def __init__(self, name, /, *args, **kwargs):self._name = nameif not isinstance(self._name, str):raise TypeError('method name must be a string')self._args = argsself._kwargs = kwargsdef __call__(self, obj):return getattr(obj, self._name)(*self._args, **self._kwargs)def __repr__(self):args = [repr(self._name)]args.extend(map(repr, self._args))args.extend('%s=%r' % (k, v) for k, v in self._kwargs.items())return '%s.%s(%s)' % (self.__class__.__module__,self.__class__.__name__,', '.join(args))def __reduce__(self):if not self._kwargs:return self.__class__, (self._name,) + self._argselse:from functools import partialreturn partial(self.__class__, self._name, **self._kwargs), self._args# In-place Operations *********************************************************#def iadd(a, b):"Same as a += b."a += breturn adef iand(a, b):"Same as a &= b."a &= breturn adef iconcat(a, b):"Same as a += b, for a and b sequences."if not hasattr(a, '__getitem__'):msg = "'%s' object can't be concatenated" % type(a).__name__raise TypeError(msg)a += breturn adef ifloordiv(a, b):"Same as a //= b."a //= breturn adef ilshift(a, b):"Same as a <<= b."a <<= breturn adef imod(a, b):"Same as a %= b."a %= breturn adef imul(a, b):"Same as a *= b."a *= breturn adef imatmul(a, b):"Same as a @= b."a @= breturn adef ior(a, b):"Same as a |= b."a |= breturn adef ipow(a, b):"Same as a **= b."a **=breturn adef irshift(a, b):"Same as a >>= b."a >>= breturn adef isub(a, b):"Same as a -= b."a -= breturn adef itruediv(a, b):"Same as a /= b."a /= breturn adef ixor(a, b):"Same as a ^= b."a ^= breturn atry:from _operator import *except ImportError:passelse:from _operator import __doc__# All of these "__func__ = func" assignments have to happen after importing# from _operator to make sure they're set to the right function__lt__ = lt__le__ = le__eq__ = eq__ne__ = ne__ge__ = ge__gt__ = gt__not__ = not___abs__ = abs__add__ = add__and__ = and___floordiv__ = floordiv__index__ = index__inv__ = inv__invert__ = invert__lshift__ = lshift__mod__ = mod__mul__ = mul__matmul__ = matmul__neg__ = neg__or__ = or___pos__ = pos__pow__ = pow__rshift__ = rshift__sub__ = sub__truediv__ = truediv__xor__ = xor__concat__ = concat__contains__ = contains__delitem__ = delitem__getitem__ = getitem__setitem__ = setitem__iadd__ = iadd__iand__ = iand__iconcat__ = iconcat__ifloordiv__ = ifloordiv__ilshift__ = ilshift__imod__ = imod__imul__ = imul__imatmul__ = imatmul__ior__ = ior__ipow__ = ipow__irshift__ = irshift__isub__ = isub__itruediv__ = itruediv__ixor__ = ixor
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。