Базовые знания Python
Видеоурок, приложение №1: синтаксис Python: https://singtown.com/learn/50061/
Преимущества использования Python
OpenMV может использовать Python для вторичной разработки. Есть несколько преимуществ:
- Легко начать
- Нет необходимости учитывать применение и выпуск памяти
- Существует множество библиотек MicroPython, которые можно использовать напрямую (несовместимо с модулями Python на ПК)
- Команда разработчиков разработала различные алгоритмы и модули OpenMV, которые можно назвать
Python — очень распространенный язык, который широко используется в обработке изображений, машинном обучении и сетевом программировании. А с Python очень легко начать работу. Если у вас есть основы программирования на других языках (например, C, C++, Java), начать будет проще.
Рекомендуется, если у вас есть опыт программирования на C/C++/Java (или любом другом языке).\ Учебник Ляо Сюэфэна по Python
Рекомендуется, если у вас нет опыта программирования.\ Изучите Python глупым способом
REPL и последовательный порт
IDE OpenMV поставляется с помощником по последовательному порту для подключения к OpenMV, а также может подключаться к другим последовательным портам, таким как Arduino, pyboard и esp8266.
Сначала отключите OpenMV от IDE, иначе последовательный порт будет конфликтовать!
Открыть инструменты в OpenMV → Открыть терминал → Новый терминал
Войдите в терминал
print("hello OpenMV!")
будет отображаться
hello OpenMV!
Синтаксис Python
выход
Используйте print(), чтобы добавить строку в скобках для вывода указанного текста на экран. Например, для вывода «привет, мир» код выглядит следующим образом:
print('hello, world')
hello, world
Функция print() также может принимать несколько строк, разделенных запятыми "," для вывода их последовательно:
print('The quick brown fox', 'jumps over', 'the lazy dog')
The quick brown fox jumps over the lazy dog
print() будет печатать каждую строку по очереди. Когда она встретит запятую, она выведет пробел. Поэтому выходная строка записывается следующим образом:
The quick brown fox jumps over the lazy dog
print() также может печатать целые числа или результаты вычислений:
print(300)
300
print(100 + 200)
300
Поэтому мы можем напечатать результат вычисления 100+200 красивее:
print('100 + 200 =', 100 + 200)
100 + 200 = 300
Обратите внимание, что для 100 + 200 интерпретатор Python автоматически вычисляет результат 300. Однако «100 + 200 =» — это строка, а не математическая формула, и Python обрабатывает ее как строку.
переменная
В Python знак равенства = является оператором присваивания. Переменной может быть присвоен любой тип данных. Одна и та же переменная может быть присвоена повторно, и это может быть переменная разных типов, например:
a = 123 # a是整数
print(a)
a = 'ABC' # a变为字符串
print(a)
Язык такого типа, тип переменной которого не фиксирован, называется динамическим языком, а его аналогом является статический язык. В статических языках тип переменной должен быть указан при определении переменной. Если тип не совпадает при присвоении значения, будет сообщено об ошибке. Например, Java — статический язык, и оператор присваивания выглядит следующим образом (// представляет собой комментарий):
int a = 123; // a是整数类型变量
a = "ABC"; // 错误:不能把字符串赋给整型变量
По сравнению со статическими языками динамические языки более гибкие по этой причине.
список список
Одним из встроенных типов данных Python является список: list. Список — это упорядоченная коллекция, элементы которой можно добавлять и удалять в любое время.\ Например, чтобы перечислить имена всех учеников в классе, вы можете использовать список для его представления:
classmates = ['Michael', 'Bob', 'Tracy']
classmates
['Michael', 'Bob', 'Tracy']
Переменная одноклассники представляет собой список. Используйте функцию len(), чтобы получить количество элементов списка:
len(classmates)
3
Используйте индекс для доступа к элементу в каждой позиции в списке. Помните, что индекс начинается с 0:
classmates[0]
'Michael'
classmates[1]
'Bob'
classmates[2]
'Tracy'
classmates[3]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
Когда индекс превышает диапазон, Python сообщит об ошибке IndexError, поэтому убедитесь, что индекс не выходит за пределы диапазона. Помните, что индекс последнего элемента равен len(classates) - 1.
Если вы хотите получить последний элемент, помимо вычисления позиции индекса, вы также можете использовать -1 в качестве индекса, чтобы напрямую получить последний элемент:
classmates[-1]
'Tracy'
По аналогии можно получить предпоследний и третий предпоследний:
classmates[-2]
'Bob'
classmates[-3]
'Michael'
classmates[-4]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
Разумеется, четвёртый снизу перешёл черту.
Список — это изменяемый упорядоченный список, поэтому вы можете добавлять элементы в конец списка:
classmates.append('Adam')
classmates
['Michael', 'Bob', 'Tracy', 'Adam']
Вы также можете вставлять элементы в указанную позицию, например, с номером индекса 1:
classmates.insert(1, 'Jack')
classmates
['Michael', 'Jack', 'Bob', 'Tracy', 'Adam']
Чтобы удалить элементы в конце списка, используйте метод pop():
classmates.pop()
'Adam'
classmates
['Michael', 'Jack', 'Bob', 'Tracy']
Чтобы заменить элемент другим элементом, вы можете напрямую присвоить его соответствующей позиции индекса:
classmates[1] = 'Sarah'
classmates
['Michael', 'Sarah', 'Tracy']
Типы данных элементов списка также могут быть разными, например:
L = ['Apple', 123, True]
Если в списке нет элемента, это пустой список и его длина равна 0:
L = []
len(L)
0
кортеж
Другой тип упорядоченного списка называется кортежем. Кортеж очень похож на список, но после инициализации кортеж нельзя изменить. Например, также перечисляются имена одноклассников:
classmates = ('Michael', 'Bob', 'Tracy')
Теперь кортеж классов не может быть изменен, и в нем нет таких методов, как добавление() и вставка(). Остальные методы получения элементов аналогичны спискам. Классы[0] и классы[-1] можно использовать обычным образом, но их нельзя присваивать другим элементам.
Какой смысл в неизменяемых кортежах? Поскольку кортежи неизменяемы, код безопаснее. Если возможно, используйте кортеж вместо списка.
Ловушки кортежа. При определении кортежа его элементы должны быть определены во время определения, например:
t = (1, 2)
t
(1, 2)
Однако, чтобы определить кортеж только с одним элементом, определите его следующим образом:
t = (1)
t
1
Определено не кортеж, t — целочисленная переменная, а значение переменной t равно 1! Это связано с тем, что скобки () могут обозначать в математических формулах как кортежи, так и круглые скобки, что создает неоднозначность. Поэтому Python оговаривает, что в этом случае вычисления выполняются по скобкам, и результат вычислений, естественно, равен 1.
Поэтому при определении кортежа, состоящего только из одного элемента, необходимо добавлять запятую, чтобы исключить двусмысленность:
t = (1,)
t
(1,)
Когда Python отображает кортеж только с одним элементом, он также добавляет запятую, чтобы вы не приняли его за скобку в смысле математических вычислений.
Условное суждение
Полная форма оператора if:
if <条件判断1>:
<执行1>
elif <条件判断2>:
<执行2>
elif <条件判断3>:
<执行3>
else:
<执行4>
например:
age = 20
if age >= 6:
print('teenager')
elif age >= 18:
print('adult')
else:
print('kid')
цикл
В Python существует два типа циклов. Один из них — цикл for...in, который по очереди перебирает каждый элемент в списке или кортеже. См. пример:
names = ['Michael', 'Bob', 'Tracy']
for name in names:
print(name)
Выполнение этого кода будет последовательно печатать каждый элемент имен:
Michael
Bob
Tracy
Таким образом, цикл for x in... просто заменяет каждый элемент в переменную x, а затем выполняет оператор блока с отступом.
Если вы хотите вычислить сумму целых чисел от 1 до 100, записать числа от 1 до 100 немного сложно. К счастью, Python предоставляет функцию range(), которая может генерировать целочисленную последовательность, которую затем можно преобразовать в список через функцию list(). Например, последовательность, сгенерированная диапазоном(5), представляет собой целое число, начинающееся с 0 и меньше 5:
list(range(5))
[0, 1, 2, 3, 4]
диапазон(101) может генерировать целочисленную последовательность от 0 до 100, рассчитываемую следующим образом:
sum = 0
for x in range(101):
sum = sum + x
print(sum)
Второй тип цикла — это цикл while. Например, если мы хотим вычислить сумму всех нечетных чисел в пределах 100, мы можем использовать цикл while для его реализации:
sum = 0
n = 99
while n > 0:
sum = sum + n
n = n - 2
print(sum)
===== Преобразование типа данных =====
Часто используемые функции, встроенные в Python, также включают функции преобразования типов данных. Например, функция int() может преобразовывать другие типы данных в целые числа:
>>> int('123')
123
>>> int(12.34)
12
>>> float('12.34')
12.34
>>> str(1.23)
'1.23'
>>> str(100)
'100'
>>> bool(1)
True
>>> bool('')
False
===== Функции =====
В Python для определения функции используйте оператор def, напишите имя функции, круглые скобки, параметры в скобках и двоеточие:, затем напишите тело функции в блоке с отступом и используйте оператор return для возврата возвращаемого значения функция.
Давайте сначала напишем функцию, которая вычисляет x2:
def power(x):
return x * x
Для функции power(x) параметр x является позиционным параметром.
Когда мы вызываем степенную функцию, мы должны передать один и только один параметр x:
мощность(5)\ 25\ мощность(15)\ 225
А что, если мы хотим вычислить x3? Вы можете определить другую функцию power3, но что, если вы хотите вычислить x4, x5...? Мы не можем определить бесконечные функции.
Возможно, вы подумали, что можно изменить степень(x) на степень(x, n), чтобы вычислить xn, и просто сделайте это:
def power(x, n):
s = 1
while n > 0:
n = n - 1
s = s * x
return s
Для этой модифицированной функции степени(x, n) можно вычислить любую n-ную степень:
мощность(5, 2)\ 25\ мощность(5, 3)\ 125
Модифицированная функция power(x, n) имеет два параметра: x и n. Оба параметра являются позиционными. При вызове функции два переданных значения присваиваются параметрам x и n в порядке позиции.
кусочек
Получение некоторых элементов списка или кортежа — очень распространенная операция. Например, список выглядит следующим образом:
L = ['Майкл', 'Сара', 'Трейси', 'Боб', 'Джек']
Возьмите первые три элемента и завершите нарезку одной строкой кода:
Л[0:3]\ ['Майкл', 'Сара', 'Трейси']
L[0:3] означает начало от индекса 0 до индекса 3, но не включая индекс 3. То есть индексы 0, 1, 2 — это ровно 3 элемента.
Если первый индекс равен 0, его также можно опустить:
Л[:3]\ ['Майкл', 'Сара', 'Трейси']
Вы также можете начать с индекса 1 и удалить 2 элемента:
Л[1:3]\ ['Сара', 'Трейси']
Кортеж также является своего рода списком, с той лишь разницей, что кортеж является неизменяемым. Следовательно, с кортежами можно работать и путем нарезки, но результатом операции все равно будет кортеж:
(0, 1, 2, 3, 4, 5)[:3]\ (0, 1, 2)
Строку «xxx» также можно рассматривать как список, каждый элемент которого является символом. Следовательно, строки также можно разрезать, но результат все равно будет строкой:
'ABCDEFG'[:3]\ 'АВС'
объект
Python — это объектно-ориентированное программирование, например светодиодный индикатор
from pyb import LED
red_led = LED(1)
red_led.on()
LED — это класс, а red_led — это объект. С этим объектом можно работать, например включать, выключать и просматривать значение.