Подтвердить что ты не робот

Добавление разрывов строк в ipython

Если ввести цикл for в iPython или любую команду с несколькими линиями, как мне вернуться и добавить к нему строки? Я запустил это:

for row in table.find_all('tr'):
    cells = row.find_all('td')
    for c,cell in enumerate(cells):
        print c,":",cell.get_text().strip()
    try:
        this = cells[0]
        that = cells[1]
        the_docket = cells[2]
        other_thign = cells[3]
        jumble = re.sub('\s+',' ',str(cells[5])).strip()            
    except:
        "Nope"

И понял, что мне нужно добавить строку, но я не могу просто нажать "enter" в iPython, b/c, который запускает эту команду. Могу ли я отредактировать эту многострочную команду w/in iPython?

4b9b3361

Ответ 1

Магическая функция %edit в iPython позволяет редактировать код в вашем любимом редакторе и затем выполнять его, как если бы он был напечатан напрямую. Вы также можете редактировать код, который вы уже ввели в repl, поскольку он хранится в специальной переменной, например:

In [1]: def foo(x):
   ...:     print x
   ...:     
In [2]: %edit _i1

Ответ 2

Существует также способ добавить новую строку непосредственно в repl: ctrl-v, ctrl-j

ctrl-v в основном позволяет вам отправлять управляющий код, а затем ctrl-j - это код для новой строки (line-feed). Это немного неудобно печатать, но имеет то преимущество, что оно также работает в обычной оболочке Python, а также в самой Bash.

Изменить: по крайней мере, в iTerm2 вы можете назначить его и одной горячей клавише. Я установил ctrl-enter в "Отправить шестнадцатеричные коды" 0x16 0x0a. Также можно использовать cmd-enter или что-то еще.

Ответ 3

Для полноты: более новые версии IPython (0.11+) имеют очень приятную графическую консоль, которая позволяет вам перемещать свой код со стрелками и даже перемещать курсор мышью.

В многострочных операциях некоторые клавиши выполняют специальную функцию (стрелки для навигации, Enter для вставки разрыва строки и другие). Вам нужно будет поместить курсор в конец последней строки инструкции, чтобы получить поведение по умолчанию, например. стрелка вверх означает "предыдущий оператор" вместо "переместить курсор на предыдущую строку". Или получите Enter для обозначения "выполнить код" вместо "вставить разрыв строки в середине кода".

Документация по нему немного разрежена и фрагментирована на разных страницах, поэтому вот основные три ссылки для начала работы с ней:

Ответ 4

Некоторое время страдал этой проблемой. Просто обнаружил, что Cntrl-q Ctrl-j (В этом строчном Q, J нет необходимости удерживать клавишу shift) добавит перевод строки в существующий сеанс редактирования IPython.

for li in some_list: print(li)    

Перемещение курсора после двоеточия и нажатие Ctrl-q Ctrl-j

for li in some_list:
print(li)

IPython: 5.2.1, iTerm2: 3.0.15, macOS: 10.12.6