1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
\documentclass[14pt,compress,aspectratio=169]{beamer}
\input{macros.tex}
\title[only kwargs]{Advanced Python}
\subtitle{Keyword-only arguments}
\author[FOSSEE] {The FOSSEE Group}
\institute[IIT Bombay] {Department of Aerospace Engineering\\IIT Bombay}
\date[] {Mumbai, India}
\begin{document}
\begin{frame}
\titlepage
\end{frame}
\begin{frame}[fragile, plain]
\frametitle{Motivation}
\vspace*{-0.1in}
\begin{itemize}
\item One can mix positional and keyword arguments
\end{itemize}
\begin{lstlisting}
In []: def f(a, b=2):
...: print(a, b)
In []: f(a=2, b=3)
2 3
In []: f(b=2, a=3)
3 2
In []: f(10, 20)
1 2
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]
\frametitle{Motivation}
\begin{itemize}
\item Function changes: positional arguments change in order or number
\item Accidentally passing an extra argument
\item Can we have purely keyword arguments?
\vspace*{0.5in}
\item Yes, in Python 3.x!
\end{itemize}
\end{frame}
\begin{frame}[fragile]
\frametitle{Keyword-only arguments}
\begin{lstlisting}
In []: def f(a, *args, b=False):
...: print(a, args, b)
In []: f(1, 20)
1 (20,) False
In []: f(1, b=20)
1 () 20
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]
\frametitle{Keyword-only arguments}
\noindent Without any extra arguments:
\vspace*{0.25in}
\begin{lstlisting}
In []: def f(a, *, b=False):
...: print(a, b)
In []: f(1, 20)
TypeError: f() takes 1 positional arg...
\end{lstlisting}
\pause
\begin{lstlisting}
In []: f(1, b=20)
1 20
\end{lstlisting}
\end{frame}
\begin{frame}
\frametitle{Discussion}
\begin{itemize}
\item Solves the problem nicely
\item \typ{b}: can only be specified as keyword argument
\item Cannot be called as a positional argument
\end{itemize}
\end{frame}
\end{document}
|