Show More
@@ -1,251 +1,249 b'' | |||||
1 | ================= |
|
1 | ================= | |
2 | Python vs IPython |
|
2 | Python vs IPython | |
3 | ================= |
|
3 | ================= | |
4 |
|
4 | |||
5 | This document is meant to highlight the main differences between the Python |
|
5 | This document is meant to highlight the main differences between the Python | |
6 | language and what are the specific construct you can do only in IPython. |
|
6 | language and what are the specific construct you can do only in IPython. | |
7 |
|
7 | |||
8 | Unless expressed otherwise all of the construct you will see here will raise a |
|
8 | Unless expressed otherwise all of the construct you will see here will raise a | |
9 | ``SyntaxError`` if run in a pure Python shell, or if executing in a Python |
|
9 | ``SyntaxError`` if run in a pure Python shell, or if executing in a Python | |
10 | script. |
|
10 | script. | |
11 |
|
11 | |||
12 | Each of these features are describe more in details in further part of the documentation. |
|
12 | Each of these features are describe more in details in further part of the documentation. | |
13 |
|
13 | |||
14 |
|
14 | |||
15 | Quick overview: |
|
15 | Quick overview: | |
16 | =============== |
|
16 | =============== | |
17 |
|
17 | |||
18 |
|
18 | |||
19 |
All the following construct are valid IPython syntax |
|
19 | All the following construct are valid IPython syntax: | |
20 |
|
20 | |||
21 | .. code-block:: |
|
21 | .. code-block:: ipython | |
22 |
|
|
22 | ||
23 | ? |
|
23 | In [1]: ? | |
24 |
|
|
24 | ||
25 | .. code-block:: |
|
25 | .. code-block:: ipython | |
26 |
|
|
26 | ||
27 | ?object |
|
27 | In [1]: ?object | |
28 |
|
28 | |||
29 |
|
29 | |||
30 | .. code-block:: |
|
30 | .. code-block:: ipython | |
31 |
|
|
31 | ||
32 | object? |
|
32 | In [1]: object? | |
33 |
|
|
33 | ||
34 | .. code-block:: |
|
34 | .. code-block:: ipython | |
35 |
|
|
35 | ||
36 | *pattern*? |
|
36 | In [1]: *pattern*? | |
37 |
|
|
37 | ||
38 | .. code-block:: |
|
38 | .. code-block:: ipython | |
39 |
|
|
39 | ||
40 | %shell like --syntax |
|
40 | In [1]: %shell like --syntax | |
41 |
|
41 | |||
42 | .. code-block:: |
|
42 | .. code-block:: ipython | |
43 |
|
|
43 | ||
44 | !ls |
|
44 | In [1]: !ls | |
45 |
|
45 | |||
46 | .. code-block:: |
|
46 | .. code-block:: ipython | |
47 |
|
|
47 | ||
48 | my_files =! ls ~/ |
|
48 | In [1]: my_files =! ls ~/ | |
49 | for i,file in enumerate(my_file): |
|
49 | In [1]: for i,file in enumerate(my_file): | |
50 | raw = !echo $file |
|
50 | ...: raw = !echo $file | |
51 | !echo {files[0].upper()} $raw |
|
51 | ...: !echo {files[0].upper()} $raw | |
52 |
|
52 | |||
53 |
|
53 | |||
54 | .. code-block:: |
|
54 | .. code-block:: ipython | |
55 |
|
|
55 | ||
56 | %%perl magic --function |
|
56 | In [1]: %%perl magic --function | |
57 | @months = ("July", "August", "September"); |
|
57 | ...: @months = ("July", "August", "September"); | |
58 | print $months[0]; |
|
58 | ...: print $months[0]; | |
59 |
|
59 | |||
60 |
|
|
60 | ||
61 | Each of these construct is compile by IPython into valid python code and will |
|
61 | Each of these construct is compile by IPython into valid python code and will | |
62 | do most of the time what you expect it will do. Let see each of these example |
|
62 | do most of the time what you expect it will do. Let see each of these example | |
63 | in more detail. |
|
63 | in more detail. | |
64 |
|
64 | |||
65 |
|
65 | |||
66 |
|
||||
67 |
|
||||
68 |
|
||||
69 | Accessing help |
|
66 | Accessing help | |
70 | ============== |
|
67 | ============== | |
71 |
|
68 | |||
72 | As IPython is mostly an interactive shell, the question mark is a simple |
|
69 | As IPython is mostly an interactive shell, the question mark is a simple | |
73 | shortcut to get help. A question mark alone will bring up the IPython help: |
|
70 | shortcut to get help. A question mark alone will bring up the IPython help: | |
74 |
|
71 | |||
75 | .. code-block:: |
|
72 | .. code-block:: ipython | |
76 |
|
|
73 | ||
77 | In[1]:? |
|
74 | In [1]: ? | |
78 |
|
75 | |||
79 | IPython -- An enhanced Interactive Python |
|
76 | IPython -- An enhanced Interactive Python | |
80 | ========================================= |
|
77 | ========================================= | |
81 |
|
78 | |||
82 | IPython offers a combination of convenient shell features, special commands |
|
79 | IPython offers a combination of convenient shell features, special commands | |
83 | and a history mechanism for both input (command history) and output (results |
|
80 | and a history mechanism for both input (command history) and output (results | |
84 | caching, similar to Mathematica). It is intended to be a fully compatible |
|
81 | caching, similar to Mathematica). It is intended to be a fully compatible | |
85 | replacement for the standard Python interpreter, while offering vastly |
|
82 | replacement for the standard Python interpreter, while offering vastly | |
86 | improved functionality and flexibility. |
|
83 | improved functionality and flexibility. | |
87 |
|
84 | |||
88 | At your system command line, type 'ipython -h' to see the command line |
|
85 | At your system command line, type 'ipython -h' to see the command line | |
89 | options available. This document only describes interactive features. |
|
86 | options available. This document only describes interactive features. | |
90 |
|
87 | |||
91 | MAIN FEATURES |
|
88 | MAIN FEATURES | |
92 | ------------- |
|
89 | ------------- | |
93 | ... |
|
90 | ... | |
94 |
|
91 | |||
95 | A single question mark before, or after an object available in current |
|
92 | A single question mark before, or after an object available in current | |
96 | namespace will show help relative to this object: |
|
93 | namespace will show help relative to this object: | |
97 |
|
94 | |||
98 | .. code-block:: |
|
95 | .. code-block:: ipython | |
99 |
|
|
96 | ||
100 | In [6]: object? |
|
97 | In [6]: object? | |
101 | Docstring: The most base type |
|
98 | Docstring: The most base type | |
102 | Type: type |
|
99 | Type: type | |
103 |
|
100 | |||
104 |
|
101 | |||
105 | A double question mark will try to pull out more information about the object, |
|
102 | A double question mark will try to pull out more information about the object, | |
106 | and if possible display the python source code of this object. |
|
103 | and if possible display the python source code of this object. | |
107 |
|
104 | |||
108 | .. code-block:: |
|
105 | .. code-block:: ipython | |
109 |
|
|
106 | ||
110 | In[1]: import collections |
|
107 | In[1]: import collections | |
111 | In[2]: collection.Counter?? |
|
108 | In[2]: collection.Counter?? | |
112 |
|
109 | |||
113 |
Init signature: collections.Counter( |
|
110 | Init signature: collections.Counter(*args, **kwds) | |
114 | Source: |
|
111 | Source: | |
115 | class Counter(dict): |
|
112 | class Counter(dict): | |
116 | '''Dict subclass for counting hashable items. Sometimes called a bag |
|
113 | '''Dict subclass for counting hashable items. Sometimes called a bag | |
117 | or multiset. Elements are stored as dictionary keys and their counts |
|
114 | or multiset. Elements are stored as dictionary keys and their counts | |
118 | are stored as dictionary values. |
|
115 | are stored as dictionary values. | |
119 |
|
116 | |||
120 | >>> c = Counter('abcdeabcdabcaba') # count elements from a string |
|
117 | >>> c = Counter('abcdeabcdabcaba') # count elements from a string | |
121 |
|
118 | |||
122 | >>> c.most_common(3) # three most common elements |
|
119 | >>> c.most_common(3) # three most common elements | |
123 | [('a', 5), ('b', 4), ('c', 3)] |
|
120 | [('a', 5), ('b', 4), ('c', 3)] | |
124 | >>> sorted(c) # list all unique elements |
|
121 | >>> sorted(c) # list all unique elements | |
125 | ['a', 'b', 'c', 'd', 'e'] |
|
122 | ['a', 'b', 'c', 'd', 'e'] | |
126 | >>> ''.join(sorted(c.elements())) # list elements with repetitions |
|
123 | >>> ''.join(sorted(c.elements())) # list elements with repetitions | |
127 | 'aaaaabbbbcccdde' |
|
124 | 'aaaaabbbbcccdde' | |
128 | ... |
|
125 | ... | |
129 |
|
126 | |||
130 |
|
127 | |||
131 |
|
128 | |||
132 | If you are looking for an object, the use of wildcards ``*`` in conjunction |
|
129 | If you are looking for an object, the use of wildcards ``*`` in conjunction | |
133 | with question mark will allow you to search current namespace for object with |
|
130 | with question mark will allow you to search current namespace for object with | |
134 | matching names: |
|
131 | matching names: | |
135 |
|
132 | |||
136 | .. code-block:: |
|
133 | .. code-block:: ipython | |
|
134 | ||||
137 | In [24]: *int*? |
|
135 | In [24]: *int*? | |
138 | FloatingPointError |
|
136 | FloatingPointError | |
139 | int |
|
137 | int | |
140 |
|
138 | |||
141 |
|
139 | |||
142 |
|
140 | |||
143 | Shell Assignment |
|
141 | Shell Assignment | |
144 | ================ |
|
142 | ================ | |
145 |
|
143 | |||
146 |
|
144 | |||
147 | When doing interactive computing it is common to need to access the underlying shell. |
|
145 | When doing interactive computing it is common to need to access the underlying shell. | |
148 | This is doable through the use of the exclamation mark ``!`` (or bang). |
|
146 | This is doable through the use of the exclamation mark ``!`` (or bang). | |
149 |
|
147 | |||
150 | This allow to execute simple command when present in beginning of line: |
|
148 | This allow to execute simple command when present in beginning of line: | |
151 |
|
149 | |||
152 | .. code-block:: |
|
150 | .. code-block:: ipython | |
153 |
|
|
151 | ||
154 | In[1]: !pwd |
|
152 | In[1]: !pwd | |
155 | /User/home/ |
|
153 | /User/home/ | |
156 |
|
154 | |||
157 | Change directory: |
|
155 | Change directory: | |
158 |
|
156 | |||
159 | .. code-block:: |
|
157 | .. code-block:: ipython | |
160 |
|
|
158 | ||
161 | In[1]: !cd /var/etc |
|
159 | In[1]: !cd /var/etc | |
162 |
|
160 | |||
163 | Or edit file: |
|
161 | Or edit file: | |
164 |
|
162 | |||
165 | .. code-block:: |
|
163 | .. code-block:: ipython | |
166 |
|
|
164 | ||
167 | In[1]: !mvim myfile.txt |
|
165 | In[1]: !mvim myfile.txt | |
168 |
|
166 | |||
169 |
|
167 | |||
170 | The line after the bang can call any program installed in the underlying |
|
168 | The line after the bang can call any program installed in the underlying | |
171 | shell, and support variable expansion in the form of ``$variable`` or ``{variable}``. |
|
169 | shell, and support variable expansion in the form of ``$variable`` or ``{variable}``. | |
172 | The later form of expansion supports arbitrary python expression: |
|
170 | The later form of expansion supports arbitrary python expression: | |
173 |
|
171 | |||
174 | .. code-block:: |
|
172 | .. code-block:: ipython | |
175 |
|
|
173 | ||
176 | In[1]: file = 'myfile.txt' |
|
174 | In[1]: file = 'myfile.txt' | |
177 |
|
175 | |||
178 | In[2]: !mv $file {file.upper()} |
|
176 | In[2]: !mv $file {file.upper()} | |
179 |
|
177 | |||
180 |
|
178 | |||
181 | The bang can also be present in the right hand side of an assignment, just |
|
179 | The bang can also be present in the right hand side of an assignment, just | |
182 | after the equal sign, or separated from it by a white space. In which case the |
|
180 | after the equal sign, or separated from it by a white space. In which case the | |
183 | standard output of the command after the bang ``!`` will be split out into lines |
|
181 | standard output of the command after the bang ``!`` will be split out into lines | |
184 | in a list-like object (:see:`IPython Slist`) and assign to the left hand side. |
|
182 | in a list-like object (:see:`IPython Slist`) and assign to the left hand side. | |
185 |
|
183 | |||
186 | This allow you for example to put the list of files of the current working directory in a variable: |
|
184 | This allow you for example to put the list of files of the current working directory in a variable: | |
187 |
|
185 | |||
188 | .. code-block:: |
|
186 | .. code-block:: ipython | |
189 |
|
|
187 | ||
190 | In[1]: my_files != ls |
|
188 | In[1]: my_files != ls | |
191 |
|
189 | |||
192 |
|
190 | |||
193 | You can combine the different possibilities in for loops, condition, functions...: |
|
191 | You can combine the different possibilities in for loops, condition, functions...: | |
194 |
|
192 | |||
195 | .. code-block:: |
|
193 | .. code-block:: ipython | |
196 |
|
|
194 | ||
197 | my_files =! ls ~/ |
|
195 | my_files =! ls ~/ | |
198 | b = "backup file" |
|
196 | b = "backup file" | |
199 | for i,file in enumerate(my_file): |
|
197 | for i,file in enumerate(my_file): | |
200 | raw = !echo $backup $file |
|
198 | raw = !echo $backup $file | |
201 | !cp $file {file.split('.')[0]+'.bak'} |
|
199 | !cp $file {file.split('.')[0]+'.bak'} | |
202 |
|
200 | |||
203 |
|
201 | |||
204 | Magics |
|
202 | Magics | |
205 | ------ |
|
203 | ------ | |
206 |
|
204 | |||
207 | Magics function are often present in the form of shell-like syntax, but are |
|
205 | Magics function are often present in the form of shell-like syntax, but are | |
208 | under the hood python function. The syntax and assignment possibility are |
|
206 | under the hood python function. The syntax and assignment possibility are | |
209 | similar to the one with the bang (``!``) syntax, but with more flexibility and |
|
207 | similar to the one with the bang (``!``) syntax, but with more flexibility and | |
210 | power. Magic function start with a percent sign (``%``) or double percent (``%%``). |
|
208 | power. Magic function start with a percent sign (``%``) or double percent (``%%``). | |
211 |
|
209 | |||
212 | A magic call with a sign percent will act only one line: |
|
210 | A magic call with a sign percent will act only one line: | |
213 |
|
211 | |||
214 | .. code-block:: |
|
212 | .. code-block:: ipython | |
215 |
|
|
213 | ||
216 | In[1]: %xmode |
|
214 | In[1]: %xmode | |
217 | Exception reporting mode: Verbose |
|
215 | Exception reporting mode: Verbose | |
218 |
|
216 | |||
219 | And support assignment: |
|
217 | And support assignment: | |
220 |
|
218 | |||
221 | .. code-block:: |
|
219 | .. code-block:: ipython | |
222 |
|
|
220 | ||
223 | In [1]: results = %timeit -r1 -n1 -o list(range(1000)) |
|
221 | In [1]: results = %timeit -r1 -n1 -o list(range(1000)) | |
224 | 1 loops, best of 1: 21.1 µs per loop |
|
222 | 1 loops, best of 1: 21.1 µs per loop | |
225 |
|
223 | |||
226 | In [2]: results |
|
224 | In [2]: results | |
227 | Out[2]: <TimeitResult : 1 loops, best of 1: 21.1 µs per loop> |
|
225 | Out[2]: <TimeitResult : 1 loops, best of 1: 21.1 µs per loop> | |
228 |
|
226 | |||
229 | Magic with two percent sign can spread over multiple lines, but do not support assignment: |
|
227 | Magic with two percent sign can spread over multiple lines, but do not support assignment: | |
230 |
|
228 | |||
231 | .. code-block:: |
|
229 | .. code-block:: ipython | |
232 |
|
|
230 | ||
233 | In[1]: %%bash |
|
231 | In[1]: %%bash | |
234 | ... : echo "My shell is:" $SHELL |
|
232 | ... : echo "My shell is:" $SHELL | |
235 | ... : echo "My disk usage is:" |
|
233 | ... : echo "My disk usage is:" | |
236 | ... : df -h |
|
234 | ... : df -h | |
237 | My shell is: /usr/local/bin/bash |
|
235 | My shell is: /usr/local/bin/bash | |
238 | My disk usage is: |
|
236 | My disk usage is: | |
239 | Filesystem Size Used Avail Capacity iused ifree %iused Mounted on |
|
237 | Filesystem Size Used Avail Capacity iused ifree %iused Mounted on | |
240 | /dev/disk1 233Gi 216Gi 16Gi 94% 56788108 4190706 93% / |
|
238 | /dev/disk1 233Gi 216Gi 16Gi 94% 56788108 4190706 93% / | |
241 | devfs 190Ki 190Ki 0Bi 100% 656 0 100% /dev |
|
239 | devfs 190Ki 190Ki 0Bi 100% 656 0 100% /dev | |
242 | map -hosts 0Bi 0Bi 0Bi 100% 0 0 100% /net |
|
240 | map -hosts 0Bi 0Bi 0Bi 100% 0 0 100% /net | |
243 | map auto_home 0Bi 0Bi 0Bi 100% 0 0 100% /hom |
|
241 | map auto_home 0Bi 0Bi 0Bi 100% 0 0 100% /hom | |
244 |
|
242 | |||
245 |
|
243 | |||
246 | Combining it all |
|
244 | Combining it all | |
247 | ---------------- |
|
245 | ---------------- | |
248 |
|
246 | |||
249 | .. code-block:: |
|
247 | :: | |
250 |
|
248 | |||
251 |
find a snippet that combine all that into one thing |
|
249 | find a snippet that combine all that into one thing! |
General Comments 0
You need to be logged in to leave comments.
Login now