9

多くのオンライン Python の例では、各行の前に通常の先頭の ">>>" および "..." 文字を使用した対話型の Python セッションが示されています。

多くの場合、これらのプレフィックスを取得せずにこのコードをコピーする方法はありません。

このような場合、コピー後にこのコードを自分の Python インタープリターに再貼り付けする場合は、最初にそれらのプレフィックスを取り除くためにいくつかの作業を行う必要があります。

貼り付けられた行の先頭の ">>>" および "..." 文字を自動的に無視するように python または iPython (または他の python インタープリター) を取得する方法を知っている人はいますか?

例:

>>> if True:
...     print("x")
... 
4

3 に答える 3

5

IPython はこれを自動的に行います。

In [5]: >>> print("hello")
hello

In [10]: >>> print(
   ....: ... "hello"
   ....: )
hello
于 2016-01-18T18:09:30.253 に答える
1

シェルへの貼り付けとはまったく同じではありませんが、doctestモジュールは便利です。Python モジュールまたは通常のテキスト ファイルをスキャンして、インタラクティブなスクリプトのフラグメントを探し、それらを実行します。その主な使用例は、ドキュメントと単体テストをブレンドすることです。次のようなチュートリアルがあるとします。

This is some code to demonstrate the power of the `if`
statement. 

>>> if True:
...     print("x")
... 
x

Remember, each `if` increases entropy in the universe,
so use with care.

>>> if False:
...     print("y")
... 

ファイルに保存してから実行するdoctest

$ python -m doctest -v k.txt
Trying:
    if True:
        print("x")
Expecting:
    x
ok
Trying:
    if False:
        print("y")
Expecting nothing
ok
1 items passed all tests:
   2 tests in k.txt
2 tests in 1 items.
2 passed and 0 failed.
Test passed.

doctestスクリプト フラグメントを実行し、期待される出力と比較します。

アップデート

これは、クリップボードにあるものを取得して、python スクリプトのフラグメントを貼り付けるスクリプトです。例をコピーし、このスクリプトを実行してから、シェルに貼り付けます。

#!/usr/bin/env python3

import os
import pyperclip

pyperclip.copy(os.linesep.join(line[4:] 
    for line in pyperclip.paste().split(os.linesep)
    if line[:4] in ('>>> ', '... ')))
于 2016-01-18T18:49:31.433 に答える