特定の時間実行されるコードの一部があり、1秒ごとにiteration X, score Y
のようなものが出力されるとします。この関数をブラックボックス関数に置き換えます。
from random import uniform
import time
def black_box():
i = 1
while True:
print 'Iteration', i, 'Score:', uniform(0, 1)
time.sleep(1)
i += 1
Jupyterノートブック で実行すると、1秒ごとに新しい行が出力されます。
Iteration 1 Score: 0.664167449844
Iteration 2 Score: 0.514757592404
...
はい、出力が大きくなりすぎるとhtmlがスクロール可能になりますが、問題は、現在の最後の行を除いてこれらの行は必要ないということです。したがって、n
秒の後にn
行を表示する代わりに、1
行(最後の行)のみを表示したいと思います。
私は、ドキュメントや魔法を通してこのようなことを発見していません。 質問 タイトルはほぼ同じですが、無関係です。
@celが正しい: ipython Notebook clear cell output in code
ただし、clear_output()を使用すると、ノートブックにジッターが発生します。このようにdisplay()関数も使用することをお勧めします(Python 2.7):
from random import uniform
import time
from IPython.display import display, clear_output
def black_box():
i = 1
while True:
clear_output(wait=True)
display('Iteration '+str(i)+' Score: '+str(uniform(0, 1)))
time.sleep(1)
i += 1
説明したことを行うための通常の(文書化された)方法(Python 3)でのみ機能します):
_print('Iteration', i, 'Score:', uniform(0, 1), end='\r')
_
Python 2では、印刷後にsys.stdout.flush()
にする必要があります。これがこのように表示されます answer :
_print('Iteration', i, 'Score:', uniform(0, 1), end='\r')
sys.stdout.flush()
_
IPythonノートブックを使用して、文字列を連結して機能させる必要がありました。
_print('Iteration ' + str(i) + ', Score: ' + str(uniform(0, 1)), end='\r')
_
そして最後に、Jupyterで動作するように、これを使用しました。
_print('\r', 'Iteration', i, 'Score:', uniform(0, 1), end='')
_
または、print
sを_time.sleep
_の前後で分割することもできます。
_print('Iteration', i, 'Score:', uniform(0, 1), end='')
time.sleep(1)
print('', end='\r') # or even print('\r', end='')
_