Frage

Eine riesige Menge an Beispiel Python-Code zeigt die Ausgabe des Python-ERSATZES, zum Beispiel:

>>> class eg(object):
...     def __init__(self, name):
...             self.name = name
...     def hi(self):
...             print "Hi %s" % (self.name)
... 
>>> greeter = eg("Bob")
>>> greeter.hi()
Hi Bob
>>> 

Nun, die offensichtliche Sache, die Sie tun möchten, ist der obigen Code ausführen .. so, ich laufe „Python“ und fügen Sie den obigen Text in ..

>>> >>> class eg(object):
  File "<stdin>", line 1
    >>> class eg(object):
     ^
SyntaxError: invalid syntax
>>> ...     def __init__(self, name):
  File "<stdin>", line 1
    ...     def __init__(self, name):
    ^

Der Code ist gebrochen!? ..

Um es zu laufen, würde ich entweder haben ..

  • copy-and-paste der Linien einen nach dem anderen, so dass sicher, ob ich richtig dem ganzen Vertiefung kopieren. Wenn Sie es vermasseln (sagen wir, einen führenden Platz verpassen, müssen Sie alle wieder von vorn beginnen)
  • verwenden Sie einen Texteditor >>> und ... zu entfernen, dann fügen Sie wieder

Es ist kein großes Problem, aber wenn man bedenkt, wie vielen Beispielcode in diesem Format dargestellt wird, scheint es seltsam, Sie, dies zu tun haben ..

War es hilfreich?

Lösung

Wie laufen / adoptieren "die Ausgabe von Pythons REPL"

  • Verwenden Sie IPython Shell

    In [99]: %cpaste
    Pasting code; enter '--' alone on the line to stop.
    :>>> class eg(object):
    :...     def __init__(self, name):
    :...             self.name = name
    :...     def hi(self):
    :...             print "Hi %s" % (self.name)
    :...
    :>>> greeter = eg("Bob")
    :>>> greeter.hi()
    :--
    Hi Bob
    
  • einen fähigen Texteditor (zB tötet C-x r k rechteckigen Bereich in Emacs )

  • Verwenden Sie doctest Modul

Kopieren ohne Shell-Prompt an erster Stelle (obwohl ich weiß nicht, wie es auf Google Chrome zu tun, zum Beispiel).

Warum das doctest Format verwendet wird

Speicher Folgendes documentation.txt:

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
minim veniam, quis nostrud exercitation ullamco laboris nisi ut
aliquip ex ea commodo consequat. 

>>> class eg(object):
...     def __init__(self, name):
...             self.name = name
...     def hi(self):
...             print "Hi %s" % (self.name)
... 
>>> greeter = eg("Bob")
>>> greeter.hi()
Hi Bob
>>>

Duis aute irure dolor in reprehenderit in voluptate velit esse cillum
dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
proident, sunt in culpa qui officia deserunt mollit anim id est
laborum.

Ausführen:

$ python -c "import doctest; doctest.testfile('documentation.txt')" -v

Ausgabe:

Trying:
    class eg(object):
        def __init__(self, name):
                self.name = name
        def hi(self):
                print "Hi %s" % (self.name)
Expecting nothing
ok
Trying:
    greeter = eg("Bob")
Expecting nothing
ok
Trying:
    greeter.hi()
Expecting:
    Hi Bob
ok
1 items passed all tests:
   3 tests in doctest.txt
3 tests in 1 items.
3 passed and 0 failed.
Test passed.

Wenn Sie das folgende Snippet am Ende des Moduls hinzufügen wird es die gesamten Code in seinen Docstrings testen:

if __name__=="__main__":
   import doctest; doctest.testmod()

QED

Andere Tipps

Ich weiß nicht, ob es für diese gibt eine gute Lösung ist. Idealerweise würde es eine Möglichkeit geben, das Verhalten des interpretter zu ändern Kopieren / Einfügen Eingabe dieser Art zu akzeptieren. Hier sind einige alternative Vorschläge:

Mit Dreifach zitiert das Beispiel in eine Zeichenfolge zu speichern. Verwenden Sie dann exec:

>>> def chomp_prompt(s): return '\n'.join(ln[4:] for ln in s.splitlines())
...
>>> dirty = """>>> class eg(object):
... ...     def __init__(self, name):
... ...             self.name = name
... ...     def hi(self):
... ...             print "Hi %s" % (self.name)
... ...
... >>> greeter = eg("Bob")
... >>> greeter.hi()
... """
>>> clean = chomp_prompt(dirty)
>>> exec clean
Hi Bob
>>>

Nicht nur, dass meine Lösung alles eine Zeile paßt auf (so dass es dann sein, dass Sie es in dem Interpreter zum Kopieren / Einfügen), funktioniert es auf dem obigen Beispiel: D:

>>> s = r'''>>> def chomp_prompt(s): return '\n'.join(ln[4:] for ln in s.splitlines())
... ...
... >>> dirty = """>>> class eg(object):
... ... ...     def __init__(self, name):
... ... ...             self.name = name
... ... ...     def hi(self):
... ... ...             print "Hi %s" % (self.name)
... ... ...
... ... >>> greeter = eg("Bob")
... ... >>> greeter.hi()
... ... """
... >>> clean = chomp_prompt(dirty)
... >>> exec clean'''
>>> s2 = chomp_prompt(s)
>>> exec s2
Hi Bob

Mein zweiter Vorschlag ist auf ipython die Fähigkeit suchen einen Editor für Sie zu öffnen und ausführen, was Sie dort eingegeben, nachdem Sie fertig sind Bearbeitung:

http : //ipython.scipy.org/doc/rel-0.9.1/html/interactive/tutorial.html#source-code-handling-tips

Wenn Sie Emacs als Editor gesetzt, ich weiß, dass es die Fähigkeit hat, ein Rechteck von Text zu löschen (Sie wahrscheinlich erraten können den Befehl: M-x delete-Rechteck), die für das Loswerden von diesen lästigen Aufforderungen perfekt funktionieren würde. Ich bin sicher, dass viele andere Editoren diese haben auch.

"Warum" Fragen haben selten nützliche Antworten.

Zum Beispiel, wenn ich sage, dass der Grund, warum ist eine komplexe Verletzung geistiges Eigentum Klage zu vermeiden, was macht das? Nichts. Sie haben noch das Kopieren und Einfügen zu stoppen und zu denken und zu schreiben beginnen.

Oder zum Beispiel, wenn ich sagte, dass der Grund, warum gegeben wurde hier , gibt es nichts umsetzbare. Das Problem ist, dass die Beispiele eingegeben werden müssen, statt Ausschneiden und Einfügen. Und das Problem durch diese Information nicht gelöst wird.

Tatsächlich ist das Problem wirklich „ich kopieren und einfügen möchten, ohne so viel zu denken und schreiben, wie kann ich das tun?“ und die Antwort ist das gleiche.

Sie können die interaktive Sitzung nicht kopieren und einfügen (außer in doctest Kommentaren). Man muss es geben. Es tut uns Leid.

Der Code wird auf diese Weise präsentiert, weil es bedeutet, ist ein Schritt für Schritt Prozess. Die drei Zeichen „>>>“ sind die von den Python-IDE sehen, aber es scheint, dass Sie wissen, dass bereits. Wenn Sie den Zugriff auf eine Konsole oder eine Schale haben, und geben Sie Python, werden Sie etwas wie diese erhalten.

% python
Python 2.5.1 (r251:54863, Jan 13 2009, 10:26:13) 
[GCC 4.0.1 (Apple Inc. build 5465)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>

So wirklich nehmen Sie es als pädagogisches Instrument. :)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top