4

膨大な数のサンプル Python コードが Python REPL の出力を示しています。次に例を示します。

>>> 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
>>> 

さて、あなたがやりたいことは明らかなことは、上記のコードを実行することです..だから、「python」を実行し、上記のテキストを貼り付けます..

>>> >>> 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):
    ^

コードが壊れている!?..

それを実行するには、次のいずれかを行う必要があります..

  • 行を 1 つずつコピーして貼り付け、すべてのインデントを正しくコピーしていることを確認します。それを台無しにした場合 (たとえば、先頭のスペースを逃した場合、最初からやり直す必要があります)。
  • テキスト エディタを使用して と を削除>>>...、もう一度貼り付けます

それは大きな問題ではありませんが、この形式でどれだけ多くのサンプル コードが提示されているかを考えると、これを行う必要があるのは奇妙に思えます..

4

4 に答える 4

9

「PythonsREPLの出力」を実行/採用する方法

  • IPythonシェルを使用する

    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
    
  • 有能なテキストエディタを使用します(たとえば、EmacsC-x r kの長方形の領域を削除します)

  • doctestモジュールを使用する

そもそもシェルプロンプトなしでコピーします(たとえば、Google Chromeでそれを行う方法はわかりませんが)。

doctest形式が使用される理由

以下を保存しますdocumentation.txt

Lorem ipsum dolor sit amet、consectetur adipisicing elit、sed do
eiusmod tempor incididunt ut Labore et doloremagnaaliqua。Ut enim ad
minim veniam、quis nostrud exercitation ullamco Laboris nisi ut
aliquip ex eacommodoconsequat。

>>>クラスeg(object):
... def __init __(self、name):
... self.name = name
... def hi(self):
... print "Hi%s"%(self.name)
..。
>>> greeter = eg( "Bob")
>>> greeter.hi()
ハイボブ
>>>

Duis aute irure dolor in reprehenderit in voluptate velit esse cillum
dolore eu fugiatnullapariatur。Excepteur sint occaecat cupidatat non
有望な、culpa qui officia deserunt mollit animidestに沈む
実験室。

走る:

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

出力:

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.

モジュールの最後に次のスニペットを追加すると、docstring内のすべてのコードがテストされます。

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

QED

于 2009-03-15T03:36:36.270 に答える
2

これに対する良い解決策があるかどうかはわかりません。理想的には、この種のコピー/貼り付け入力を受け入れるようにインタープリターの動作を変更する方法があります。ここにいくつかの代替案があります:

トリプルクォートを使用して、例を文字列に保存します。次に、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
>>>

私のソリューションはすべて1行に収まるだけでなく(インタプリタでコピー/貼り付けするのも簡単です)、上記の例で機能します: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

私の2番目の提案は、エディターを開いて、編集が完了した後にそこに入力した内容を実行するipythonの機能を確認することです。

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

emacsをエディターとして設定すると、テキストの長方形を削除する機能があることを私は知っています(おそらく、コマンドMx delete-rectangleを推測できます)。これは、これらの厄介なプロンプトを取り除くのに完全に機能します。他の多くの編集者もこれを持っていると確信しています。

于 2009-03-15T02:56:35.257 に答える
1

「なぜ」の質問に役立つ答えがあることはめったにありません。

たとえば、複雑な知的財産侵害訴訟を回避するためであると言った場合、それは何を意味するのでしょうか? 何もない。コピーと貼り付けをやめて、考えて入力する必要があります。

または、たとえば、理由がここに記載されていると言った場合、実行可能なものは何もありません。問題は、例をカット アンド ペーストするのではなく、入力する必要があることです。そして、その問題はこの情報では解決されません。

実際、問題は本当に「あまり考えたり入力したりせずにコピー アンド ペーストしたいのですが、どうすればそれができるのでしょうか?」ということです。そして答えは同じです。

インタラクティブ セッションをコピーして貼り付けることはできません (doctest コメントを除く)。入力する必要があります。ごめん。

于 2009-03-15T12:10:47.937 に答える
0

コードはこのように表示されます。これは、ステップバイステップのプロセスであることが意図されているためです。表示される3つの文字>>>>はPythonIDEの文字ですが、すでにご存知のようです。コンソールまたはシェルにアクセスし、pythonと入力すると、次のようになります。

% 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.
>>>

だから本当に教育ツールとしてそれを取りなさい。:)

于 2009-03-15T02:30:43.247 に答える