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

Командная строка Python: игнорировать отступ

Я новичок в Python.

Короче:

Во время сценариев я постоянно хочу тестировать небольшие биты и куски моих программ, копируя/вставляя некоторые строки кода из моего текстового редактора в интерпретатор Python командной строки. Когда эти строки отступы (например, потому что они являются частью функции), я бы хотел, чтобы интерпретатор либо игнорировал, либо не проверял отступы, так что мне не нужно их отменить до копирования/вставки. Возможно ли это?

Подробнее:

Вот упрощенный пример того, что я имею в виду:

Скажем, мой текстовый редактор содержит следующий модуль, который в настоящее время разрабатывается:

def MyFunc(arg):
    .../...
    if arg == 1:
        print "This is my function called with value 1."
        print "Done."
    else:
        print "This is my function called with value other than 1."
        print "Nothing else to say."
    .../...

И позвольте сказать, что я просто хочу протестировать 2 первых строки print (строки 4 и 5 вышеприведенного кода) сразу, чтобы быстро проверить, работает ли, по крайней мере, часть моего модуля, как ожидалось. Если я выберу обе строки вместе, я, по крайней мере, выберем вдоль отступа для второй строки (если не для обоих). Когда вы вставили в командной строке, я получу ошибку для этого отступа.

Простое принудительное поведение интерпретатора будет состоять в том, что он просто игнорирует отступ.

Более мощным поведением было бы попросить переводчика просто не проверять отступ. То есть если там есть отступы, интерпретатор должен попытаться использовать его, чтобы я мог еще копировать/пропустить даже структурированную часть кода (например, строки с 3 по 8 из вышеуказанного кода). Но в случае ошибок с отступом они просто игнорируют их.

Если нет способа сделать то, о чем я прошу здесь, тогда есть трюки для выполнения чего-то подобного: простой способ быстро проверить фрагменты кода без необходимости запускать всю программу каждый раз, когда вы просто хотите настроить небольшие ее части здесь и там.

NB 1: unindenting НЕ решение для того, что я ищу.

NB 2: наличие интерпретатора вместе с возможностью копирования/вставки предлагает очень мощный способ простого тестирования кода, но явный механизм отступов Python является сильным недостатком такого использования интерпретатора, как описано здесь, если поворот не может быть найденным. Было бы жалко.

4b9b3361

Ответ 1

В таком случае я использую следующий трюк (prepend if 1:):

>>> if 1:
...     print 1
...
1

Ответ 2

Функция ipython %cpaste позволяет вставлять отступы и работать правильно:

In [5]: %cpaste
Pasting code; enter '--' alone on the line to stop or use Ctrl-D.
:        print "This is my function called with value 1."
:        print "Done."
:^D<EOF>
This is my function called with value 1.
Done.

Ответ 3

Можно ли просто не копировать вкладки?

Notepad ++ и Visual Studio позволяют выбирать прямоугольник, удерживая Shift + Alt при выборе текста.

Независимо от того, какой редактор вы используете, возможно, это также позволяет.

Да, это не отвечает на ваш вопрос по заданию, но, возможно, это решит вашу проблему.

изменить

gvim разрешает прямоугольные выделения, содержащие все содержимое строки Ctrl-l v Ctrl-q $ Shift-Down or Up arrow. Спасибо Джоэлю за разъяснение этого.

Эта ссылка объясняет и предоставляет другие альтернативы в vim: http://vim.wikia.com/wiki/Add_trailing_blanks_to_lines_for_easy_visual_blocks

Ответ 4

Ну, вы можете создать фиктивные кодовые блоки, чтобы после копирования-вставки ваш код отступал правильным образом. Если код, из которого вы копируете, выглядит следующим образом:

...
    ...
        <python code to be copied>

Затем в оболочке напишите:

>>> if True:
>>>     if True:
>>> <Paste your code here>