MicroPython:Основы/Язык MicroPython и его реализация/Интерактивный интерпретатор MicroPython (он же REPL): различия между версиями

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
Нет описания правки
 
Строка 13: Строка 13:
Если курсор находится в самом начале строки, нажатие на {{клавиша|Enter}} ({{клавиша|Return}}) запустит выполнение введенного вами кода. Ниже показано, что вы увидите, когда напечатаете оператор for (нижнее подчеркивание показывает, куда переместится курсор):
Если курсор находится в самом начале строки, нажатие на {{клавиша|Enter}} ({{клавиша|Return}}) запустит выполнение введенного вами кода. Ниже показано, что вы увидите, когда напечатаете оператор for (нижнее подчеркивание показывает, куда переместится курсор):


<syntaxhighlight lang="python" enclose="div">
<syntaxhighlight lang="python">
>>> for i in range(30):
>>> for i in range(30):
...    _
...    _
Строка 20: Строка 20:
Если после этого напечатать оператор [[if]], [[REPL]] создаст дополнительный уровень отступа:
Если после этого напечатать оператор [[if]], [[REPL]] создаст дополнительный уровень отступа:


<syntaxhighlight lang="python" enclose="div">
<syntaxhighlight lang="python">
>>> for i in range(30):
>>> for i in range(30):
...    if i > 3:
...    if i > 3:
Строка 28: Строка 28:
Теперь впишите break, а затем нажмите Enter (Return) и Backspace:
Теперь впишите break, а затем нажмите Enter (Return) и Backspace:


<syntaxhighlight lang="python" enclose="div">
<syntaxhighlight lang="python">
>>> for i in range(30):
>>> for i in range(30):
...    if i > 3:
...    if i > 3:
Строка 37: Строка 37:
Наконец, впишите print(i), нажмите {{клавиша|Enter}} ({{клавиша|Return}}), {{клавиша|Backspace }} и снова {{клавиша|Enter}}:
Наконец, впишите print(i), нажмите {{клавиша|Enter}} ({{клавиша|Return}}), {{клавиша|Backspace }} и снова {{клавиша|Enter}}:


<syntaxhighlight lang="python" enclose="div">
<syntaxhighlight lang="python">
>>> for i in range(30):
>>> for i in range(30):
...    if i > 3:
...    if i > 3:
Строка 58: Строка 58:
К примеру, сначала импортируйте модуль machine, напечатав '''import machine''', и нажмите {{клавиша|Enter}}({{клавиша|Return}}). Затем впишите '''m''' и нажмите {{клавиша|Tab}} – в результате '''m''' должна превратиться в machine. Теперь напечатайте точку (.) и снова нажмите {{клавиша|Tab}}. Вы должны увидеть примерно следующее:
К примеру, сначала импортируйте модуль machine, напечатав '''import machine''', и нажмите {{клавиша|Enter}}({{клавиша|Return}}). Затем впишите '''m''' и нажмите {{клавиша|Tab}} – в результате '''m''' должна превратиться в machine. Теперь напечатайте точку (.) и снова нажмите {{клавиша|Tab}}. Вы должны увидеть примерно следующее:


<syntaxhighlight lang="python" enclose="div">
<syntaxhighlight lang="python">
>>> machine.
>>> machine.
__name__        info            unique_id      reset
__name__        info            unique_id      reset
Строка 68: Строка 68:
Варианты для автозаполнения будут появляться до тех пор, пока они есть. Например, попробуйте вписать '''machine.Pin.AF3''' и нажмите {{клавиша|Tab}} – конструкция увеличится до '''machine.Pin.AF3_TIM'''. Если нажать {{клавиша|Tab}} второй раз, то вы увидите и другие варианты:
Варианты для автозаполнения будут появляться до тех пор, пока они есть. Например, попробуйте вписать '''machine.Pin.AF3''' и нажмите {{клавиша|Tab}} – конструкция увеличится до '''machine.Pin.AF3_TIM'''. Если нажать {{клавиша|Tab}} второй раз, то вы увидите и другие варианты:


<syntaxhighlight lang="python" enclose="div">
<syntaxhighlight lang="python">
>>> machine.Pin.AF3_TIM
>>> machine.Pin.AF3_TIM
AF3_TIM10      AF3_TIM11      AF3_TIM8        AF3_TIM9
AF3_TIM10      AF3_TIM11      AF3_TIM8        AF3_TIM9
Строка 80: Строка 80:
Например:
Например:


<syntaxhighlight lang="python" enclose="div">
<syntaxhighlight lang="python">
>>> for i in range(1000000):
>>> for i in range(1000000):
...    print(i)
...    print(i)
Строка 102: Строка 102:
Если вы захотите вставить в окно терминала фрагмент кода, вам помешает функция автоматического отступа. К примеру, если у вас есть вот такой кусок [[Python]]-кода...
Если вы захотите вставить в окно терминала фрагмент кода, вам помешает функция автоматического отступа. К примеру, если у вас есть вот такой кусок [[Python]]-кода...


<syntaxhighlight lang="python" enclose="div">  
<syntaxhighlight lang="python">  
def foo():
def foo():
     print('Это тест, демонстрирующий работу режима вставки')
     print('Это тест, демонстрирующий работу режима вставки')
Строка 111: Строка 111:
…и вы попробуете вставить его в обычный [[REPL]], то увидите примерно следующее:
…и вы попробуете вставить его в обычный [[REPL]], то увидите примерно следующее:


<syntaxhighlight lang="python" enclose="div">
<syntaxhighlight lang="python">
>>> def foo():
>>> def foo():
...        print('Это тест, демонстрирующий работу режима вставки')
...        print('Это тест, демонстрирующий работу режима вставки')
Строка 123: Строка 123:
Но если нажать {{клавиша|Ctrl}}+{{клавиша|E}}, вы войдете в режим вставки, который отключит функцию автоматического отступа и поменяет приглашение ввода с '''>>>''' на '''==='''. Например:
Но если нажать {{клавиша|Ctrl}}+{{клавиша|E}}, вы войдете в режим вставки, который отключит функцию автоматического отступа и поменяет приглашение ввода с '''>>>''' на '''==='''. Например:


<syntaxhighlight lang="python" enclose="div">
<syntaxhighlight lang="python">
>>>
>>>
paste mode; Ctrl-C to cancel, Ctrl-D to finish
paste mode; Ctrl-C to cancel, Ctrl-D to finish
Строка 144: Строка 144:
Программный сброс можно выполнить из [[REPL]], нажав {{клавиша|Ctrl}}+{{клавиша|D}}, или в [[Python]]-коде, выполнив:
Программный сброс можно выполнить из [[REPL]], нажав {{клавиша|Ctrl}}+{{клавиша|D}}, или в [[Python]]-коде, выполнив:


<syntaxhighlight lang="python" enclose="div">
<syntaxhighlight lang="python">
machine.soft_reset()
machine.soft_reset()
</syntaxhighlight>
</syntaxhighlight>
Строка 150: Строка 150:
Например, если выполнить сброс [[MicroPython]]-платы и запустить команду dir(), вы увидите примерно следующее:
Например, если выполнить сброс [[MicroPython]]-платы и запустить команду dir(), вы увидите примерно следующее:


<syntaxhighlight lang="python" enclose="div">
<syntaxhighlight lang="python">
>>> dir()
>>> dir()
['__name__', 'pyb']
['__name__', 'pyb']
Строка 157: Строка 157:
Теперь создайте несколько переменных и повторите команду dir():
Теперь создайте несколько переменных и повторите команду dir():


<syntaxhighlight lang="python" enclose="div">
<syntaxhighlight lang="python">
>>> i = 1
>>> i = 1
>>> j = 23
>>> j = 23
Строка 168: Строка 168:
Теперь, если нажать {{клавиша|Ctrl}}+{{клавиша|D}} и повторить команду dir(), вы увидите, что ваших переменных больше нет:
Теперь, если нажать {{клавиша|Ctrl}}+{{клавиша|D}} и повторить команду dir(), вы увидите, что ваших переменных больше нет:


<syntaxhighlight lang="python" enclose="div">
<syntaxhighlight lang="python">
MPY: sync filesystems
MPY: sync filesystems
MPY: soft reboot
MPY: soft reboot
Строка 182: Строка 182:
В [[REPL]] можно делать вычисления и сразу видеть их результаты. [[MicroPython]] хранит результаты работы предыдущего оператора в переменной '''_''' (нижнее подчеркивание). То есть вы можете использовать нижнее подчеркивание, чтобы сохранять результат в переменную. Например:
В [[REPL]] можно делать вычисления и сразу видеть их результаты. [[MicroPython]] хранит результаты работы предыдущего оператора в переменной '''_''' (нижнее подчеркивание). То есть вы можете использовать нижнее подчеркивание, чтобы сохранять результат в переменную. Например:


<syntaxhighlight lang="python" enclose="div">
<syntaxhighlight lang="python">
>>> 1 + 2 + 3 + 4 + 5
>>> 1 + 2 + 3 + 4 + 5
15
15

Текущая версия от 18:17, 14 мая 2023

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Режим интерактивного интерпретатора MicroPython (REPL)[1]

В этом разделе будут описаны некоторые характеристики режима интерактивного интерпретатора MicroPython. Его также часто называют REPL (расшифровывается как «Read, Eval, Print, Loop», что можно перевести как «цикл "чтение-вычисление-вывод"») – ниже мы будем использовать именно эту сокращенную аббревиатуру.

Автоматический отступ

Если вы создаете оператор Python, заканчивающийся двоеточием (например, if, for, while), то приглашение командной строки сменится на три точки (...), а курсор автоматически отступит на четыре пробела. Если нажать  ↵ Enter  (или  Return ), на следующей строчке будет либо точно такой же отступ (если это обычный оператор), либо дополнительный отступ (при необходимости). Если нажать  ← Backspace , это откатит один уровень отступа.

Если курсор находится в самом начале строки, нажатие на  ↵ Enter  ( Return ) запустит выполнение введенного вами кода. Ниже показано, что вы увидите, когда напечатаете оператор for (нижнее подчеркивание показывает, куда переместится курсор):

>>> for i in range(30):
...     _

Если после этого напечатать оператор if, REPL создаст дополнительный уровень отступа:

>>> for i in range(30):
...     if i > 3:
...         _

Теперь впишите break, а затем нажмите Enter (Return) и Backspace:

>>> for i in range(30):
...     if i > 3:
...         break
...     _

Наконец, впишите print(i), нажмите  ↵ Enter  ( Return ),  ← Backspace  и снова  ↵ Enter :

>>> for i in range(30):
...     if i > 3:
...         break
...     print(i)
...
0
1
2
3
>>>

Если в двух предыдущих строчках находятся только пробелы, автоматический отступ сделан не будет. Это значит, что для того, чтобы завершить составной оператор, вам нужно трижды нажать  ↵ Enter  ( Return ) – третье нажатие завершит оператор и выполнит его.

Автозаполнение

Если вы пишете какую-то команду в REPL и напечатанные вами символы соответствуют началу какой-то конструкции MicroPython, то нажатие на  Tab ⇆  покажет вам варианты того, как можно закончить введенную вами команду.

К примеру, сначала импортируйте модуль machine, напечатав import machine, и нажмите  ↵ Enter ( Return ). Затем впишите m и нажмите  Tab ⇆  – в результате m должна превратиться в machine. Теперь напечатайте точку (.) и снова нажмите  Tab ⇆ . Вы должны увидеть примерно следующее:

>>> machine.
__name__        info            unique_id       reset
bootloader      freq            rng             idle
sleep           deepsleep       disable_irq     enable_irq
Pin

Варианты для автозаполнения будут появляться до тех пор, пока они есть. Например, попробуйте вписать machine.Pin.AF3 и нажмите  Tab ⇆  – конструкция увеличится до machine.Pin.AF3_TIM. Если нажать  Tab ⇆  второй раз, то вы увидите и другие варианты:

>>> machine.Pin.AF3_TIM
AF3_TIM10       AF3_TIM11       AF3_TIM8        AF3_TIM9
>>> machine.Pin.AF3_TIM

Прерывание работающей программы

Вы можете прервать работу запущенной программы, нажав  Ctrl + C . Это вызовет исключение «KeyboardInterrupt», которое вернет вас в REPL, но при условии, что ваша программа не помешает исключению «KeyboardInterrupt».

Например:

>>> for i in range(1000000):
...     print(i)
...
0
1
2
3
...
6466
6467
6468
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
KeyboardInterrupt:
>>>

Режим вставки

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

 
def foo():
    print('Это тест, демонстрирующий работу режима вставки')
    print('Это вторая строчка')
foo()

…и вы попробуете вставить его в обычный REPL, то увидите примерно следующее:

>>> def foo():
...         print('Это тест, демонстрирующий работу режима вставки')
...             print('Это вторая строчка')
...             foo()
...
  File "<stdin>", line 3
IndentationError: unexpected indent

Но если нажать  Ctrl + E , вы войдете в режим вставки, который отключит функцию автоматического отступа и поменяет приглашение ввода с >>> на ===. Например:

>>>
paste mode; Ctrl-C to cancel, Ctrl-D to finish
=== def foo():
===     print('Это тест, демонстрирующий работу режима вставки')
===     print('Это вторая строчка')
=== foo()
===
Это тест, демонстрирующий работу режима вставки
Это вторая строчка
>>>

Режим вставки позволяет вставлять пустые строчки. Вставленный текст компилируется, как если бы он был файлом. Нажатие на  Ctrl + D  выполнит выход из режима вставки и запустит компиляцию кода.

Программный сброс

Программный сброс выполнит сброс интерпретатора Python, но постарается не сбрасывать информацию о том, как вы подключены к плате с MicroPython (USB-Serial или WiFi).

Программный сброс можно выполнить из REPL, нажав  Ctrl + D , или в Python-коде, выполнив:

machine.soft_reset()

Например, если выполнить сброс MicroPython-платы и запустить команду dir(), вы увидите примерно следующее:

>>> dir()
['__name__', 'pyb']

Теперь создайте несколько переменных и повторите команду dir():

>>> i = 1
>>> j = 23
>>> x = 'abc'
>>> dir()
['j', 'x', '__name__', 'pyb', 'i']
>>>

Теперь, если нажать  Ctrl + D  и повторить команду dir(), вы увидите, что ваших переменных больше нет:

MPY: sync filesystems
MPY: soft reboot
MicroPython v1.5-51-g6f70283-dirty on 2015-10-30; PYBv1.0 with STM32F405RG
Type "help()" for more information.
>>> dir()
['__name__', 'pyb']
>>>

Специальная переменная _ (нижнее подчеркивание)

В REPL можно делать вычисления и сразу видеть их результаты. MicroPython хранит результаты работы предыдущего оператора в переменной _ (нижнее подчеркивание). То есть вы можете использовать нижнее подчеркивание, чтобы сохранять результат в переменную. Например:

>>> 1 + 2 + 3 + 4 + 5
15
>>> x = _
>>> x
15
>>>

Режим удалённого скрипта (raw REPL)

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

Вход в режим удаленного скрипта осуществляется при помощи нажатия на  Ctrl + A . Затем вы отправляете свой Python-код, после чего нужно нажать  Ctrl + D . В результате вы получите подтверждение «OK», после чего Python-код будет скомпилирован и выполнен. Все выходные данные (и ошибки) будут отправлены обратно. Нажатие на  Ctrl + B  выполнит выход из режима удаленного скрипта и вернет вас в обычный («дружелюбный») REPL.

Программа tools/pyboard.py использует режим удаленного скрипта для выполнения Python-файлов на MicroPython-плате.

См.также

Внешние ссылки