9.9. operator
— Opérateurs standards en tant que fonctions¶
The operator
module exports a set of efficient functions corresponding to
the intrinsic operators of Python. For example, operator.add(x, y)
is
equivalent to the expression x+y
. The function names are those used for
special class methods; variants without leading and trailing __
are also
provided for convenience.
The functions fall into categories that perform object comparisons, logical operations, mathematical operations, sequence operations, and abstract type tests.
Les fonctions de comparaison s’appliquent à tous les objets, et leur nom vient des opérateurs de comparaison qu’elles implémentent :
-
operator.
lt
(a, b)¶ -
operator.
le
(a, b)¶ -
operator.
eq
(a, b)¶ -
operator.
ne
(a, b)¶ -
operator.
ge
(a, b)¶ -
operator.
gt
(a, b)¶ -
operator.
__lt__
(a, b)¶ -
operator.
__le__
(a, b)¶ -
operator.
__eq__
(a, b)¶ -
operator.
__ne__
(a, b)¶ -
operator.
__ge__
(a, b)¶ -
operator.
__gt__
(a, b)¶ Perform « rich comparisons » between a and b. Specifically,
lt(a, b)
is equivalent toa < b
,le(a, b)
is equivalent toa <= b
,eq(a, b)
is equivalent toa == b
,ne(a, b)
is equivalent toa != b
,gt(a, b)
is equivalent toa > b
andge(a, b)
is equivalent toa >= b
. Note that unlike the built-incmp()
, these functions can return any value, which may or may not be interpretable as a Boolean value. See Comparaisons for more information about rich comparisons.Nouveau dans la version 2.2.
En général, les opérations logiques s’appliquent aussi à tous les objets et implémentent les tests de vérité, d’identité et les opérations booléennes :
-
operator.
not_
(obj)¶ -
operator.
__not__
(obj)¶ Return the outcome of
not
obj. (Note that there is no__not__()
method for object instances; only the interpreter core defines this operation. The result is affected by the__nonzero__()
and__len__()
methods.)
-
operator.
truth
(obj)¶ Renvoie
True
si obj est vrai, etFalse
dans le cas contraire. Équivaut à utiliser le constructeur debool
.
-
operator.
is_
(a, b)¶ Renvoie
a is b
. Vérifie si les deux paramètres sont le même objet.Nouveau dans la version 2.3.
-
operator.
is_not
(a, b)¶ Renvoie
a is not b
. Vérifie si les deux paramètres sont deux objets distincts.Nouveau dans la version 2.3.
Les opérations mathématiques ou bit à bit sont les plus nombreuses :
-
operator.
div
(a, b)¶ -
operator.
__div__
(a, b)¶ Return
a / b
when__future__.division
is not in effect. This is also known as « classic » division.
-
operator.
index
(a)¶ -
operator.
__index__
(a)¶ Renvoie a converti en entier. Équivaut à
a.__index__()
.Nouveau dans la version 2.5.
-
operator.
inv
(obj)¶ -
operator.
invert
(obj)¶ -
operator.
__inv__
(obj)¶ -
operator.
__invert__
(obj)¶ Renvoie l’inverse bit à bit du nombre obj. Équivaut à
~obj
.Nouveau dans la version 2.0: The names
invert()
and__invert__()
.
-
operator.
lshift
(a, b)¶ -
operator.
__lshift__
(a, b)¶ Renvoie le décalage de b bits vers la gauche de a.
-
operator.
pow
(a, b)¶ -
operator.
__pow__
(a, b)¶ Renvoie
a ** b
où a et b sont des nombres.Nouveau dans la version 2.3.
-
operator.
rshift
(a, b)¶ -
operator.
__rshift__
(a, b)¶ Renvoie le décalage de b bits vers la droite de a.
-
operator.
truediv
(a, b)¶ -
operator.
__truediv__
(a, b)¶ Return
a / b
when__future__.division
is in effect. This is also known as « true » division.Nouveau dans la version 2.2.
Les opérations sur séquences (et pour certaines, sur correspondances) sont :
-
operator.
contains
(a, b)¶ -
operator.
__contains__
(a, b)¶ Renvoie le résultat du test
b in a
. Notez que les opérandes sont inversées.Nouveau dans la version 2.0: The name
__contains__()
.
-
operator.
countOf
(a, b)¶ Renvoie le nombre d’occurrences de b dans a.
-
operator.
delslice
(a, b, c)¶ -
operator.
__delslice__
(a, b, c)¶ Delete the slice of a from index b to index c-1.
Obsolète depuis la version 2.6: This function is removed in Python 3.x. Use
delitem()
with a slice index.
-
operator.
getslice
(a, b, c)¶ -
operator.
__getslice__
(a, b, c)¶ Return the slice of a from index b to index c-1.
Obsolète depuis la version 2.6: This function is removed in Python 3.x. Use
getitem()
with a slice index.
-
operator.
indexOf
(a, b)¶ Renvoie l’indice de la première occurrence de b dans a.
-
operator.
repeat
(a, b)¶ -
operator.
__repeat__
(a, b)¶ Obsolète depuis la version 2.7: Use
__mul__()
instead.Return
a * b
where a is a sequence and b is an integer.
-
operator.
sequenceIncludes
(...)¶ Obsolète depuis la version 2.0: Use
contains()
instead.Alias for
contains()
.
-
operator.
setslice
(a, b, c, v)¶ -
operator.
__setslice__
(a, b, c, v)¶ Set the slice of a from index b to index c-1 to the sequence v.
Obsolète depuis la version 2.6: This function is removed in Python 3.x. Use
setitem()
with a slice index.
Example use of operator functions:
>>> # Elementwise multiplication
>>> map(mul, [0, 1, 2, 3], [10, 20, 30, 40])
[0, 20, 60, 120]
>>> # Dot product
>>> sum(map(mul, [0, 1, 2, 3], [10, 20, 30, 40]))
200
Many operations have an « in-place » version. The following functions provide a
more primitive access to in-place operators than the usual syntax does; for
example, the statement x += y
is equivalent to
x = operator.iadd(x, y)
. Another way to put it is to say that
z = operator.iadd(x, y)
is equivalent to the compound statement
z = x; z += y
.
-
operator.
iadd
(a, b)¶ -
operator.
__iadd__
(a, b)¶ a = iadd(a, b)
is equivalent toa += b
.Nouveau dans la version 2.5.
-
operator.
iand
(a, b)¶ -
operator.
__iand__
(a, b)¶ a = iand(a, b)
is equivalent toa &= b
.Nouveau dans la version 2.5.
-
operator.
iconcat
(a, b)¶ -
operator.
__iconcat__
(a, b)¶ a = iconcat(a, b)
is equivalent toa += b
for a and b sequences.Nouveau dans la version 2.5.
-
operator.
idiv
(a, b)¶ -
operator.
__idiv__
(a, b)¶ a = idiv(a, b)
is equivalent toa /= b
when__future__.division
is not in effect.Nouveau dans la version 2.5.
-
operator.
ifloordiv
(a, b)¶ -
operator.
__ifloordiv__
(a, b)¶ a = ifloordiv(a, b)
is equivalent toa //= b
.Nouveau dans la version 2.5.
-
operator.
ilshift
(a, b)¶ -
operator.
__ilshift__
(a, b)¶ a = ilshift(a, b)
is equivalent toa <<= b
.Nouveau dans la version 2.5.
-
operator.
imod
(a, b)¶ -
operator.
__imod__
(a, b)¶ a = imod(a, b)
is equivalent toa %= b
.Nouveau dans la version 2.5.
-
operator.
imul
(a, b)¶ -
operator.
__imul__
(a, b)¶ a = imul(a, b)
is equivalent toa *= b
.Nouveau dans la version 2.5.
-
operator.
ior
(a, b)¶ -
operator.
__ior__
(a, b)¶ a = ior(a, b)
is equivalent toa |= b
.Nouveau dans la version 2.5.
-
operator.
ipow
(a, b)¶ -
operator.
__ipow__
(a, b)¶ a = ipow(a, b)
is equivalent toa **= b
.Nouveau dans la version 2.5.
-
operator.
irepeat
(a, b)¶ -
operator.
__irepeat__
(a, b)¶ Obsolète depuis la version 2.7: Use
__imul__()
instead.a = irepeat(a, b)
is equivalent toa *= b
where a is a sequence and b is an integer.Nouveau dans la version 2.5.
-
operator.
irshift
(a, b)¶ -
operator.
__irshift__
(a, b)¶ a = irshift(a, b)
is equivalent toa >>= b
.Nouveau dans la version 2.5.
-
operator.
isub
(a, b)¶ -
operator.
__isub__
(a, b)¶ a = isub(a, b)
is equivalent toa -= b
.Nouveau dans la version 2.5.
-
operator.
itruediv
(a, b)¶ -
operator.
__itruediv__
(a, b)¶ a = itruediv(a, b)
is equivalent toa /= b
when__future__.division
is in effect.Nouveau dans la version 2.5.
-
operator.
ixor
(a, b)¶ -
operator.
__ixor__
(a, b)¶ a = ixor(a, b)
is equivalent toa ^= b
.Nouveau dans la version 2.5.
The operator
module also defines a few predicates to test the type of
objects; however, these are not all reliable. It is preferable to test
abstract base classes instead (see collections
and
numbers
for details).
-
operator.
isCallable
(obj)¶ Obsolète depuis la version 2.0: Use
isinstance(x, collections.Callable)
instead.Returns true if the object obj can be called like a function, otherwise it returns false. True is returned for functions, bound and unbound methods, class objects, and instance objects which support the
__call__()
method.
-
operator.
isMappingType
(obj)¶ Obsolète depuis la version 2.7: Use
isinstance(x, collections.Mapping)
instead.Returns true if the object obj supports the mapping interface. This is true for dictionaries and all instance objects defining
__getitem__()
.
-
operator.
isNumberType
(obj)¶ Obsolète depuis la version 2.7: Use
isinstance(x, numbers.Number)
instead.Returns true if the object obj represents a number. This is true for all numeric types implemented in C.
-
operator.
isSequenceType
(obj)¶ Obsolète depuis la version 2.7: Use
isinstance(x, collections.Sequence)
instead.Returns true if the object obj supports the sequence protocol. This returns true for all objects which define sequence methods in C, and for all instance objects defining
__getitem__()
.
Le module operator
définit aussi des fonctions pour la recherche générique d’attributs ou d’objets. Elles sont particulièrement utiles pour construire rapidement des accesseurs d’attributs à passer en paramètre à map()
, sorted()
, itertools.groupby()
ou à toute autre fonction prenant une fonction en paramètre.
-
operator.
attrgetter
(attr)¶ -
operator.
attrgetter
(*attrs) Renvoie un objet appelable qui récupère attr de son opérande. Si plus d’un attribut est demandé, renvoie un n-uplet d’attributs. Les noms des attributs peuvent aussi comporter des points. Par exemple :
Avec
f = attrgetter('name')
, l’appelf(b)
renvoieb.name
.Avec
f = attrgetter('name', 'date')
, l’appelf(b)
renvoie(b.name, b.date)
.Après
f = attrgetter('name.first', 'name.last')
, l’appelf(b)
renvoie(b.name.first, b.name.last)
.
Équivalent à :
def attrgetter(*items): if len(items) == 1: attr = items[0] def g(obj): return resolve_attr(obj, attr) else: def g(obj): return tuple(resolve_attr(obj, attr) for attr in items) return g def resolve_attr(obj, attr): for name in attr.split("."): obj = getattr(obj, name) return obj
Nouveau dans la version 2.4.
Modifié dans la version 2.5: Added support for multiple attributes.
Modifié dans la version 2.6: Added support for dotted attributes.
-
operator.
itemgetter
(item)¶ -
operator.
itemgetter
(*items) Renvoie un objet appelable qui récupère item de l’opérande en utilisant la méthode
__getitem__()
. Si plusieurs item sont passés en paramètre, renvoie un n-uplet des valeurs récupérées. Par exemple :Avec
f = itemgetter(2)
,f(r)
renvoier[2]
.Avec
g = itemgetter(2, 5, 3)
,g(r)
renvoie(r[2], r[5], r[3])
.
Équivalent à :
def itemgetter(*items): if len(items) == 1: item = items[0] def g(obj): return obj[item] else: def g(obj): return tuple(obj[item] for item in items) return g
Les items en entrée peuvent être de n’importe quel type tant que celui-ci est géré par la méthode
__getitem__()
de l’opérande. Les dictionnaires acceptent toute valeur hachable. Les listes, n-uplets et chaînes de caractères acceptent un index ou une tranche :>>> itemgetter(1)('ABCDEFG') 'B' >>> itemgetter(1,3,5)('ABCDEFG') ('B', 'D', 'F') >>> itemgetter(slice(2,None))('ABCDEFG') 'CDEFG'
Nouveau dans la version 2.4.
Modifié dans la version 2.5: Added support for multiple item extraction.
Exemple d’utilisation de
itemgetter()
pour récupérer des champs spécifiques d’un n-uplet :>>> inventory = [('apple', 3), ('banana', 2), ('pear', 5), ('orange', 1)] >>> getcount = itemgetter(1) >>> map(getcount, inventory) [3, 2, 5, 1] >>> sorted(inventory, key=getcount) [('orange', 1), ('banana', 2), ('apple', 3), ('pear', 5)]
-
operator.
methodcaller
(name[, args...])¶ Renvoie un objet appelable qui appelle la méthode name de son opérande. Si des paramètres supplémentaires et/ou des paramètres nommés sont donnés, ils seront aussi passés à la méthode. Par exemple :
Avec
f = methodcaller('name')
,f(b)
renvoieb.name()
.Avec
f = methodcaller('name', 'foo', bar=1)
,f(b)
renvoieb.name('foo', bar=1)
.
Équivalent à :
def methodcaller(name, *args, **kwargs): def caller(obj): return getattr(obj, name)(*args, **kwargs) return caller
Nouveau dans la version 2.6.
9.9.1. Correspondances entre opérateurs et fonctions¶
Le tableau montre la correspondance entre les symboles des opérateurs Python et les fonctions du module operator
.
Opération |
Syntaxe |
Fonction |
---|---|---|
Addition |
|
|
Concaténation |
|
|
Test d’inclusion |
|
|
Division |
|
|
Division |
|
|
Division |
|
|
Et bit à bit |
|
|
Ou exclusif bit à bit |
|
|
Inversion bit à bit |
|
|
Ou bit à bit |
|
|
Exponentiation |
|
|
Identité |
|
|
Identité |
|
|
Affectation par index |
|
|
Suppression par index |
|
|
Indexation |
|
|
Décalage bit à bit gauche |
|
|
Modulo |
|
|
Multiplication |
|
|
Opposé |
|
|
Négation (logique) |
|
|
Valeur positive |
|
|
Décalage bit à bit droite |
|
|
Sequence Repetition |
|
|
Affectation par tranche |
|
|
Suppression par tranche |
|
|
Tranche |
|
|
Formatage de chaînes de caractères |
|
|
Soustraction |
|
|
Test de véracité |
|
|
Ordre |
|
|
Ordre |
|
|
Égalité |
|
|
Différence |
|
|
Ordre |
|
|
Ordre |
|
|