Conocimientos previos de Python
Apéndice uno del tutorial de vídeo一 - sintaxis de Python: https://singtown.com/learn/50061/
Beneficios de usar Python
OpenMV puede usar Python para el desarrollo secundario. Hay varios beneficios:
- Fácil de empezar
- No es necesario considerar la aplicación y liberación de memoria
- Hay muchas bibliotecas de MicroPython que se pueden usar directamente (no son compatibles con los módulos de Python en la PC)
- El equipo de desarrollo ha desarrollado varios algoritmos y módulos de OpenMV que se pueden llamar
Python es un lenguaje muy utilizado y se utiliza ampliamente en el procesamiento de imágenes, el aprendizaje automático y la programación de redes. Y Python es un lenguaje muy fácil para comenzar. Si tiene una base de programación en otros lenguajes (como C, C++, Java), será más fácil comenzar.
Recomendado si tienes experiencia previa en programación en C/C++/Java (o cualquier otro lenguaje)\ Tutorial de Python de Liao Xuefeng
Recomendado si no tienes experiencia previa en programación.\ Aprende Python de la manera más estúpida
REPL y puerto serie
El IDE de OpenMV viene con un asistente de puerto serie para conectarse a OpenMV y también puede conectarse a otros puertos serie, como Arduino, pyboard y esp8266.
Primero, desconecte OpenMV del IDE; de lo contrario, el puerto serie entrará en conflicto
Abra Herramientas en OpenMV→ Open Terminal → New Terminal
Entra en la terminal
print("hello OpenMV!")
se mostrará
hello OpenMV!
Sintaxis de Python
producción
Utilice print() para agregar una cadena entre paréntesis para mostrar el texto especificado en la pantalla. Por ejemplo, para generar'hello, world', el código es el siguiente:
print('hello, world')
hello, world
La función print() también puede aceptar múltiples cadenas separadas por comas "," para generarlas en una serie:
print('The quick brown fox', 'jumps over', 'the lazy dog')
The quick brown fox jumps over the lazy dog
print() imprimirá cada cadena por turno. Cuando encuentre una coma "," generará un espacio. Por lo tanto, la cadena de salida se escribe así:
The quick brown fox jumps over the lazy dog
print() también puede imprimir números enteros o resultados de cálculos:
print(300)
300
print(100 + 200)
300
Por lo tanto, podemos imprimir el resultado de calcular 100 + 200 de manera más hermosa:
print('100 + 200 =', 100 + 200)
100 + 200 = 300
Tenga en cuenta que para 100 + 200, el intérprete de Python calcula automáticamente el resultado 300. Sin embargo, '100 + 200 =' es una cadena y no una fórmula matemática, y Python la trata como una cadena.
variable
En Python, el signo igual = es una declaración de asignación. Se puede asignar cualquier tipo de datos a una variable. La misma variable se puede asignar repetidamente y puede ser una variable de diferentes tipos, por ejemplo:
a = 123 # a是整数
print(a)
a = 'ABC' # a变为字符串
print(a)
Este tipo de lenguaje cuyo tipo de variable no es fijo se denomina lenguaje dinámico y su contraparte es un lenguaje estático. En lenguajes estáticos, se debe especificar el tipo de variable al definir una variable. Si el tipo no coincide al asignar un valor, se informará un error. Por ejemplo, Java es un lenguaje estático y la declaración de asignación es la siguiente (// representa un comentario):
int a = 123; // a是整数类型变量
a = "ABC"; // 错误:不能把字符串赋给整型变量
En comparación con los lenguajes estáticos, los lenguajes dinámicos son más flexibles por este motivo.
lista lista
Uno de los tipos de datos integrados de Python es una lista: lista. Una lista es una colección ordenada en la que se pueden agregar y eliminar elementos en cualquier momento.\ Por ejemplo, para enumerar los nombres de todos los estudiantes de la clase, puede usar una lista para representarlo:
classmates = ['Michael', 'Bob', 'Tracy']
classmates
['Michael', 'Bob', 'Tracy']
La variable compañeros de clase es una lista. Utilice la función len() para obtener el número de elementos de la lista:
len(classmates)
3
Utilice el índice para acceder al elemento en cada posición de la lista. Recuerde que el índice comienza desde 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
Cuando el índice excede el rango, Python informará un IndexError, así que asegúrese de que el índice no salga del rango. Recuerde que el índice del último elemento es len(classmates) - 1.
Si desea obtener el último elemento, además de calcular la posición del índice, también puede usar -1 como índice para obtener el último elemento directamente:
classmates[-1]
'Tracy'
Por analogía, puede obtener el penúltimo y el penúltimo:
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
Por supuesto, el cuarto desde abajo cruzó la línea.
La lista es una lista ordenada mutable, por lo que puede agregar elementos al final de la lista:
classmates.append('Adam')
classmates
['Michael', 'Bob', 'Tracy', 'Adam']
También puede insertar elementos en una posición específica, como el índice número 1:
classmates.insert(1, 'Jack')
classmates
['Michael', 'Jack', 'Bob', 'Tracy', 'Adam']
Para eliminar elementos al final de la lista, utilice el método pop():
classmates.pop()
'Adam'
classmates
['Michael', 'Jack', 'Bob', 'Tracy']
Para reemplazar un elemento con otro elemento, puede asignarlo directamente a la posición de índice correspondiente:
classmates[1] = 'Sarah'
classmates
['Michael', 'Sarah', 'Tracy']
Los tipos de datos de los elementos de la lista también pueden ser diferentes, por ejemplo:
L = ['Apple', 123, True]
Si no hay ningún elemento en una lista, es una lista vacía y su longitud es 0:
L = []
len(L)
0
tuple tupla
Otro tipo de lista ordenada se llama tupla. Tupla es muy similar a la lista, pero una vez inicializada, la tupla no se puede modificar. Por ejemplo, los nombres de los compañeros de clase también se enumeran:
classmates = ('Michael', 'Bob', 'Tracy')
Ahora, la tupla de clases no se puede cambiar y no tiene métodos como append() e insert(). Otros métodos para obtener elementos son los mismos que las listas. Puede usar clases[0] y clases[-1] normalmente, pero no se pueden asignar a otros elementos.
¿Cuál es el punto de las tuplas inmutables? Como las tuplas son inmutables, el código es más seguro. Si es posible, utilice tupla en lugar de lista.
Trampas de tupla: Cuando defines una tupla, los elementos de la tupla deben determinarse en el momento de la definición, como por ejemplo:
t = (1, 2)
t
(1, 2)
Sin embargo, para definir una tupla con solo 1 elemento, si la defines así:
t = (1)
t
1
¡Lo que se define no es una tuple, t es una variable entera y el valor de la variable t es 1! Esto se debe a que los corchetes () pueden representar tanto tuple como paréntesis en fórmulas matemáticas, lo que crea ambigüedad. Por lo tanto, Python estipula que en este caso, los cálculos se realizan entre paréntesis y el resultado del cálculo es naturalmente 1.
Por lo tanto, se debe agregar una coma al definir una tuple con un solo elemento para eliminar la ambigüedad:
t = (1,)
t
(1,)
Cuando Python muestra una tuple con un solo elemento, también agrega una coma para evitar que la malinterpretes como un corchete en el sentido de cálculos matemáticos.
Juicio condicional
La forma completa de la declaración if es:
if <条件判断1>:
<执行1>
elif <条件判断2>:
<执行2>
elif <条件判断3>:
<执行3>
else:
<执行4>
Por ejemplo:
age = 20
if age >= 6:
print('teenager')
elif age >= 18:
print('adult')
else:
print('kid')
ciclo
Hay dos tipos de bucles en Python. Uno es el bucle for...in, que itera cada elemento de la lista o tuple por turno. Vea el ejemplo:
names = ['Michael', 'Bob', 'Tracy']
for name in names:
print(name)
La ejecución de este código imprimirá cada elemento de los nombres por turno:
Michael
Bob
Tracy
Entonces, el bucle for x in... simplemente sustituye cada elemento en la variable x y luego ejecuta la instrucción del bloque sangrado.
Si desea calcular la suma de números enteros del 1 - 100, es un poco difícil escribir del 1 al 100. Afortunadamente, Python proporciona una función range() que puede generar una secuencia de números enteros, que luego se puede convertir en una lista a través de la función list(). Por ejemplo, la secuencia generada por range(5) es un número entero que comienza en 0 y es menor que 5:
list(range(5))
[0, 1, 2, 3, 4]
range(101) puede generar una secuencia entera de 0-100, calculada de la siguiente manera:
sum = 0
for x in range(101):
sum = sum + x
print(sum)
El segundo tipo de bucle es un bucle while. Por ejemplo, si queremos calcular la suma de todos los números impares hasta 100, podemos usar un bucle while para implementarlo:
sum = 0
n = 99
while n > 0:
sum = sum + n
n = n - 2
print(sum)
===== Conversión de tipo de datos =====
Las funciones comúnmente utilizadas integradas en Python también incluyen funciones de conversión de tipos de datos. Por ejemplo, la función int() puede convertir otros tipos de datos en números enteros:
>>> 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
===== Funciones =====
En Python, para definir una función, use la declaración def, escriba el nombre de la función, paréntesis, parámetros entre paréntesis y dos puntos:, luego escriba el cuerpo de la función en el bloque sangrado y use la declaración return para devolver el valor de retorno de la función.
Primero escribamos una función que calcule x2:
def power(x):
return x * x
Para la función power(x), el parámetro x es un parámetro posicional.
Cuando llamamos a la función de potencia, debemos pasar un solo parámetro x:
power(5)\ 25\ power(15)\ 225
Ahora bien, ¿y si queremos calcular x3? Puedes definir otra función power3, pero ¿qué pasa si quieres calcular x4, x5...? No podemos definir funciones infinitas.
Quizás hayas pensado que puedes cambiar potencia(x) a potencia(x, n) para calcular xn, y simplemente hacerlo:
def power(x, n):
s = 1
while n > 0:
n = n - 1
s = s * x
return s
Para esta función de potencia modificada(x, n), se puede calcular cualquier enésima potencia:
power(5, 2)\ 25\ power(5, 3)\ 125
La función power(x, n) modificada tiene dos parámetros: x y n. Ambos parámetros son parámetros posicionales. Al llamar a la función, los dos valores pasados se asignan a los parámetros x y n en orden de posición.
rebanada
Recuperar algunos elementos de una lista o tupla es una operación muy común. Por ejemplo, una lista es la siguiente:
L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']
Tome los primeros 3 elementos y complete el corte con una línea de código:
L[0:3]\ ['Michael', 'Sarah', 'Tracy']
L[0:3] significa comenzar desde el índice 0 hasta el índice 3, pero sin incluir el índice 3. Es decir, los índices 0, 1, 2 son exactamente 3 elementos.
Si el primer índice es 0, también se puede omitir:
L[:3]\ ['Michael', 'Sarah', 'Tracy']
También puedes empezar desde el índice 1 y sacar 2 elementos:
L[1:3]\ ['Sarah', 'Tracy']
Tupla también es una especie de lista, la única diferencia es que la tupla es inmutable. Por lo tanto, las tuplas también se pueden operar dividiendo, pero el resultado de la operación sigue siendo una tupla:
(0, 1, 2, 3, 4, 5)[:3]\ (0, 1, 2)
La cadena 'xxx' también puede considerarse como una lista, cada elemento es un carácter. Por lo tanto, las cadenas también se pueden dividir, pero el resultado sigue siendo una cadena:
'ABCDEFG'[:3]\ 'ABC'
objeto
Python es programación orientada a objetos, como una luz LED
from pyb import LED
red_led = LED(1)
red_led.on()
LED es una clase y red_led es un objeto. Puede operar en este objeto, como encenderlo on, apagado off, comprobar value.