MicroPython:Основы/Язык MicroPython и его реализация/Интерактивный интерпретатор MicroPython (он же REPL): различия между версиями
Myagkij (обсуждение | вклад) |
Нет описания правки |
||
Строка 13: | Строка 13: | ||
Если курсор находится в самом начале строки, нажатие на {{клавиша|Enter}} ({{клавиша|Return}}) запустит выполнение введенного вами кода. Ниже показано, что вы увидите, когда напечатаете оператор for (нижнее подчеркивание показывает, куда переместится курсор): | Если курсор находится в самом начале строки, нажатие на {{клавиша|Enter}} ({{клавиша|Return}}) запустит выполнение введенного вами кода. Ниже показано, что вы увидите, когда напечатаете оператор for (нижнее подчеркивание показывает, куда переместится курсор): | ||
<syntaxhighlight lang="python | <syntaxhighlight lang="python"> | ||
>>> for i in range(30): | >>> for i in range(30): | ||
... _ | ... _ | ||
Строка 20: | Строка 20: | ||
Если после этого напечатать оператор [[if]], [[REPL]] создаст дополнительный уровень отступа: | Если после этого напечатать оператор [[if]], [[REPL]] создаст дополнительный уровень отступа: | ||
<syntaxhighlight lang="python | <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 | <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 | <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 | <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 | <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 | <syntaxhighlight lang="python"> | ||
>>> for i in range(1000000): | >>> for i in range(1000000): | ||
... print(i) | ... print(i) | ||
Строка 102: | Строка 102: | ||
Если вы захотите вставить в окно терминала фрагмент кода, вам помешает функция автоматического отступа. К примеру, если у вас есть вот такой кусок [[Python]]-кода... | Если вы захотите вставить в окно терминала фрагмент кода, вам помешает функция автоматического отступа. К примеру, если у вас есть вот такой кусок [[Python]]-кода... | ||
<syntaxhighlight lang="python | <syntaxhighlight lang="python"> | ||
def foo(): | def foo(): | ||
print('Это тест, демонстрирующий работу режима вставки') | print('Это тест, демонстрирующий работу режима вставки') | ||
Строка 111: | Строка 111: | ||
…и вы попробуете вставить его в обычный [[REPL]], то увидите примерно следующее: | …и вы попробуете вставить его в обычный [[REPL]], то увидите примерно следующее: | ||
<syntaxhighlight lang="python | <syntaxhighlight lang="python"> | ||
>>> def foo(): | >>> def foo(): | ||
... print('Это тест, демонстрирующий работу режима вставки') | ... print('Это тест, демонстрирующий работу режима вставки') | ||
Строка 123: | Строка 123: | ||
Но если нажать {{клавиша|Ctrl}}+{{клавиша|E}}, вы войдете в режим вставки, который отключит функцию автоматического отступа и поменяет приглашение ввода с '''>>>''' на '''==='''. Например: | Но если нажать {{клавиша|Ctrl}}+{{клавиша|E}}, вы войдете в режим вставки, который отключит функцию автоматического отступа и поменяет приглашение ввода с '''>>>''' на '''==='''. Например: | ||
<syntaxhighlight lang="python | <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 | <syntaxhighlight lang="python"> | ||
machine.soft_reset() | machine.soft_reset() | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 150: | Строка 150: | ||
Например, если выполнить сброс [[MicroPython]]-платы и запустить команду dir(), вы увидите примерно следующее: | Например, если выполнить сброс [[MicroPython]]-платы и запустить команду dir(), вы увидите примерно следующее: | ||
<syntaxhighlight lang="python | <syntaxhighlight lang="python"> | ||
>>> dir() | >>> dir() | ||
['__name__', 'pyb'] | ['__name__', 'pyb'] | ||
Строка 157: | Строка 157: | ||
Теперь создайте несколько переменных и повторите команду dir(): | Теперь создайте несколько переменных и повторите команду dir(): | ||
<syntaxhighlight lang="python | <syntaxhighlight lang="python"> | ||
>>> i = 1 | >>> i = 1 | ||
>>> j = 23 | >>> j = 23 | ||
Строка 168: | Строка 168: | ||
Теперь, если нажать {{клавиша|Ctrl}}+{{клавиша|D}} и повторить команду dir(), вы увидите, что ваших переменных больше нет: | Теперь, если нажать {{клавиша|Ctrl}}+{{клавиша|D}} и повторить команду dir(), вы увидите, что ваших переменных больше нет: | ||
<syntaxhighlight lang="python | <syntaxhighlight lang="python"> | ||
MPY: sync filesystems | MPY: sync filesystems | ||
MPY: soft reboot | MPY: soft reboot | ||
Строка 182: | Строка 182: | ||
В [[REPL]] можно делать вычисления и сразу видеть их результаты. [[MicroPython]] хранит результаты работы предыдущего оператора в переменной '''_''' (нижнее подчеркивание). То есть вы можете использовать нижнее подчеркивание, чтобы сохранять результат в переменную. Например: | В [[REPL]] можно делать вычисления и сразу видеть их результаты. [[MicroPython]] хранит результаты работы предыдущего оператора в переменной '''_''' (нижнее подчеркивание). То есть вы можете использовать нижнее подчеркивание, чтобы сохранять результат в переменную. Например: | ||
<syntaxhighlight lang="python | <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-плате.