Ich werde Ihnen zeigen, wie Sie damit an die Veröffentlichung von IPython 2.0 erinnern können.
IPython ist eine leistungsstarke (wirklich leistungsstarke) Erweiterung des interaktiven Interpreters von Python. Es ist jedoch nicht nur eine Erweiterung, es hat die folgenden Funktionen.
Aber zuerst werde ich noch einmal kurz beschreiben, wie man die leistungsstarke interaktive IPython-Shell verwendet.
Lassen Sie es uns zuerst installieren.
$ pip install ipython
Beginnen wir mit der Installation.
$ ipython
Im Vergleich zur interaktiven Standard-Shell von Python wird die Leistungsfähigkeit von IPython zunächst durch die umfangreichen Ergänzungen deutlich.
Geben Sie "import o" in die gestartete IPython-Shell ein und drücken Sie die Taste "
In [1]: import o
octavemagic opcode operator optparse os
Sie haben einen wunderbaren und raffinierten Ergänzungskandidaten! Standardmäßige interaktive Shell-Vervollständigungen waren nicht sehr praktisch, aber IPython-Vervollständigungen sind durchaus verwendbar.
Versuchen wir es noch einmal. Geben Sie os.pa
alsimport os`` <TAB>
ein
In [1]: import os
In [2]: os.pa
os.pardir os.path os.pathconf os.pathconf_names os.pathsep
Sogar die importierten Module sind Kandidaten für die Fertigstellung.
Natürlich können Sie auch von Ihnen deklarierte Variablen vervollständigen.
In [3]: spam = 'Hello!'
In [4]: sp
Wenn Sie hier "
Darüber hinaus sollen nicht nur Python-Objekte und Schlüsselwörter, sondern auch Dateinamen und Verzeichnisnamen vervollständigt werden.
In [5]: .bash
.bash_history .bash_profile .bashrc
Diese Fertigstellung allein ist mehr als genug, um Sie zur Verwendung von IPython zu motivieren.
IPython macht es sehr einfach, Objekte zu untersuchen. Wenn Sie es ausführen, indem Sie dem Objektnamen "?" Hinzufügen, z. B. "Objektname?", Werden die Informationen dieses Objekts angezeigt.
Zum Beispiel sieht es wie folgt aus.
In [6]: spam?
Type: str
String form: Hello
Length: 5
Docstring:
str(object='') -> str
str(bytes_or_buffer[, encoding[, errors]]) -> str
Create a new string object from the given object. If encoding or
errors is specified, then the object must expose a data buffer
that will be decoded using the given encoding and error handler.
Otherwise, returns the result of object.__str__() (if defined)
or repr(object).
encoding defaults to sys.getdefaultencoding().
errors defaults to 'strict'.
Eingebaute Module und natürlich Ihre eigenen Klassen sind in Ordnung. Was angezeigt wird, ist die festgelegte Dokumentzeichenfolge, die Funktions- / Methodendefinitionszeile und im Fall einer Klasse die Informationen des Konstruktors (?).
In [7]: os.path.join?
Type: function
String form: <function join at 0x10c6592f0>
File: /Users/mubae/.virtualenvs/py3/lib/python3.4/posixpath.py
Definition: os.path.join(a, *p)
Docstring:
Join two or more pathname components, inserting '/' as needed.
If any component is an absolute path, all previous path components
will be discarded. An empty last part will result in a path that
ends with a separator.
Sie können auch detailliertere Informationen anzeigen, indem Sie "??" anstelle von "?" Verwenden.
In [8]: os.path.join??
Type: function
String form: <function join at 0x10c6592f0>
File: /Users/mubae/.virtualenvs/py3/lib/python3.4/posixpath.py
Definition: os.path.join(a, *p)
Source:
def join(a, *p):
"""Join two or more pathname components, inserting '/' as needed.
If any component is an absolute path, all previous path components
will be discarded. An empty last part will result in a path that
ends with a separator."""
sep = _get_sep(a)
path = a
try:
for b in p:
if b.startswith(sep):
path = b
elif not path or path.endswith(sep):
path += b
else:
path += sep + b
except TypeError:
valid_types = all(isinstance(s, (str, bytes, bytearray))
for s in (a, ) + p)
if valid_types:
# Must have a mixture of text and binary data
raise TypeError("Can't mix strings and bytes in path "
"components.") from None
raise
return path
Darüber hinaus ist es möglich, nur die angegebenen Informationen anzuzeigen, indem ** magische Befehle ** wie "% pdoc", "% pdef", "% psource" und "% pfile" verwendet werden.
Der magische Befehl wird später erklärt.
In [9]: %pdoc os.path.join
Class docstring:
Join two or more pathname components, inserting '/' as needed.
If any component is an absolute path, all previous path components
will be discarded. An empty last part will result in a path that
ends with a separator.
Call docstring:
Call self as a function.
In [10]: %psource os.path.join
def join(a, *p):
"""Join two or more pathname components, inserting '/' as needed.
If any component is an absolute path, all previous path components
will be discarded. An empty last part will result in a path that
ends with a separator."""
sep = _get_sep(a)
path = a
try:
for b in p:
if b.startswith(sep):
path = b
elif not path or path.endswith(sep):
path += b
else:
path += sep + b
except TypeError:
valid_types = all(isinstance(s, (str, bytes, bytearray))
for s in (a, ) + p)
if valid_types:
# Must have a mixture of text and binary data
raise TypeError("Can't mix strings and bytes in path "
"components.") from None
raise
return path
Trotz des bisherigen Inhalts hoffe ich, dass Sie die Bequemlichkeit von IPython erkannt haben. Sie können es jedoch noch bequemer verwenden, indem Sie die magischen Befehle kennen, die wir einführen werden.
Magic-Befehle sind Befehle, die in der IPython-Shell verwendet werden können und grob in die folgenden zwei Typen eingeteilt werden.
%
am Anfang, der den Inhalt dieser einen Zeile als Argument an den Befehl übergibt.Beispielsweise kann der Befehl "% timeit" die Ausführungszeit messen.
In [1]: %timeit range(1000)
1000000 loops, best of 3: 804 ns per loop
Dies ist ein mehrzeiliges Muster.
In [1]: %%timeit x = range(10000)
...: max(x)
...:
1000 loops, best of 3: 963 µs per loop
Darüber hinaus stehen die folgenden integrierten Befehle zur Verfügung.
--Code bezogen
%run
, %edit
, %save
, %macro
, %recall
%colors
, %xmode
, %autoindent
, %automagic
--Andere
%reset
, %timeit
, %%file
, %load
, or %paste
Sie können den magischen Befehl mit % quickref
überprüfen. Lassen Sie uns also sehen, was der Befehl bedeutet und welche anderen Befehle verfügbar sind.
Schauen wir uns den magischen Befehl etwas genauer an.
Verwenden Sie den magischen Befehl % run
, um Ihr bevorzugtes Python-Skript auszuführen und die Daten direkt in den interaktiven Shell-Namespace zu laden.
Im Gegensatz zu "Import" wird es bei jeder Ausführung neu geladen, sodass alle Änderungen am Skript sofort übernommen werden.
Der Befehl % run
verfügt über einige spezielle Optionen, die Option -t
kann verwendet werden, um die Skriptausführung zeitlich festzulegen, und die Option -d
kann verwendet werden, um sie im pdb-Debugger zu starten.
Wenn während der Skriptausführung eine Ausnahme auftritt, können Sie pdb sofort starten und debuggen, indem Sie den Befehl % debug
ausführen.
Wenn Sie pdb automatisch starten möchten, wenn eine Ausnahme auftritt, können Sie das Verhalten des automatischen pdb-Starts mit dem Befehl % pdb
umschalten.
IPython speichert einen Verlauf der Ein- und Ausgänge. Dies ist auch sehr praktisch.
Der einfachste Weg, den Verlauf zu verfolgen, ist die Verwendung der Cursortasten ↑
↓
. Es gibt jedoch auch andere, komplexere Möglichkeiten, auf den Verlauf zuzugreifen.
Der Eingabe- / Ausgabeverlauf wird in den Variablen "In" und "Out" mit der Eingabeaufforderungsnummer als Schlüssel gespeichert, sodass Sie später darauf zurückgreifen können.
In [1]: pig = 'boo'
In [2]: pig.capitalize()
Out[2]: 'Boo'
In [3]: pig.upper()
Out[3]: 'BOO'
In [4]: In[3]
Out[4]: 'pig.upper()'
In [5]: Out[3]
Out[5]: 'BOO'
Außerdem werden die letzten drei Ausgänge unter den Namen "", "", "" gespeichert, damit sie leichter zugänglich sind.
Sie können auch mit dem Befehl % history
auf den Verlauf verweisen.
System-Shell-Befehle sind einfach zu verwenden. Stellen Sie ihnen einfach !
Vor und führen Sie sie aus.
In [1]: !ping 2ch.net
PING 2ch.net (206.223.154.230): 56 data bytes
64 bytes from 206.223.154.230: icmp_seq=0 ttl=50 time=118.838 ms
64 bytes from 206.223.154.230: icmp_seq=1 ttl=50 time=118.843 ms
64 bytes from 206.223.154.230: icmp_seq=2 ttl=50 time=118.642 ms
64 bytes from 206.223.154.230: icmp_seq=3 ttl=50 time=118.378 ms
Darüber hinaus können Sie das Ausgabeergebnis wie folgt in der Liste erfassen.
In [16]: files = !ls
Ich denke, der letzte war fast wie eine Übersetzung des Tutorials. http://ipython.org/ipython-doc/stable/interactive/tutorial.html
Recommended Posts