Conocimientos previos de Python

Apéndice 1 del tutorial en vídeo - sintaxis de Python: https://singtown.com/learn/50061/

Ventajas de usar Python

OpenMV puede usar Python para el desarrollo secundario. Hay varias ventajas:

  • Fácil de empezar
  • No es necesario preocuparse por la solicitud 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 PC)
  • El equipo de desarrollo ha creado varios algoritmos y módulos para que OpenMV los invoque

Python es un lenguaje muy utilizado, ampliamente empleado en el procesamiento de imágenes, el aprendizaje automático y la programación de redes. Además, Python es un lenguaje muy fácil de usar. Si tiene experiencia de programación en otros lenguajes (como C, C++, Java), le resultará más fácil empezar.

REPL y puerto serie

El IDE de OpenMV incluye un asistente de puerto serie para conectarse a OpenMV, y también puede conectarse a otros puertos serie, como Arduino, pyboard, esp8266.

Primero, desconecte OpenMV del IDE; de lo contrario, ¡el puerto serie entrará en conflicto!

Abra Tools → Open Terminal → New Terminal en OpenMV

Escriba en el terminal

print("hello OpenMV!")

Se mostrará

hello OpenMV!

Sintaxis de Python

Salida

Use print() para agregar una cadena entre paréntesis y así mostrar el texto indicado en pantalla. Por ejemplo, para mostrar 'hello, world', el código es el siguiente:

   print('hello, world')
hello, world

La función print() también puede aceptar varias cadenas, separadas por comas "," y luego se pueden conectar en una sola cadena de salida:

  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, y se generará un espacio al encontrar una coma ",", de modo que la cadena de salida se ensambla 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 forma más elegante:

   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, pero '100 + 200 =' es una cadena y no una fórmula matemática, y Python la trata como tal.

Variables

En Python, el signo igual = es una instrucción de asignación, que puede asignar cualquier tipo de dato a una variable. La misma variable se puede asignar repetidamente, y puede ser una variable de tipos distintos, por ejemplo:

  a = 123 # a es un entero
  print(a)
  a = 'ABC' # a se convierte en una cadena
  print(a)

A este lenguaje en el que el tipo de la variable en sí no es fijo se le llama lenguaje dinámico, y su contraparte es un lenguaje estático. Los lenguajes estáticos deben especificar el tipo de la variable al definirla. Si el tipo no coincide al asignar, se generará un error. Por ejemplo, Java es un lenguaje estático, y la instrucción de asignación es la siguiente (// indica un comentario):

  int a = 123; // a es una variable de tipo entero
  a = "ABC"; // Error: no se puede asignar una cadena a una variable de tipo entero

En comparación con los lenguajes estáticos, los lenguajes dinámicos son más flexibles, y por eso son así.

Lista

Uno de los tipos de datos incorporados de Python es la lista: list. Una lista es una colección ordenada en la que se pueden agregar y eliminar elementos en cualquier momento.\ Por ejemplo, para listar los nombres de todos los compañeros de la clase, se puede usar una lista para representarlo:

 classmates = ['Michael', 'Bob', 'Tracy']
 classmates
['Michael', 'Bob', 'Tracy']

La variable classmates es una lista. Use la función len() para obtener el número de elementos de la lista:

  len(classmates)
3

Use el índice para acceder al elemento en cada posición de la lista. Recuerde que el índice comienza en 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 está fuera de rango, Python generará un error IndexError, así que asegúrese de que el índice no sobrepase el límite. 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 directamente el último elemento:

  classmates[-1]
'Tracy'

Por analogía, puede obtener el penúltimo y el antepenú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 elemento contando desde el final está fuera de rango.

Una 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 1:

  classmates.insert(1, 'Jack')
  classmates
  ['Michael', 'Jack', 'Bob', 'Tracy', 'Adam']

Para eliminar un elemento al final de una lista, use el método pop():

  classmates.pop()
  'Adam'
  classmates
  ['Michael', 'Jack', 'Bob', 'Tracy']

Para reemplazar un elemento por otro, puede asignar directamente el valor a la posición de índice correspondiente:

   classmates[1] = 'Sarah'
 classmates
  ['Michael', 'Sarah', 'Tracy']

Los tipos de datos de los elementos de una lista también pueden ser diferentes, por ejemplo:

   L = ['Apple', 123, True]

Si una lista no tiene elementos, es una lista vacía con longitud 0:

 L = []

 len(L)

 0

Tupla

Otra lista ordenada se llama tupla. Las tuplas son muy similares a las listas, pero una vez que se inicializa una tupla, no se puede modificar. Por ejemplo, también lista los nombres de los compañeros de clase:

  classmates = ('Michael', 'Bob', 'Tracy')

Ahora, la tupla classmates no se puede cambiar, y no tiene métodos como append() e insert(). Los demás métodos para obtener elementos son iguales a los de las listas. Puede usar classmates[0] y classmates[-1] normalmente, pero no puede asignarlos a otros elementos.

¿Cuál es la utilidad de las tuplas inmutables? Debido a que las tuplas son inmutables, el código es más seguro. Si es posible, use tuplas en lugar de listas.

Trampa de las tuplas: cuando defina una tupla, los elementos de la tupla deben determinarse en el momento de la definición, por ejemplo:

  t = (1, 2)

  t

  (1, 2)

Sin embargo, para definir una tupla con un solo elemento, si la define así:

   t = (1)

   t

   1

La definición no es una tupla; t es una variable entera, ¡y el valor de la variable t es 1! Esto se debe a que los paréntesis () pueden representar tanto tuplas como paréntesis en fórmulas matemáticas, lo que crea ambigüedad. Por lo tanto, Python estipula que, en este caso, el cálculo se realiza según los paréntesis, y el resultado del cálculo es naturalmente 1.

Por lo tanto, se debe agregar una coma , al definir una tupla con un solo elemento para eliminar la ambigüedad:

   t = (1,)

   t

  (1,)

Python también agrega una coma , al mostrar una tupla con un solo elemento, para que no se malinterprete como un paréntesis en el sentido de un cálculo matemático.

Juicio condicional

La forma completa de la instrucció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')

Bucle

Python tiene dos tipos de bucles. Uno es el bucle for...in, que recorre cada elemento de la lista o tupla por turno. Vea el ejemplo:

names = ['Michael', 'Bob', 'Tracy']
for name in names:
    print(name)

Al ejecutar este código se imprimirá cada elemento de names por turno:

  Michael
  Bob
  Tracy

Por lo tanto, el bucle for x in ... sustituye cada elemento en la variable x, y luego ejecuta las instrucciones del bloque indentado.

Si desea calcular la suma de los números enteros del 1 al 100, escribirlos del 1 al 100 uno por uno es un poco difícil. Afortunadamente, Python proporciona una función range() que puede generar una secuencia de números enteros, la cual se puede convertir en una lista mediante la función list(). Por ejemplo, range(5) genera una secuencia de enteros menores que 5 a partir de 0:

  list(range(5))

  [0, 1, 2, 3, 4]

range(101) puede generar una secuencia de enteros del 0 al 100, y el cálculo es el siguiente:

sum = 0
for x in range(101):
    sum = sum + x
print(sum)

El segundo bucle es el bucle while. Por ejemplo, si queremos calcular la suma de todos los números impares dentro de 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 tipos de datos =====

Las funciones comunes incorporadas de Python también incluyen funciones de conversión de tipos de datos, como la función int(), que puede convertir otros tipos de datos en 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

===== Función =====

En Python, para definir una función, es necesario usar la instrucción def y escribir en orden el nombre de la función, los paréntesis, los parámetros dentro de los paréntesis y dos puntos; luego escribir el cuerpo de la función en el bloque indentado, y devolver el resultado con la instrucción return.

Primero escribamos una función para calcular 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 power, debemos pasar uno y solo un parámetro x:

power(5)\ 25\ power(15)\ 225

Ahora, ¿qué pasa si queremos calcular x3? Podemos definir otra función power3, pero ¿qué pasa si queremos calcular x4, x5, etc.? No podemos definir un número infinito de funciones.

Puede que haya pensado que podemos modificar power(x) a power(x, n) para calcular xn, y hacerlo de inmediato:

def power(x, n):
    s = 1
    while n > 0:
        n = n - 1
        s = s * x
    return s

Con esta función power(x, n) modificada, podemos calcular cualquier potencia de n:

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 según el orden de posición.

Rebanado (slicing)

Tomar parte de una lista o tupla es una operación muy común. Por ejemplo, se tiene la siguiente lista:

L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']

Tome los primeros 3 elementos y rebánelos con una línea de código:

L[0:3]\ ['Michael', 'Sarah', 'Tracy']

L[0:3] significa comenzar desde el índice 0 y terminar en el índice 3, sin incluir el índice 3. Es decir, los índices 0, 1 y 2 son exactamente 3 elementos.

Si el primer índice es 0, se puede omitir:

L[:3]\ ['Michael', 'Sarah', 'Tracy']

También puede comenzar desde el índice 1 y tomar 2 elementos:

L[1:3]\ ['Sarah', 'Tracy']

La tupla también es un tipo de lista; la única diferencia es que la tupla es inmutable. Por lo tanto, las tuplas también se pueden operar con rebanadas, 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 se puede considerar como una lista, y cada elemento es un carácter. Por lo tanto, las cadenas también se pueden operar con rebanadas, pero el resultado de la operación sigue siendo una cadena:

'ABCDEFG'[:3]\ 'ABC'

Objeto

Python es programación orientada a objetos, como por ejemplo un LED

from pyb import LED

red_led = LED(1)
red_led.on()

LED es una clase, red_led es un objeto, y este objeto se puede manipular, como encenderlo, apagarlo y consultar su valor.

Módulo

Uso de módulos

results matching ""

    No results matching ""