blob: 4cdcc92dadd0a5bf170a4397e5c984ec0bbc226a [file] [log] [blame]
Fred Drake295da241998-08-10 19:42:37 +00001\section{\module{operator} ---
2 Standard operators as functions.}
Fred Drakeb91e9341998-07-23 17:59:49 +00003\declaremodule{builtin}{operator}
Fred Drake295da241998-08-10 19:42:37 +00004\sectionauthor{Skip Montanaro}{skip@automatrix.com}
Fred Drakeb91e9341998-07-23 17:59:49 +00005
6\modulesynopsis{All Python's standard operators as built-in functions.}
7
Guido van Rossum61ed4db1996-12-06 21:22:41 +00008
Fred Drakec07ae9f1998-03-08 05:56:15 +00009The \module{operator} module exports a set of functions implemented in C
Guido van Rossum61ed4db1996-12-06 21:22:41 +000010corresponding to the intrinsic operators of Python. For example,
Fred Drakef3e6df11997-12-29 17:11:55 +000011\code{operator.add(x, y)} is equivalent to the expression \code{x+y}. The
Guido van Rossum61ed4db1996-12-06 21:22:41 +000012function names are those used for special class methods; variants without
Fred Drake98b032a1997-12-04 14:20:59 +000013leading and trailing \samp{__} are also provided for convenience.
Guido van Rossum61ed4db1996-12-06 21:22:41 +000014
Fred Drakee89659c2001-08-10 15:55:09 +000015The functions fall into categories that perform object comparisons,
16logical operations, mathematical operations, sequence operations, and
17abstract type tests.
Guido van Rossum61ed4db1996-12-06 21:22:41 +000018
Fred Drakee89659c2001-08-10 15:55:09 +000019The object comparison functions are useful for all objects, and are
20named after the rich comparison operators they support:
21
22\begin{funcdesc}{lt}{a, b}
23\funcline{le}{a, b}
24\funcline{eq}{a, b}
25\funcline{ne}{a, b}
26\funcline{ge}{a, b}
27\funcline{gt}{a, b}
28\funcline{__lt__}{a, b}
29\funcline{__le__}{a, b}
30\funcline{__eq__}{a, b}
31\funcline{__ne__}{a, b}
32\funcline{__ge__}{a, b}
33\funcline{__gt__}{a, b}
34Perform ``rich comparisons'' between \var{a} and \var{b}. Specifically,
35\code{lt(\var{a}, \var{b})} is equivalent to \code{\var{a} < \var{b}},
36\code{le(\var{a}, \var{b})} is equivalent to \code{\var{a} <= \var{b}},
37\code{eq(\var{a}, \var{b})} is equivalent to \code{\var{a} == \var{b}},
38\code{ne(\var{a}, \var{b})} is equivalent to \code{\var{a} != \var{b}},
39\code{gt(\var{a}, \var{b})} is equivalent to \code{\var{a} > \var{b}}
40and
41\code{ge(\var{a}, \var{b})} is equivalent to \code{\var{a} >= \var{b}}.
42Note that unlike the built-in \function{cmp()}, these functions can
43return any value, which may or may not be interpretable as a Boolean
44value. See the \citetitle[../ref/ref.html]{Python Reference Manual}
45for more informations about rich comparisons.
46\versionadded{2.2}
Guido van Rossum61ed4db1996-12-06 21:22:41 +000047\end{funcdesc}
48
Fred Drakee89659c2001-08-10 15:55:09 +000049
50The logical operations are also generally applicable to all objects,
51and support truth tests and Boolean operations:
52
53\begin{funcdesc}{not_}{o}
54\funcline{__not__}{o}
55Return the outcome of \keyword{not} \var{o}. (Note that there is no
56\method{__not__()} method for object instances; only the interpreter
57core defines this operation. The result is affected by the
58\method{__nonzero__()} and \method{__len__()} methods.)
Guido van Rossum61ed4db1996-12-06 21:22:41 +000059\end{funcdesc}
60
Fred Drakee89659c2001-08-10 15:55:09 +000061\begin{funcdesc}{truth}{o}
Fred Drake8ec17a02003-01-11 23:15:47 +000062Return \constant{True} if \var{o} is true, and \constant{False}
63otherwise. This is equivalent to the constructor of the \class{bool}
64constructor.
Guido van Rossum61ed4db1996-12-06 21:22:41 +000065\end{funcdesc}
66
Guido van Rossum61ed4db1996-12-06 21:22:41 +000067
Fred Drakee89659c2001-08-10 15:55:09 +000068The mathematical and bitwise operations are the most numerous:
Guido van Rossum61ed4db1996-12-06 21:22:41 +000069
70\begin{funcdesc}{abs}{o}
Fred Drakec07ae9f1998-03-08 05:56:15 +000071\funcline{__abs__}{o}
Fred Drake0514ce11997-12-16 14:29:48 +000072Return the absolute value of \var{o}.
Guido van Rossum61ed4db1996-12-06 21:22:41 +000073\end{funcdesc}
74
Fred Drakee89659c2001-08-10 15:55:09 +000075\begin{funcdesc}{add}{a, b}
76\funcline{__add__}{a, b}
77Return \var{a} \code{+} \var{b}, for \var{a} and \var{b} numbers.
Guido van Rossum61ed4db1996-12-06 21:22:41 +000078\end{funcdesc}
79
Fred Drake98b032a1997-12-04 14:20:59 +000080\begin{funcdesc}{and_}{a, b}
Fred Drakec07ae9f1998-03-08 05:56:15 +000081\funcline{__and__}{a, b}
Fred Drake0514ce11997-12-16 14:29:48 +000082Return the bitwise and of \var{a} and \var{b}.
Guido van Rossum61ed4db1996-12-06 21:22:41 +000083\end{funcdesc}
84
Fred Drakee89659c2001-08-10 15:55:09 +000085\begin{funcdesc}{div}{a, b}
86\funcline{__div__}{a, b}
87Return \var{a} \code{/} \var{b} when \code{__future__.division} is not
88in effect. This is also known as ``classic'' division.
89\end{funcdesc}
90
91\begin{funcdesc}{floordiv}{a, b}
92\funcline{__floordiv__}{a, b}
93Return \var{a} \code{//} \var{b}.
94\versionadded{2.2}
95\end{funcdesc}
96
97\begin{funcdesc}{inv}{o}
98\funcline{invert}{o}
99\funcline{__inv__}{o}
100\funcline{__invert__}{o}
101Return the bitwise inverse of the number \var{o}. This is equivalent
102to \code{\textasciitilde}\var{o}. The names \function{invert()} and
103\function{__invert__()} were added in Python 2.0.
104\end{funcdesc}
105
106\begin{funcdesc}{lshift}{a, b}
107\funcline{__lshift__}{a, b}
108Return \var{a} shifted left by \var{b}.
109\end{funcdesc}
110
111\begin{funcdesc}{mod}{a, b}
112\funcline{__mod__}{a, b}
113Return \var{a} \code{\%} \var{b}.
114\end{funcdesc}
115
116\begin{funcdesc}{mul}{a, b}
117\funcline{__mul__}{a, b}
118Return \var{a} \code{*} \var{b}, for \var{a} and \var{b} numbers.
119\end{funcdesc}
120
121\begin{funcdesc}{neg}{o}
122\funcline{__neg__}{o}
123Return \var{o} negated.
124\end{funcdesc}
125
Fred Drake98b032a1997-12-04 14:20:59 +0000126\begin{funcdesc}{or_}{a, b}
Fred Drakec07ae9f1998-03-08 05:56:15 +0000127\funcline{__or__}{a, b}
Fred Drake0514ce11997-12-16 14:29:48 +0000128Return the bitwise or of \var{a} and \var{b}.
Guido van Rossum61ed4db1996-12-06 21:22:41 +0000129\end{funcdesc}
130
Fred Drakee89659c2001-08-10 15:55:09 +0000131\begin{funcdesc}{pos}{o}
132\funcline{__pos__}{o}
133Return \var{o} positive.
134\end{funcdesc}
135
Raymond Hettinger5959c552002-08-19 03:19:09 +0000136\begin{funcdesc}{pow}{a, b}
137\funcline{__pow__}{a, b}
138Return \var{a} \code{**} \var{b}, for \var{a} and \var{b} numbers.
Neal Norwitz11b795c2002-08-19 22:38:01 +0000139\versionadded{2.3}
Raymond Hettinger5959c552002-08-19 03:19:09 +0000140\end{funcdesc}
141
Fred Drakee89659c2001-08-10 15:55:09 +0000142\begin{funcdesc}{rshift}{a, b}
143\funcline{__rshift__}{a, b}
144Return \var{a} shifted right by \var{b}.
145\end{funcdesc}
146
147\begin{funcdesc}{sub}{a, b}
148\funcline{__sub__}{a, b}
149Return \var{a} \code{-} \var{b}.
150\end{funcdesc}
151
152\begin{funcdesc}{truediv}{a, b}
153\funcline{__truediv__}{a, b}
154Return \var{a} \code{/} \var{b} when \code{__future__.division} is in
155effect. This is also known as division.
156\versionadded{2.2}
157\end{funcdesc}
158
Guido van Rossuma58e9ed1998-05-22 18:48:37 +0000159\begin{funcdesc}{xor}{a, b}
160\funcline{__xor__}{a, b}
161Return the bitwise exclusive or of \var{a} and \var{b}.
162\end{funcdesc}
163
Guido van Rossuma58e9ed1998-05-22 18:48:37 +0000164
Fred Drakee89659c2001-08-10 15:55:09 +0000165Operations which work with sequences include:
Guido van Rossuma58e9ed1998-05-22 18:48:37 +0000166
Fred Drake98b032a1997-12-04 14:20:59 +0000167\begin{funcdesc}{concat}{a, b}
Fred Drakec07ae9f1998-03-08 05:56:15 +0000168\funcline{__concat__}{a, b}
Fred Drake0514ce11997-12-16 14:29:48 +0000169Return \var{a} \code{+} \var{b} for \var{a} and \var{b} sequences.
Guido van Rossum61ed4db1996-12-06 21:22:41 +0000170\end{funcdesc}
171
Guido van Rossuma58e9ed1998-05-22 18:48:37 +0000172\begin{funcdesc}{contains}{a, b}
Fred Drake5316ef42000-09-17 16:10:25 +0000173\funcline{__contains__}{a, b}
Guido van Rossuma58e9ed1998-05-22 18:48:37 +0000174Return the outcome of the test \var{b} \code{in} \var{a}.
Fred Drake5316ef42000-09-17 16:10:25 +0000175Note the reversed operands. The name \function{__contains__()} was
176added in Python 2.0.
177\end{funcdesc}
178
Guido van Rossuma58e9ed1998-05-22 18:48:37 +0000179\begin{funcdesc}{countOf}{a, b}
180Return the number of occurrences of \var{b} in \var{a}.
181\end{funcdesc}
182
Fred Drake98b032a1997-12-04 14:20:59 +0000183\begin{funcdesc}{delitem}{a, b}
Fred Drakec07ae9f1998-03-08 05:56:15 +0000184\funcline{__delitem__}{a, b}
Fred Drake0514ce11997-12-16 14:29:48 +0000185Remove the value of \var{a} at index \var{b}.
Guido van Rossum61ed4db1996-12-06 21:22:41 +0000186\end{funcdesc}
187
Fred Drakee89659c2001-08-10 15:55:09 +0000188\begin{funcdesc}{delslice}{a, b, c}
189\funcline{__delslice__}{a, b, c}
190Delete the slice of \var{a} from index \var{b} to index \var{c}\code{-1}.
191\end{funcdesc}
192
193\begin{funcdesc}{getitem}{a, b}
194\funcline{__getitem__}{a, b}
195Return the value of \var{a} at index \var{b}.
196\end{funcdesc}
197
Fred Drake98b032a1997-12-04 14:20:59 +0000198\begin{funcdesc}{getslice}{a, b, c}
Fred Drakec07ae9f1998-03-08 05:56:15 +0000199\funcline{__getslice__}{a, b, c}
Fred Drake0514ce11997-12-16 14:29:48 +0000200Return the slice of \var{a} from index \var{b} to index \var{c}\code{-1}.
Guido van Rossum61ed4db1996-12-06 21:22:41 +0000201\end{funcdesc}
202
Fred Drakee89659c2001-08-10 15:55:09 +0000203\begin{funcdesc}{indexOf}{a, b}
204Return the index of the first of occurrence of \var{b} in \var{a}.
205\end{funcdesc}
206
207\begin{funcdesc}{repeat}{a, b}
208\funcline{__repeat__}{a, b}
209Return \var{a} \code{*} \var{b} where \var{a} is a sequence and
210\var{b} is an integer.
211\end{funcdesc}
212
213\begin{funcdesc}{sequenceIncludes}{\unspecified}
214\deprecated{2.0}{Use \function{contains()} instead.}
215Alias for \function{contains()}.
216\end{funcdesc}
217
218\begin{funcdesc}{setitem}{a, b, c}
219\funcline{__setitem__}{a, b, c}
220Set the value of \var{a} at index \var{b} to \var{c}.
221\end{funcdesc}
222
Fred Drake98b032a1997-12-04 14:20:59 +0000223\begin{funcdesc}{setslice}{a, b, c, v}
Fred Drakec07ae9f1998-03-08 05:56:15 +0000224\funcline{__setslice__}{a, b, c, v}
Fred Drake0514ce11997-12-16 14:29:48 +0000225Set the slice of \var{a} from index \var{b} to index \var{c}\code{-1} to the
226sequence \var{v}.
Guido van Rossum61ed4db1996-12-06 21:22:41 +0000227\end{funcdesc}
228
Guido van Rossum61ed4db1996-12-06 21:22:41 +0000229
Fred Drakee89659c2001-08-10 15:55:09 +0000230The \module{operator} module also defines a few predicates to test the
Fred Drake0aa811c2001-10-20 04:24:09 +0000231type of objects. \note{Be careful not to misinterpret the
Fred Drake8d3312f2000-10-02 03:36:18 +0000232results of these functions; only \function{isCallable()} has any
Fred Drake0aa811c2001-10-20 04:24:09 +0000233measure of reliability with instance objects. For example:}
Fred Drake8d3312f2000-10-02 03:36:18 +0000234
235\begin{verbatim}
236>>> class C:
237... pass
238...
239>>> import operator
240>>> o = C()
241>>> operator.isMappingType(o)
2421
243\end{verbatim}
244
245\begin{funcdesc}{isCallable}{o}
246\deprecated{2.0}{Use the \function{callable()} built-in function instead.}
247Returns true if the object \var{o} can be called like a function,
248otherwise it returns false. True is returned for functions, bound and
249unbound methods, class objects, and instance objects which support the
250\method{__call__()} method.
251\end{funcdesc}
252
253\begin{funcdesc}{isMappingType}{o}
254Returns true if the object \var{o} supports the mapping interface.
255This is true for dictionaries and all instance objects.
Fred Drake0aa811c2001-10-20 04:24:09 +0000256\warning{There is no reliable way to test if an instance
Fred Drake8d3312f2000-10-02 03:36:18 +0000257supports the complete mapping protocol since the interface itself is
258ill-defined. This makes this test less useful than it otherwise might
Fred Drake0aa811c2001-10-20 04:24:09 +0000259be.}
Fred Drake8d3312f2000-10-02 03:36:18 +0000260\end{funcdesc}
261
262\begin{funcdesc}{isNumberType}{o}
263Returns true if the object \var{o} represents a number. This is true
264for all numeric types implemented in C, and for all instance objects.
Fred Drake0aa811c2001-10-20 04:24:09 +0000265\warning{There is no reliable way to test if an instance
Fred Drake8d3312f2000-10-02 03:36:18 +0000266supports the complete numeric interface since the interface itself is
267ill-defined. This makes this test less useful than it otherwise might
Fred Drake0aa811c2001-10-20 04:24:09 +0000268be.}
Fred Drake8d3312f2000-10-02 03:36:18 +0000269\end{funcdesc}
270
271\begin{funcdesc}{isSequenceType}{o}
272Returns true if the object \var{o} supports the sequence protocol.
273This returns true for all objects which define sequence methods in C,
Fred Drake0aa811c2001-10-20 04:24:09 +0000274and for all instance objects. \warning{There is no reliable
Fred Drake8d3312f2000-10-02 03:36:18 +0000275way to test if an instance supports the complete sequence interface
276since the interface itself is ill-defined. This makes this test less
Fred Drake0aa811c2001-10-20 04:24:09 +0000277useful than it otherwise might be.}
Fred Drake8d3312f2000-10-02 03:36:18 +0000278\end{funcdesc}
279
Guido van Rossum61ed4db1996-12-06 21:22:41 +0000280
Fred Drake0514ce11997-12-16 14:29:48 +0000281Example: Build a dictionary that maps the ordinals from \code{0} to
282\code{256} to their character equivalents.
Guido van Rossum61ed4db1996-12-06 21:22:41 +0000283
Fred Drake19479911998-02-13 06:58:54 +0000284\begin{verbatim}
Guido van Rossum61ed4db1996-12-06 21:22:41 +0000285>>> import operator
286>>> d = {}
287>>> keys = range(256)
288>>> vals = map(chr, keys)
289>>> map(operator.setitem, [d]*len(keys), keys, vals)
Fred Drake19479911998-02-13 06:58:54 +0000290\end{verbatim}
Fred Drake8c2fd492000-10-22 03:19:30 +0000291
292
293\subsection{Mapping Operators to Functions \label{operator-map}}
294
295This table shows how abstract operations correspond to operator
296symbols in the Python syntax and the functions in the
297\refmodule{operator} module.
298
299
300\begin{tableiii}{l|c|l}{textrm}{Operation}{Syntax}{Function}
301 \lineiii{Addition}{\code{\var{a} + \var{b}}}
302 {\code{add(\var{a}, \var{b})}}
303 \lineiii{Concatenation}{\code{\var{seq1} + \var{seq2}}}
304 {\code{concat(\var{seq1}, \var{seq2})}}
305 \lineiii{Containment Test}{\code{\var{o} in \var{seq}}}
306 {\code{contains(\var{seq}, \var{o})}}
307 \lineiii{Division}{\code{\var{a} / \var{b}}}
Fred Drakee89659c2001-08-10 15:55:09 +0000308 {\code{div(\var{a}, \var{b}) \#} without \code{__future__.division}}
309 \lineiii{Division}{\code{\var{a} / \var{b}}}
310 {\code{truediv(\var{a}, \var{b}) \#} with \code{__future__.division}}
311 \lineiii{Division}{\code{\var{a} // \var{b}}}
312 {\code{floordiv(\var{a}, \var{b})}}
Fred Drake8c2fd492000-10-22 03:19:30 +0000313 \lineiii{Bitwise And}{\code{\var{a} \&\ \var{b}}}
314 {\code{and_(\var{a}, \var{b})}}
315 \lineiii{Bitwise Exclusive Or}{\code{\var{a} \^\ \var{b}}}
316 {\code{xor(\var{a}, \var{b})}}
317 \lineiii{Bitwise Inversion}{\code{\~{} \var{a}}}
318 {\code{invert(\var{a})}}
319 \lineiii{Bitwise Or}{\code{\var{a} | \var{b}}}
320 {\code{or_(\var{a}, \var{b})}}
Raymond Hettinger5959c552002-08-19 03:19:09 +0000321 \lineiii{Exponentiation}{\code{\var{a} ** \var{b}}}
322 {\code{pow(\var{a}, \var{b})}}
Fred Drake8c2fd492000-10-22 03:19:30 +0000323 \lineiii{Indexed Assignment}{\code{\var{o}[\var{k}] = \var{v}}}
324 {\code{setitem(\var{o}, \var{k}, \var{v})}}
325 \lineiii{Indexed Deletion}{\code{del \var{o}[\var{k}]}}
326 {\code{delitem(\var{o}, \var{k})}}
327 \lineiii{Indexing}{\code{\var{o}[\var{k}]}}
328 {\code{getitem(\var{o}, \var{k})}}
329 \lineiii{Left Shift}{\code{\var{a} <\code{<} \var{b}}}
330 {\code{lshift(\var{a}, \var{b})}}
331 \lineiii{Modulo}{\code{\var{a} \%\ \var{b}}}
332 {\code{mod(\var{a}, \var{b})}}
333 \lineiii{Multiplication}{\code{\var{a} * \var{b}}}
334 {\code{mul(\var{a}, \var{b})}}
335 \lineiii{Negation (Arithmetic)}{\code{- \var{a}}}
336 {\code{neg(\var{a})}}
337 \lineiii{Negation (Logical)}{\code{not \var{a}}}
338 {\code{not_(\var{a})}}
339 \lineiii{Right Shift}{\code{\var{a} >\code{>} \var{b}}}
340 {\code{rshift(\var{a}, \var{b})}}
341 \lineiii{Sequence Repitition}{\code{\var{seq} * \var{i}}}
342 {\code{repeat(\var{seq}, \var{i})}}
343 \lineiii{Slice Assignment}{\code{\var{seq}[\var{i}:\var{j}]} = \var{values}}
344 {\code{setslice(\var{seq}, \var{i}, \var{j}, \var{values})}}
345 \lineiii{Slice Deletion}{\code{del \var{seq}[\var{i}:\var{j}]}}
346 {\code{delslice(\var{seq}, \var{i}, \var{j})}}
347 \lineiii{Slicing}{\code{\var{seq}[\var{i}:\var{j}]}}
348 {\code{getslice(\var{seq}, \var{i}, \var{j})}}
349 \lineiii{String Formatting}{\code{\var{s} \%\ \var{o}}}
350 {\code{mod(\var{s}, \var{o})}}
351 \lineiii{Subtraction}{\code{\var{a} - \var{b}}}
352 {\code{sub(\var{a}, \var{b})}}
353 \lineiii{Truth Test}{\code{\var{o}}}
354 {\code{truth(\var{o})}}
Fred Drakee89659c2001-08-10 15:55:09 +0000355 \lineiii{Ordering}{\code{\var{a} < \var{b}}}
356 {\code{lt(\var{a}, \var{b})}}
357 \lineiii{Ordering}{\code{\var{a} <= \var{b}}}
358 {\code{le(\var{a}, \var{b})}}
359 \lineiii{Equality}{\code{\var{a} == \var{b}}}
360 {\code{eq(\var{a}, \var{b})}}
361 \lineiii{Difference}{\code{\var{a} != \var{b}}}
362 {\code{ne(\var{a}, \var{b})}}
363 \lineiii{Ordering}{\code{\var{a} >= \var{b}}}
364 {\code{ge(\var{a}, \var{b})}}
365 \lineiii{Ordering}{\code{\var{a} > \var{b}}}
366 {\code{gt(\var{a}, \var{b})}}
Fred Drake8c2fd492000-10-22 03:19:30 +0000367\end{tableiii}