Мне нужно динамически распечатать все встроенное в цикл for в записной книжке IPython. Я использую python 2.7 . Я использовал код:

for i in xrange(10):
   print "." , 
   #some computation and no print statement

И даже использовали:

for i in xrange(10):
   print "\b."
   #some computation and no print statement

Но оба вышеперечисленных решения, похоже, не работают в ноутбуках IPython.

Мне нужно: .......... и то, что печатают приведенные выше фрагменты:

.
.
.
.
.
.
.
.
.
.

Любая помощь приветствуется.

0
helix 28 Май 2016 в 17:48
Если вы пытаетесь создать индикатор выполнения, см. pypi.python.org/pypi/tqdm, интегрируется с ноутбуком IPython.
 – 
Matt
29 Май 2016 в 21:58

5 ответов

Как насчет

from __future__ import print_function
for i in xrange(10):
   print(".", end=' ')
0
Mr.F 28 Май 2016 в 17:55

Вы можете сделать это с помощью модуля sys.

import sys

for i in xrange(10):
    sys.stdout.write(".")

Функция print - это оболочка, которая преобразует объект в string и форматирует вывод.

0
formatkaka 28 Май 2016 в 18:19

Вы можете сделать то же самое:

print('.' * 10)

Если вам нужен цикл for, вы можете присвоить переменную end методу печати следующим образом:

for i in range(10):
   print('.', end="")
-1
franci_ 28 Май 2016 в 18:00

Это будет работать как на Python 2, так и на Python 3:

from __future__ import print_function

for i in range(10):
    print('.', end='')

Вы также можете передать аргумент ключевого слова flush=True, чтобы заставить его немедленно очистить буфер.

Вы также можете перезаписать предыдущую строку, используя '\r', это простой пример:

import time

for i in range(10):
    time.sleep(0.2)
    print('\r{} / 10'.format(i + 1, 10), end='')
4
aldanor 28 Май 2016 в 17:58

Я могу не понять ваш вопрос, но пробовали ли вы использовать:

print "."*10

Вы получите:

..........
-2
Mikanchu 28 Май 2016 в 17:55
Как указано в OP, после каждого оператора печати выполняется некоторое вычисление. Он не просто хочет напечатать сразу всю строку точек.
 – 
Keiwan
28 Май 2016 в 17:58