Maison > développement back-end > Tutoriel Python > Utilisation par l'opérateur du module opérateur en Python

Utilisation par l'opérateur du module opérateur en Python

高洛峰
Libérer: 2017-03-01 14:13:12
original
1223 Les gens l'ont consulté

Le module opérateur est l'interface de fonction d'opérateur intégrée en python. Il définit certaines fonctions pour les opérations intégrées d'arithmétique et de comparaison. Le module opérateur est implémenté en C, la vitesse d'exécution est donc plus rapide que le code Python.

Opération logique

from operator import *

a = [1, 2, 3]
b = a
print 'a =', a
print 'b =', b
print 

print 'not_(a)   :', not_(a)
print 'truth(a)   :', truth(a)
print 'is_(a, b)  :', is_(a, b)
print 'is_not(a, b) :', is_not(a, b)
Copier après la connexion

Résultat d'impression :

a = [1, 2, 3]
b = [1, 2, 3]
not_(a)   : False
truth(a)  : True
is_(a, b)  : True
is_not(a, b): False
Copier après la connexion

Vous pouvez savoir à partir des résultats que certaines des fonctions opérationnelles de l'opérateur sont les mêmes que les opérations d'origine.

Opérateur de comparaison
opérateur fournit des opérations de comparaison riches.

a = 3
b = 5
print 'a =', a
print 'b =', b
print 

for func in (lt, le, eq, ne, ge, gt):
  print '{0}(a, b):'.format(func.__name__), func(a, b)
Copier après la connexion

Imprimer les résultats

a = 3
b = 5

lt(a, b): True
le(a, b): True
eq(a, b): False
ne(a, b): True
ge(a, b): False
gt(a, b): False
Copier après la connexion

Ces fonctions sont équivalentes à < Syntaxe d'expression pour ;, <=, ==, >= et >.

Opérateurs arithmétiques
Les opérateurs arithmétiques permettant de travailler avec des nombres sont également pris en charge.

a, b, c, d = -1, 2, -3, 4

print &#39;a =&#39;, a
print &#39;b =&#39;, b
print &#39;c =&#39;, c
print &#39;d =&#39;, d
 
print &#39;\nPositive/Negative:&#39;
print &#39;abs(a):&#39;, abs(a)
print &#39;neg(a):&#39;, neg(a)
print &#39;neg(b):&#39;, neg(b)
print &#39;pos(a):&#39;, pos(a)
print &#39;pos(b):&#39;, pos(b)
Copier après la connexion

Imprimer les résultats

a = -1
b = 2
c = -3
d = 4

Positive/Negative:
abs(a): 1
neg(a): 1
neg(b): -2
pos(a): -1
pos(b): 2
Copier après la connexion

valeur de retour des abdominaux Valeur absolue, neg renvoie (-obj), pos renvoie (obj).

a = -2
b = 5.0

print &#39;a =&#39;, a
print &#39;b =&#39;, b
 
print &#39;\nArithmetic&#39;
print &#39;add(a, b)    :&#39;, add(a, b)
print &#39;p(a, b)    :&#39;, p(a, b)
print &#39;floorp(a, b)  :&#39;, floorp(a, b)
print &#39;mod(a, b)    :&#39;, mod(a, b)
print &#39;mul(a, b)    :&#39;, mul(a, b)
print &#39;pow(a, b)    :&#39;, pow(a, b)
print &#39;sub(a, b)    :&#39;, sub(a, b)
print &#39;truep(a, b)  :&#39;, truep(a, b)
Copier après la connexion

Imprimer le résultat

a = -2
b = 5.0

Arithmetic
add(a, b)    : 3.0
p(a, b)    : -0.4
floorp(a, b)  : -1.0
mod(a, b)    : 3.0 # 查看负数取模
mul(a, b)    : -10.0
pow(a, b)    : -32.0
sub(a, b)    : -7.0
truep(a, b)  : -0.4
Copier après la connexion

mod signifie prendre le module, mul signifie multiplication, pow est la puissance, sub signifie soustraction

a = 2
b = 6

print &#39;a =&#39;, a
print &#39;b =&#39;, b

print &#39;\nBitwise:&#39;
print &#39;and_(a, b)  :&#39;, and_(a, b)
print &#39;invert(a)  :&#39;, invert(a)
print &#39;lshift(a, b) :&#39;, lshift(a, b)
print &#39;or_(a, b)  :&#39;, or_(a, b)
print &#39;rshift(a, b) :&#39;, rshift(a, b)
print &#39;xor(a, b)  :&#39;, xor(a, b)
Copier après la connexion

Imprimer le résultat

a = 2
b = 6

Bitwise:
and_(a, b)  : 2
invert(a)  : -3
lshift(a, b) : 128
or_(a, b)  : 6
rshift(a, b) : 0
xor(a, b)  : 4
Copier après la connexion

et signifie AND au niveau du bit, invert signifie opération de négation, lshift signifie décalage à gauche, ou signifie OR au niveau du bit, rshift signifie décalage à droite et xor signifie XOR au niveau du bit.


L'opérateur sur place
est une opération sur place, x = y est équivalent à x = iadd(x, y), s'il est copié dans d'autres variables telles que car z = iadd(x, y) est équivalent à z = x ;

a = 3
b = 4
c = [1, 2]
d = [&#39;a&#39;, &#39;b&#39;]

print &#39;a =&#39;, a
print &#39;b =&#39;, b
print &#39;c =&#39;, c
print &#39;d =&#39;, d
print

a = iadd(a, b)
print &#39;a = iadd(a, b) =>&#39;, a
print

c = iconcat(c, d)
print &#39;c = iconcat(c, d) =>&#39;, c
Copier après la connexion

Obtention de méthodes pour les attributs et les éléments
L'une des fonctionnalités les plus spéciales du module opérateur est le concept de méthodes d'obtention. Les méthodes Get sont des objets de rappel construits au moment de l'exécution, utilisés pour obtenir les propriétés de l'objet ou le contenu de la séquence. Les méthodes Get sont particulièrement utiles lorsqu'il s'agit d'itérateurs ou de séquences génératrices. La surcharge qu'elles introduisent réduira considérablement les performances. des fonctions lambda ou Python.

from operator import *
class MyObj(object):
  def __init__(self, arg):
    super(MyObj, self).__init__()
    self.arg = arg
  def __repr__(self):
    return &#39;MyObj(%s)&#39; % self.arg

objs = [MyObj(i) for i in xrange(5)]
print "Object:", objs

g = attrgetter("arg")
vals = [g(i) for i in objs]
print "arg values:", vals

objs.reverse()
print "reversed:", objs
print "sorted:", sorted(objs, key=g)
Copier après la connexion

Résultat :

Object: [MyObj(0), MyObj(1), MyObj(2), MyObj(3), MyObj(4)]
arg values: [0, 1, 2, 3, 4]
reversed: [MyObj(4), MyObj(3), MyObj(2), MyObj(1), MyObj(0)]
sorted: [MyObj(0), MyObj(1), MyObj(2), MyObj(3), MyObj(4)]
Copier après la connexion

Méthode d'acquisition d'attribut Semblable à

lambda x, n=&#39;attrname&#39;:getattr(x,nz)
Copier après la connexion

La méthode d'acquisition des éléments est similaire à

lambda x,y=5:x[y]
Copier après la connexion

from operator import *

l = [dict(val=-1*i) for i in xrange(4)]
print "dictionaries:", l
g = itemgetter("val")
vals = [g(i) for i in l]
print "values: ", vals
print "sorted:", sorted(l, key=g)

l = [(i,i*-2) for i in xrange(4)]
print "tuples: ", l
g = itemgetter(1)
vals = [g(i) for i in l]
print "values:", vals
print "sorted:", sorted(l, key=g)
Copier après la connexion

Les résultats sont les suivants :

dictionaries: [{&#39;val&#39;: 0}, {&#39;val&#39;: -1}, {&#39;val&#39;: -2}, {&#39;val&#39;: -3}]
values: [0, -1, -2, -3]
sorted: [{&#39;val&#39;: -3}, {&#39;val&#39;: -2}, {&#39;val&#39;: -1}, {&#39;val&#39;: 0}]
tuples: [(0, 0), (1, -2), (2, -4), (3, -6)]
values: [0, -2, -4, -6]
sorted: [(3, -6), (2, -4), (1, -2), (0, 0)]
Copier après la connexion

En plus des séquences , les méthodes d'acquisition d'éléments s'appliquent également au mappage.

Combinaison d'opérateurs et de classes personnalisées
Les fonctions du module opérateur effectuent leur travail via l'interface Python standard pour l'opération correspondante, de sorte qu'elles fonctionnent non seulement avec les types intégrés, mais également avec ceux définis par l'utilisateur.

from operator import *

class MyObj(object):
  def __init__(self, val):
    super(MyObj, self).__init__()
    self.val = val
    return 

  def __str__(self):
    return "MyObj(%s)" % self.val

  def __lt__(self, other):
    return self.val < other.val

  def __add__(self, other):
    return MyObj(self.val + other.val)

a = MyObj(1)
b = MyObj(2)

print lt(a, b)
print add(a,b)
Copier après la connexion

Le résultat est le suivant :

True
MyObj(3)
Copier après la connexion

Le module opérateur de vérification de type
contient également des fonctions permettant de tester la compatibilité API des types carte, numérique et séquence.

from operator import *

class NoType(object):
  pass

class MultiType(object):
  def __len__(self):
    return 0

  def __getitem__(self, name):
    return "mapping"

  def __int__(self):
    return 0

o = NoType()
t = MultiType()

for func in [isMappingType, isNumberType, isSequenceType]:
  print "%s(o):" % func.__name__, func(o)
  print "%s(t):" % func.__name__, func(t)
Copier après la connexion

Les résultats sont les suivants :

isMappingType(o): False
isMappingType(t): True
isNumberType(o): False
isNumberType(t): True
isSequenceType(o): False
isSequenceType(t): True
Copier après la connexion

Mais ces les tests ne sont pas parfaits, car les excuses ne sont pas strictement définies.

Obtenir la méthode de l'objet
Utilisez methodcaller pour obtenir la méthode de l'objet.

from operator import methodcaller

class Student(object):
  def __init__(self, name):
    self.name = name

  def getName(self):
    return self.name

stu = Student("Jim")
func = methodcaller(&#39;getName&#39;)
print func(stu)  # 输出Jim
Copier après la connexion

Vous pouvez également passer des paramètres à la méthode :

f=methodcaller(&#39;name&#39;, &#39;foo&#39;, bar=1)
f(b)  # return  b.name(&#39;foo&#39;, bar=1)
methodcaller方法等价于下面这个函数:

def methodcaller(name, *args, **kwargs):
   def caller(obj):
      return getattr(obj, name)(*args, **kwargs)
   return caller
Copier après la connexion


Pour plus d'articles liés à l'utilisation des opérateurs dans le module opérateur en Python, veuillez faire attention au site Web PHP chinois !

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal