diff options
Diffstat (limited to 'Doc')
-rw-r--r-- | Doc/lib/libtypes.tex | 39 | ||||
-rw-r--r-- | Doc/libtypes.tex | 39 |
2 files changed, 56 insertions, 22 deletions
diff --git a/Doc/lib/libtypes.tex b/Doc/lib/libtypes.tex index b780375..6bbedce 100644 --- a/Doc/lib/libtypes.tex +++ b/Doc/lib/libtypes.tex @@ -143,8 +143,9 @@ Two more operations with the same syntactic priority, \code{in} and \subsection{Numeric Types} -There are three numeric types: \dfn{plain integers}, \dfn{long integers}, and -\dfn{floating point numbers}. Plain integers (also just called \dfn{integers}) +There are four numeric types: \dfn{plain integers}, \dfn{long integers}, +\dfn{floating point numbers}, and \dfn{complex numbers}. +Plain integers (also just called \dfn{integers}) are implemented using \code{long} in \C{}, which gives them at least 32 bits of precision. Long integers have unlimited precision. Floating point numbers are implemented using \code{double} in \C{}. All bets on @@ -155,35 +156,45 @@ working with. \indexii{integer}{type} \indexiii{long}{integer}{type} \indexii{floating point}{type} +\indexii{complex number}{type} \indexii{\C{}}{language} +Complex numbers have a real and imaginary part, which are both +implemented using \code{double} in \C{}. To extract these parts from +a complex number \code{z}, use \code{z.real} and \code{z.imag}. + Numbers are created by numeric literals or as the result of built-in functions and operators. Unadorned integer literals (including hex and octal numbers) yield plain integers. Integer literals with an \samp{L} or \samp{l} suffix yield long integers (\samp{L} is preferred because \code{1l} looks too much like eleven!). Numeric literals containing a decimal point or an exponent sign yield -floating point numbers. +floating point numbers. Appending \code{j} or \code{J} to a numeric +literal yields a complex number. \indexii{numeric}{literals} \indexii{integer}{literals} \indexiii{long}{integer}{literals} \indexii{floating point}{literals} +\indexii{complex number}{literals} \indexii{hexadecimal}{literals} \indexii{octal}{literals} Python fully supports mixed arithmetic: when a binary arithmetic operator has operands of different numeric types, the operand with the ``smaller'' type is converted to that of the other, where plain -integer is smaller than long integer is smaller than floating point. +integer is smaller than long integer is smaller than floating point is +smaller than complex. Comparisons between numbers of mixed type use the same rule.% \footnote{As a consequence, the list \code{[1, 2]} is considered equal to \code{[1.0, 2.0]}, and similar for tuples.} -The functions \code{int()}, \code{long()} and \code{float()} can be used +The functions \code{int()}, \code{long()}, \code{float()}, +and \code{complex()} can be used to coerce numbers to a specific type. \index{arithmetic} \bifuncindex{int} \bifuncindex{long} \bifuncindex{float} +\bifuncindex{complex} All numeric types support the following operations, sorted by ascending priority (operations in the same box have the same @@ -201,12 +212,14 @@ comparison operations): \lineiii{-\var{x}}{\var{x} negated}{} \lineiii{+\var{x}}{\var{x} unchanged}{} \hline - \lineiii{abs(\var{x})}{absolute value of \var{x}}{} + \lineiii{abs(\var{x})}{absolute value or magnitude of \var{x}}{} \lineiii{int(\var{x})}{\var{x} converted to integer}{(2)} \lineiii{long(\var{x})}{\var{x} converted to long integer}{(2)} \lineiii{float(\var{x})}{\var{x} converted to floating point}{} + \lineiii{complex(\var{re},\var{im})}{a complex number with real part \var{re}, imaginary part \var{im}. \var{im} defaults to zero.}{} \lineiii{divmod(\var{x}, \var{y})}{the pair \code{(\var{x} / \var{y}, \var{x} \%{} \var{y})}}{(3)} \lineiii{pow(\var{x}, \var{y})}{\var{x} to the power \var{y}}{} + \lineiii{\var{x}**\var{y}}{\var{x} to the power \var{y}}{} \end{tableiii} \indexiii{operations on}{numeric}{types} @@ -439,11 +452,9 @@ The following operations are defined on mutable sequence types (where \lineiii{\var{s}.remove(\var{x})} {same as \code{del \var{s}[\var{s}.index(\var{x})]}}{(1)} \lineiii{\var{s}.reverse()} - {reverses the items of \var{s} in place}{} + {reverses the items of \var{s} in place}{(3)} \lineiii{\var{s}.sort()} - {permutes the items of \var{s} to satisfy - \code{\var{s}[\var{i}] <= \var{s}[\var{j}]}, - for \code{\var{i} < \var{j}}}{(2)} + {sort the items of \var{s} in place}{(2), (3)} \end{tableiii} \indexiv{operations on}{mutable}{sequence}{types} \indexiii{operations on}{sequence}{types} @@ -474,6 +485,12 @@ Notes: to use calls to \code{sort()} and \code{reverse()} than to use \code{sort()} with a comparison function that reverses the ordering of the elements. + +\item[(3)] The \code{sort()} and \code{reverse()} methods modify the +list in place for economy of space when sorting or reversing a large +list. They don't return the sorted or reversed list to remind you of +this side effect. + \end{description} \subsection{Mapping Types} @@ -504,12 +521,12 @@ mapping, \var{k} is a key and \var{x} is an arbitrary object): \lineiii{\var{a}[\var{k}]}{the item of \var{a} with key \var{k}}{(1)} \lineiii{\var{a}[\var{k}] = \var{x}}{set \code{\var{a}[\var{k}]} to \var{x}}{} \lineiii{del \var{a}[\var{k}]}{remove \code{\var{a}[\var{k}]} from \var{a}}{(1)} - \lineiii{\var{a}.absorb(b)}{\code{for k, v in b.items(): a[k] = v}}{(3)} \lineiii{\var{a}.clear()}{remove all items from \code{a}}{} \lineiii{\var{a}.copy()}{a (shallow) copy of \code{a}}{} \lineiii{\var{a}.has_key(\var{k})}{\code{1} if \var{a} has a key \var{k}, else \code{0}}{} \lineiii{\var{a}.items()}{a copy of \var{a}'s list of (key, item) pairs}{(2)} \lineiii{\var{a}.keys()}{a copy of \var{a}'s list of keys}{(2)} + \lineiii{\var{a}.update(b)}{\code{for k, v in b.items(): a[k] = v}}{(3)} \lineiii{\var{a}.values()}{a copy of \var{a}'s list of values}{(2)} \end{tableiii} \indexiii{operations on}{mapping}{types} diff --git a/Doc/libtypes.tex b/Doc/libtypes.tex index b780375..6bbedce 100644 --- a/Doc/libtypes.tex +++ b/Doc/libtypes.tex @@ -143,8 +143,9 @@ Two more operations with the same syntactic priority, \code{in} and \subsection{Numeric Types} -There are three numeric types: \dfn{plain integers}, \dfn{long integers}, and -\dfn{floating point numbers}. Plain integers (also just called \dfn{integers}) +There are four numeric types: \dfn{plain integers}, \dfn{long integers}, +\dfn{floating point numbers}, and \dfn{complex numbers}. +Plain integers (also just called \dfn{integers}) are implemented using \code{long} in \C{}, which gives them at least 32 bits of precision. Long integers have unlimited precision. Floating point numbers are implemented using \code{double} in \C{}. All bets on @@ -155,35 +156,45 @@ working with. \indexii{integer}{type} \indexiii{long}{integer}{type} \indexii{floating point}{type} +\indexii{complex number}{type} \indexii{\C{}}{language} +Complex numbers have a real and imaginary part, which are both +implemented using \code{double} in \C{}. To extract these parts from +a complex number \code{z}, use \code{z.real} and \code{z.imag}. + Numbers are created by numeric literals or as the result of built-in functions and operators. Unadorned integer literals (including hex and octal numbers) yield plain integers. Integer literals with an \samp{L} or \samp{l} suffix yield long integers (\samp{L} is preferred because \code{1l} looks too much like eleven!). Numeric literals containing a decimal point or an exponent sign yield -floating point numbers. +floating point numbers. Appending \code{j} or \code{J} to a numeric +literal yields a complex number. \indexii{numeric}{literals} \indexii{integer}{literals} \indexiii{long}{integer}{literals} \indexii{floating point}{literals} +\indexii{complex number}{literals} \indexii{hexadecimal}{literals} \indexii{octal}{literals} Python fully supports mixed arithmetic: when a binary arithmetic operator has operands of different numeric types, the operand with the ``smaller'' type is converted to that of the other, where plain -integer is smaller than long integer is smaller than floating point. +integer is smaller than long integer is smaller than floating point is +smaller than complex. Comparisons between numbers of mixed type use the same rule.% \footnote{As a consequence, the list \code{[1, 2]} is considered equal to \code{[1.0, 2.0]}, and similar for tuples.} -The functions \code{int()}, \code{long()} and \code{float()} can be used +The functions \code{int()}, \code{long()}, \code{float()}, +and \code{complex()} can be used to coerce numbers to a specific type. \index{arithmetic} \bifuncindex{int} \bifuncindex{long} \bifuncindex{float} +\bifuncindex{complex} All numeric types support the following operations, sorted by ascending priority (operations in the same box have the same @@ -201,12 +212,14 @@ comparison operations): \lineiii{-\var{x}}{\var{x} negated}{} \lineiii{+\var{x}}{\var{x} unchanged}{} \hline - \lineiii{abs(\var{x})}{absolute value of \var{x}}{} + \lineiii{abs(\var{x})}{absolute value or magnitude of \var{x}}{} \lineiii{int(\var{x})}{\var{x} converted to integer}{(2)} \lineiii{long(\var{x})}{\var{x} converted to long integer}{(2)} \lineiii{float(\var{x})}{\var{x} converted to floating point}{} + \lineiii{complex(\var{re},\var{im})}{a complex number with real part \var{re}, imaginary part \var{im}. \var{im} defaults to zero.}{} \lineiii{divmod(\var{x}, \var{y})}{the pair \code{(\var{x} / \var{y}, \var{x} \%{} \var{y})}}{(3)} \lineiii{pow(\var{x}, \var{y})}{\var{x} to the power \var{y}}{} + \lineiii{\var{x}**\var{y}}{\var{x} to the power \var{y}}{} \end{tableiii} \indexiii{operations on}{numeric}{types} @@ -439,11 +452,9 @@ The following operations are defined on mutable sequence types (where \lineiii{\var{s}.remove(\var{x})} {same as \code{del \var{s}[\var{s}.index(\var{x})]}}{(1)} \lineiii{\var{s}.reverse()} - {reverses the items of \var{s} in place}{} + {reverses the items of \var{s} in place}{(3)} \lineiii{\var{s}.sort()} - {permutes the items of \var{s} to satisfy - \code{\var{s}[\var{i}] <= \var{s}[\var{j}]}, - for \code{\var{i} < \var{j}}}{(2)} + {sort the items of \var{s} in place}{(2), (3)} \end{tableiii} \indexiv{operations on}{mutable}{sequence}{types} \indexiii{operations on}{sequence}{types} @@ -474,6 +485,12 @@ Notes: to use calls to \code{sort()} and \code{reverse()} than to use \code{sort()} with a comparison function that reverses the ordering of the elements. + +\item[(3)] The \code{sort()} and \code{reverse()} methods modify the +list in place for economy of space when sorting or reversing a large +list. They don't return the sorted or reversed list to remind you of +this side effect. + \end{description} \subsection{Mapping Types} @@ -504,12 +521,12 @@ mapping, \var{k} is a key and \var{x} is an arbitrary object): \lineiii{\var{a}[\var{k}]}{the item of \var{a} with key \var{k}}{(1)} \lineiii{\var{a}[\var{k}] = \var{x}}{set \code{\var{a}[\var{k}]} to \var{x}}{} \lineiii{del \var{a}[\var{k}]}{remove \code{\var{a}[\var{k}]} from \var{a}}{(1)} - \lineiii{\var{a}.absorb(b)}{\code{for k, v in b.items(): a[k] = v}}{(3)} \lineiii{\var{a}.clear()}{remove all items from \code{a}}{} \lineiii{\var{a}.copy()}{a (shallow) copy of \code{a}}{} \lineiii{\var{a}.has_key(\var{k})}{\code{1} if \var{a} has a key \var{k}, else \code{0}}{} \lineiii{\var{a}.items()}{a copy of \var{a}'s list of (key, item) pairs}{(2)} \lineiii{\var{a}.keys()}{a copy of \var{a}'s list of keys}{(2)} + \lineiii{\var{a}.update(b)}{\code{for k, v in b.items(): a[k] = v}}{(3)} \lineiii{\var{a}.values()}{a copy of \var{a}'s list of values}{(2)} \end{tableiii} \indexiii{operations on}{mapping}{types} |