Skip to content

Commit 8d6f119

Browse files
committed
even better overview
1 parent 324a0d7 commit 8d6f119

File tree

3 files changed

+75
-29
lines changed

3 files changed

+75
-29
lines changed

bibliography/bibliography.bib

+1-1
Original file line numberDiff line numberDiff line change
@@ -2480,7 +2480,7 @@ @techreport{PEP591
24802480

24812481
@techreport{PEP604,
24822482
author = a_prados_philippe # and # a_moss_maggie,
2483-
title = {Allow Writing Union Types as \pythonil{X | Y}\pythonIdx{"|}},
2483+
title = {Allow Writing Union Types as \pythonil{X | Y}\pythonIdx{\textbar}},
24842484
xdata = {rep_pep},
24852485
number = {604},
24862486
date = {2019-08-28},

styles/listing.sty

+5
Original file line numberDiff line numberDiff line change
@@ -332,3 +332,8 @@ showspaces=#1%
332332
\endcenter%
333333
}%
334334
%
335+
%% A dunder method
336+
%% #1 the method name
337+
%% This addss the underscores and a index entry.
338+
\protected\gdef\dunder#1{\expandafter\pythonilIdx{\_\_#1\_\_}\expandafter\pythonIdx{dunder!\_\_#1\_\_}}%
339+
%

text/main/classes/dunder/dunder.tex

+69-28
Original file line numberDiff line numberDiff line change
@@ -479,11 +479,11 @@
479479
%
480480
\item \pythonilIdx{\_\_lt\_\_}\pythonIdx{dunder!\_\_lt\_\_} implements the functionality of~\pythonilIdx{<}.%
481481
%
482-
\item \pythonilIdx{\_\_le\_\_}\pythonIdx{dunder!\_\_le\_\_} implements the functionality of~\pythonilIdx{<=}.%
482+
\item \pythonilIdx{\_\_le\_\_}\pythonIdx{dunder!\_\_le\_\_} implements the functionality of~\pythonil{<=}\pythonIdx{<=}.%
483483
%
484484
\item \pythonilIdx{\_\_gt\_\_}\pythonIdx{dunder!\_\_gt\_\_} implements the functionality of~\pythonilIdx{>}.%
485485
%
486-
\item \pythonilIdx{\_\_ge\_\_}\pythonIdx{dunder!\_\_ge\_\_} implements the functionality of~\pythonilIdx{>=}.%
486+
\item \pythonilIdx{\_\_ge\_\_}\pythonIdx{dunder!\_\_ge\_\_} implements the functionality of~\pythonil{>=}\pythonIdx{>=}.%
487487
\end{itemize}%
488488
%
489489
Implementing equality and inequality is rather easy, since our fractions are all normalized.
@@ -1465,7 +1465,6 @@
14651465
\begin{figure}%
14661466
\renewcommand*\DTstylecomment{\relax}%
14671467
\renewcommand*\DTstyle{\small}%
1468-
\def\dunder#1{\expandafter\pythonilIdx{\_\_#1\_\_}\expandafter\pythonIdx{dunder!\_\_#1\_\_}}%
14691468
%
14701469
\dirtree{%
14711470
.1 \pythonilIdx{\_\_}.
@@ -1482,12 +1481,12 @@
14821481
.2 Hashing.
14831482
.3 \dunder{hash}\DTcomment{compute an integer value representing this object; \pythonil{hash(a)}~$\cong$~\pythonil{a.\_\_hash\_\_()}}.
14841483
.2 Ordering and Equality.
1485-
.3 \dunder{eq}\DTcomment{equality: \pythonil{a == b}~$\cong$~\pythonil{a.\_\_eq\_\_(b)}}.
1486-
.3 \dunder{ne}\DTcomment{inequality: \pythonil{a != b}~$\cong$~\pythonil{a.\_\_ne\_\_(b)}}.
1487-
.3 \dunder{lt}\DTcomment{less than: \pythonil{a < b}~$\cong$~\pythonil{a.\_\_lt\_\_(b)}}.
1488-
.3 \dunder{le}\DTcomment{less than or equal: \pythonil{a <= b}~$\cong$~\pythonil{a.\_\_le\_\_(b)}}.
1489-
.3 \dunder{gt}\DTcomment{greater than: \pythonil{a > b}~$\cong$~\pythonil{a.\_\_gt\_\_(b)}}.
1490-
.3 \dunder{ge}\DTcomment{greater than or equal: \pythonil{a >= b}~$\cong$~\pythonil{a.\_\_ge\_\_(b)}}.
1484+
.3 \dunder{eq}\DTcomment{equality: \pythonil{a == b}\pythonIdx{==}~$\cong$~\pythonil{a.\_\_eq\_\_(b)}}.
1485+
.3 \dunder{ne}\DTcomment{inequality: \pythonil{a != b}\pythonIdx{"!==}~$\cong$~\pythonil{a.\_\_ne\_\_(b)}}.
1486+
.3 \dunder{lt}\DTcomment{less than: \pythonil{a < b}\pythonIdx{<}~$\cong$~\pythonil{a.\_\_lt\_\_(b)}}.
1487+
.3 \dunder{le}\DTcomment{less than or equal: \pythonil{a <= b}\pythonIdx{<=}~$\cong$~\pythonil{a.\_\_le\_\_(b)}}.
1488+
.3 \dunder{gt}\DTcomment{greater than: \pythonil{a > b}\pythonIdx{>}~$\cong$~\pythonil{a.\_\_gt\_\_(b)}}.
1489+
.3 \dunder{ge}\DTcomment{greater than or equal: \pythonil{a >= b}\pythonIdx{>=}~$\cong$~\pythonil{a.\_\_ge\_\_(b)}}.
14911490
.2 Context Managers.
14921491
.3 \dunder{enter}\DTcomment{enter a \pythonil{with a as x}\pythonIdx{with} statement, returns the value~\pythonil{x} given to \pythonilIdx{as}}.
14931492
.3 \dunder{exit}\DTcomment{leave a \pythonilIdx{with} statement, receive exception information, returns~\pythonil{False} to re-raise caught exceptions, if any}.
@@ -1500,6 +1499,10 @@
15001499
.3 \dunder{delitem}\DTcomment{delete element at index/key; \pythonil{del a[x]}\pythonIdx{del}~$\cong$~\pythonil{a.\_\_detitem\_\_(x)}}.
15011500
.3 \dunder{reversed}\DTcomment{iterate backwards; \pythonil{reverse(a)}~$\cong$~\pythonil{a.\_\_reversed\_\_()}}.
15021501
.3 \dunder{next}\DTcomment{get next element from iterator; \pythonil{next(i)}~$\cong$~\pythonil{i.\_\_next\_\_()}}.
1502+
.2 Classes.
1503+
.3 \dunder{new}\DTcomment{create a new instance of a class: \pythonil{cls(a, b=c)}~$\cong$~\pythonil{T.\_\_new\_\_(cls, a, b=c)}, is then followed by~\pythonil{cls.\_\_init\_\_(a, b=c)}}.
1504+
.3 \dunder{init}\DTcomment{initialize an object: \pythonil{cls(a, b=c)}~$\cong$~\pythonil{cls.\_\_init\_\_(a, b=c)}}.
1505+
.3 \dunder{call}\DTcomment{call an object like a function: \pythonil{a(b, c=d)}~$\cong$~\pythonil{a.\_\_call\_\_(b, c=d)}}.
15031506
}%
15041507
%
15051508
\caption{An overview of the dunder in \python\ (Part~1).}%
@@ -1509,43 +1512,81 @@
15091512
\begin{figure}%
15101513
\renewcommand*\DTstylecomment{\relax}%
15111514
\renewcommand*\DTstyle{\small}%
1512-
\def\dunder#1{\expandafter\pythonilIdx{\_\_#1\_\_}\expandafter\pythonIdx{dunder!\_\_#1\_\_}}%
15131515
%
15141516
\dirtree{%
15151517
.1 \pythonilIdx{\_\_}.
15161518
.2 Arithmetics.
1517-
.3 \dunder{abs}\DTcomment{abs: \pythonil{abs(a)}\pythonIdx{abs}~$\cong$~\pythonil{a.\_\_abs\_\_()}}.
1519+
.3 \dunder{abs}\DTcomment{absolute value: \pythonil{abs(a)}\pythonIdx{abs}~$\cong$~\pythonil{a.\_\_abs\_\_()}}.
1520+
.3 \dunder{minus}\DTcomment{negate: \pythonil{-a}\pythonIdx{-}~$\cong$~\pythonil{a.\_\_minus\_\_()}}.
1521+
.3 \dunder{pos}\DTcomment{positive: \pythonil{+a}\pythonIdx{+}~$\cong$~\pythonil{a.\_\_pos\_\_()}}.
1522+
.3 \dunder{invert}\DTcomment{invert: \pythonil{\~a}\pythonIdx{\texttildelow}~$\cong$~\pythonil{a.\_\_invert\_\_()}}.
15181523
.3 \dunder{add}\DTcomment{add: \pythonil{a + b}\pythonIdx{+}~$\cong$~\pythonil{a.\_\_add\_\_(b)}}.
15191524
.3 \dunder{radd}\DTcomment{right-add: \pythonil{a + b}\pythonIdx{+}~$\cong$~\pythonil{b.\_\_radd\_\_(a)}, if \pythonil{a.\_\_add\_\_(b)} yields~\pythonilIdx{NotImplemented}}.
15201525
.3 \dunder{sub}\DTcomment{subtract: \pythonil{a - b}\pythonIdx{-}~$\cong$~\pythonil{a.\_\_sub\_\_(b)}}.
15211526
.3 \dunder{rsub}\DTcomment{right-subtract: \pythonil{a - b}\pythonIdx{-}~$\cong$~\pythonil{b.\_\_rsub\_\_(a)}, if \pythonil{a.\_\_sub\_\_(b)} yields~\pythonilIdx{NotImplemented}}.
15221527
.3 \dunder{mul}\DTcomment{multiply: \pythonil{a * b}\pythonIdx{*}~$\cong$~\pythonil{a.\_\_mul\_\_(b)}}.
15231528
.3 \dunder{rmul}\DTcomment{right-multiply: \pythonil{a * b}\pythonIdx{*}~$\cong$~\pythonil{b.\_\_rmul\_\_(a)}, if \pythonil{a.\_\_mul\_\_(b)} yields~\pythonilIdx{NotImplemented}}.
15241529
.3 \dunder{truediv}\DTcomment{divide: \pythonil{a / b}\pythonIdx{/}~$\cong$~\pythonil{a.\_\_truediv\_\_(b)}}.
1525-
.3 \dunder{rtruediv}\DTcomment{right-divide: \pythonil{a / b}\pythonIdx{/} $\equiv$ \pythonil{b.\_\_rtruediv\_\_(a)}, if \pythonil{a.\_\_truediv\_\_(b)} yields~\pythonilIdx{NotImplemented}}.
1526-
.3 \dunder{mod}\DTcomment{modulo-divide: \pythonil{a \% b}\pythonIdx{\%} $\equiv$ \pythonil{a.\_\_mod\_\_(b)}}.
1527-
.3 \dunder{rmod}\DTcomment{right-modulo-divide: \pythonil{a \% b}\pythonIdx{\%} $\equiv$ \pythonil{b.\_\_rmod\_\_(a)}, if \pythonil{a.\_\_mod\_\_(b)} yields~\pythonilIdx{NotImplemented}}.
1528-
.3 \dunder{floordiv}\DTcomment{integer-divide: \pythonil{a // b}\pythonIdx{//} $\equiv$ \pythonil{a.\_\_floordiv\_\_(b)}}.
1529-
.3 \dunder{rfloordiv}\DTcomment{right-integer-divide: \pythonil{a // b}\pythonIdx{//} $\equiv$ \pythonil{b.\_\_rfloordiv\_\_(a)}, if \pythonil{a.\_\_floordiv\_\_(b)} yields~\pythonilIdx{NotImplemented}}.
1530-
.3 \dunder{pow}\DTcomment{exponential: \pythonil{a ** b}\pythonIdx{**} $\equiv$ \pythonil{a.\_\_pow\_\_(b)}}.
1531-
.3 \dunder{rpow}\DTcomment{right-exponential: \pythonil{a ** b}\pythonIdx{**} $\equiv$ \pythonil{b.\_\_rpow\_\_(a)}, if \pythonil{a.\_\_pow\_\_(b)} yields~\pythonilIdx{NotImplemented}}.
1532-
.3 \dunder{matmul}\DTcomment{matrix-multiply: \pythonil{a @ b}\pythonIdx{@} $\equiv$ \pythonil{a.\_\_matmul\_\_(b)}}.
1533-
.3 \dunder{rmatmul}\DTcomment{right-matrix-multiply: \pythonil{a @ b}\pythonIdx{@} $\equiv$ \pythonil{b.\_\_rmatmul\_\_(a)}, if \pythonil{a.\_\_matmul\_\_(b)} yields~\pythonilIdx{NotImplemented}}.
1530+
.3 \dunder{rtruediv}\DTcomment{right-divide: \pythonil{a / b}\pythonIdx{/}~$\cong$~\pythonil{b.\_\_rtruediv\_\_(a)}, if \pythonil{a.\_\_truediv\_\_(b)} yields~\pythonilIdx{NotImplemented}}.
1531+
.3 \dunder{mod}\DTcomment{modulo-divide: \pythonil{a \% b}\pythonIdx{\%}~$\cong$~\pythonil{a.\_\_mod\_\_(b)}}.
1532+
.3 \dunder{rmod}\DTcomment{right-modulo-divide: \pythonil{a \% b}\pythonIdx{\%}~$\cong$~\pythonil{b.\_\_rmod\_\_(a)}, if \pythonil{a.\_\_mod\_\_(b)} yields~\pythonilIdx{NotImplemented}}.
1533+
.3 \dunder{floordiv}\DTcomment{integer-divide: \pythonil{a // b}\pythonIdx{//}~$\cong$~\pythonil{a.\_\_floordiv\_\_(b)}}.
1534+
.3 \dunder{rfloordiv}\DTcomment{right-integer-divide: \pythonil{a // b}\pythonIdx{//}~$\cong$~\pythonil{b.\_\_rfloordiv\_\_(a)}, if \pythonil{a.\_\_floordiv\_\_(b)} yields~\pythonilIdx{NotImplemented}}.
1535+
.3 \dunder{pow}\DTcomment{exponential: \pythonil{a ** b}\pythonIdx{**}~$\cong$~\pythonil{a.\_\_pow\_\_(b)}}.
1536+
.3 \dunder{rpow}\DTcomment{right-exponential: \pythonil{a ** b}\pythonIdx{**}~$\cong$~\pythonil{b.\_\_rpow\_\_(a)}, if \pythonil{a.\_\_pow\_\_(b)} yields~\pythonilIdx{NotImplemented}}.
1537+
.3 \dunder{matmul}\DTcomment{matrix-multiply: \pythonil{a @ b}\pythonIdx{@}~$\cong$~\pythonil{a.\_\_matmul\_\_(b)}}.
1538+
.3 \dunder{rmatmul}\DTcomment{right-matrix-multiply: \pythonil{a @ b}\pythonIdx{@}~$\cong$~\pythonil{b.\_\_rmatmul\_\_(a)}, if \pythonil{a.\_\_matmul\_\_(b)} yields~\pythonilIdx{NotImplemented}}.
1539+
.3 \dunder{divmod}\DTcomment{compute the result of an integer division as well as the remainder and return them as 2-tuple: \pythonil{divmod(a, b)}\pythonIdx{divmod}~$\cong$~\pythonil{a.\_\_divmod\_\_(b)}}.
1540+
.3 \dunder{rdivmod}\DTcomment{right-sided \pythonilIdx{divmod}: \pythonil{divmod(a, b)}\pythonIdx{divmod}~$\cong$~\pythonil{b.\_\_divmod\_\_(a)}, if \pythonil{a.\_\_divmod\_\_(b)} yields~\pythonilIdx{NotImplemented}}.
1541+
.3 \dunder{round}\DTcomment{round: \pythonil{round(a)}\pythonIdx{round}~$\cong$~\pythonil{a.\_\_round\_\_()}}.
1542+
.3 \dunder{trunc}\DTcomment{truncated to integer: \pythonil{math.trunc(a)}\pythonIdx{trunc}\pythonIdx{math!trunc}~$\cong$~\pythonil{a.\_\_trunc\_\_()}}.
1543+
.3 \dunder{floor}\DTcomment{round towards~$-\infty$: \pythonil{math.floor(a)}\pythonIdx{floor}\pythonIdx{math!floor}~$\cong$~\pythonil{a.\_\_floor\_\_()}}.
1544+
.3 \dunder{ceil}\DTcomment{round towards~$+\infty$: \pythonil{math.ceil(a)}\pythonIdx{ceil}\pythonIdx{math!ceil}~$\cong$~\pythonil{a.\_\_ceil\_\_()}}.
15341545
.2 In-Place Arithmetics.
1535-
.3 \dunder{iadd}\DTcomment{in-place addition: \pythonil{a += b}\pythonIdx{+=} $\equiv$ \pythonil{a.\_\_iadd\_\_(b)}, returns~\pythonilIdx{self}}.
1536-
.3 \dunder{isub}\DTcomment{in-place subtraction: \pythonil{a -= b}\pythonIdx{-=} $\equiv$ \pythonil{a.\_\_isub\_\_(b)}, returns~\pythonilIdx{self}}.
1537-
.3 \dunder{imul}\DTcomment{in-place multiplication: \pythonil{a *= b}\pythonIdx{*=} $\equiv$ \pythonil{a.\_\_imul\_\_(b)}, returns~\pythonilIdx{self}}.
1538-
.3 \dunder{itruediv}\DTcomment{in-place division: \pythonil{a /= b}\pythonIdx{/=} $\equiv$ \pythonil{a.\_\_itruediv\_\_(b)}, returns~\pythonilIdx{self}}.
1539-
.3 \dunder{imod}\DTcomment{in-place modulo division: \pythonil{a \%= b}\pythonIdx{\%=} $\equiv$ \pythonil{a.\_\_imod\_\_(b)}, returns~\pythonilIdx{self}}.
1540-
.3 \dunder{ifloordiv}\DTcomment{in-place integer division: \pythonil{a //= b}\pythonIdx{//=} $\equiv$ \pythonil{a.\_\_ifloordiv\_\_(b)}, returns~\pythonilIdx{self}}.
1541-
.3 \dunder{ipow}\DTcomment{in-place exponentiation: \pythonil{a **= b}\pythonIdx{**=} $\equiv$ \pythonil{a.\_\_ipow\_\_(b)}, returns~\pythonilIdx{self}}.
1542-
.3 \dunder{imatmul}\DTcomment{in-place matrix multiplication: \pythonil{a @= b}\pythonIdx{@=} $\equiv$ \pythonil{a.\_\_imatmul\_\_(b)}, returns~\pythonilIdx{self}}.
1546+
.3 \dunder{iadd}\DTcomment{in-place addition: \pythonil{a += b}\pythonIdx{+=}~$\cong$~\pythonil{a.\_\_iadd\_\_(b)}, returns~\pythonilIdx{self}}.
1547+
.3 \dunder{isub}\DTcomment{in-place subtraction: \pythonil{a -= b}\pythonIdx{-=}~$\cong$~\pythonil{a.\_\_isub\_\_(b)}, returns~\pythonilIdx{self}}.
1548+
.3 \dunder{imul}\DTcomment{in-place multiplication: \pythonil{a *= b}\pythonIdx{*=}~$\cong$~\pythonil{a.\_\_imul\_\_(b)}, returns~\pythonilIdx{self}}.
1549+
.3 \dunder{itruediv}\DTcomment{in-place division: \pythonil{a /= b}\pythonIdx{/=}~$\cong$~\pythonil{a.\_\_itruediv\_\_(b)}, returns~\pythonilIdx{self}}.
1550+
.3 \dunder{imod}\DTcomment{in-place modulo division: \pythonil{a \%= b}\pythonIdx{\%=}~$\cong$~\pythonil{a.\_\_imod\_\_(b)}, returns~\pythonilIdx{self}}.
1551+
.3 \dunder{ifloordiv}\DTcomment{in-place integer division: \pythonil{a //= b}\pythonIdx{//=}~$\cong$~\pythonil{a.\_\_ifloordiv\_\_(b)}, returns~\pythonilIdx{self}}.
1552+
.3 \dunder{ipow}\DTcomment{in-place exponentiation: \pythonil{a **= b}\pythonIdx{**=}~$\cong$~\pythonil{a.\_\_ipow\_\_(b)}, returns~\pythonilIdx{self}}.
1553+
.3 \dunder{imatmul}\DTcomment{in-place matrix multiplication: \pythonil{a @= b}\pythonIdx{@=}~$\cong$~\pythonil{a.\_\_imatmul\_\_(b)}, returns~\pythonilIdx{self}}.
15431554
}%
15441555
%
15451556
\caption{An overview of the dunder in \python\ (Part~2).}%
15461557
\label{fig:pythonDunder:2}%
15471558
\end{figure}%
15481559
%
1560+
\begin{figure}%
1561+
\let\myoldstrut\strut%
1562+
\renewcommand*\DTstylecomment{\relax}%
1563+
\renewcommand*\DTstyle{\small}%
1564+
%
1565+
\dirtree{%
1566+
.1 \pythonilIdx{\_\_}.
1567+
.2 Logical or Binary Operators.
1568+
.3 \dunder{and}\DTcomment{and: \pythonil{a & b}\pythonIdx{\&}~$\cong$~\pythonil{a.\_\_and\_\_(b)}}.
1569+
.3 \dunder{rand}\DTcomment{and: \pythonil{a & b}\pythonIdx{\&}~$\cong$~\pythonil{b.\_\_rand\_\_(b)}, if \pythonil{a.\_\_and\_\_(b)} yields~\pythonilIdx{NotImplemented}}.
1570+
.3 \dunder{or}\DTcomment{or: \pythonil{a | b}\pythonIdx{\textbar}~$\cong$~\pythonil{a.\_\_or\_\_(b)}}.
1571+
.3 \dunder{ror}\DTcomment{or: \pythonil{a | b}\pythonIdx{\textbar}~$\cong$~\pythonil{b.\_\_ror\_\_(b)}, if \pythonil{a.\_\_or\_\_(b)} yields~\pythonilIdx{NotImplemented}}.
1572+
.3 \dunder{xor}\DTcomment{exclusive or: \pythonil{a \^ b}\pythonIdx{\textasciicircum}~$\cong$~\pythonil{a.\_\_xor\_\_(b)}}.
1573+
.3 \dunder{rxor}\DTcomment{exclusive or: \pythonil{a \^ b}\pythonIdx{\textasciicircum}~$\cong$~\pythonil{b.\_\_rxor\_\_(b)}, if \pythonil{a.\_\_xor\_\_(b)} yields~\pythonilIdx{NotImplemented}}.
1574+
.3 \dunder{rshift}\DTcomment{shift right: \pythonil{a >> b}\pythonIdx{>\myoldstrut>}~$\cong$~\pythonil{a.\_\_rshift\_\_(b)}}.
1575+
.3 \dunder{rrshift}\DTcomment{shift right: \pythonil{a >> b}\pythonIdx{>\myoldstrut>}~$\cong$~\pythonil{b.\_\_rrshift\_\_(b)}, if \pythonil{a.\_\_rshift\_\_(b)} yields~\pythonilIdx{NotImplemented}}.
1576+
.3 \dunder{lshift}\DTcomment{shift left: \pythonil{a << b}\pythonIdx{<\myoldstrut<}~$\cong$~\pythonil{a.\_\_lshift\_\_(b)}}.
1577+
.3 \dunder{rlshift}\DTcomment{shift left: \pythonil{a << b}\pythonIdx{<\myoldstrut<}~$\cong$~\pythonil{b.\_\_rlshift\_\_(b)}, if \pythonil{a.\_\_lshift\_\_(b)} yields~\pythonilIdx{NotImplemented}}.
1578+
.2 In-Place Logical or Binary Operators.
1579+
.3 \dunder{iand}\DTcomment{and: \pythonil{a &= b}\pythonIdx{\&=}~$\cong$~\pythonil{a.\_\_iand\_\_(b)}, returns~\pythonilIdx{self}}.
1580+
.3 \dunder{ior}\DTcomment{or: \pythonil{a |= b}\pythonIdx{\textbar=}~$\cong$~\pythonil{a.\_\_ior\_\_(b)}, returns~\pythonilIdx{self}}.
1581+
.3 \dunder{ixor}\DTcomment{exclusive or: \pythonil{a \^= b}\pythonIdx{\textasciicircum=}~$\cong$~\pythonil{a.\_\_ixor\_\_(b)}, returns~\pythonilIdx{self}}.
1582+
.3 \dunder{irshift}\DTcomment{shift right: \pythonil{a >>= b}\pythonIdx{>\myoldstrut>\myoldstrut=}~$\cong$~\pythonil{a.\_\_irshift\_\_(b)}, returns~\pythonilIdx{self}}.
1583+
.3 \dunder{ilshift}\DTcomment{shift left: \pythonil{a <<= b}\pythonIdx{<\myoldstrut<\myoldstrut=}~$\cong$~\pythonil{a.\_\_ilshift\_\_(b)}, returns~\pythonilIdx{self}}.
1584+
}%
1585+
%
1586+
\caption{An overview of the dunder in \python\ (Part~3).}%
1587+
\label{fig:pythonDunder:3}%
1588+
\end{figure}%
1589+
%
15491590
\FloatBarrier%
15501591
\endhsection%
15511592
%

0 commit comments

Comments
 (0)