Red de conocimiento informático - Problemas con los teléfonos móviles - ¿Cuáles son las habilidades avanzadas en el desarrollo de Python?

¿Cuáles son las habilidades avanzadas en el desarrollo de Python?

He enumerado algunas, no sé si son técnicas avanzadas, pero personalmente las encuentro muy útiles.

1. Haga un buen uso de los iteradores

Los iteradores están disponibles en muchos idiomas, y usarlos en escenarios apropiados en Python será muy "genial". En primer lugar, debido a que el iterador genera un objeto cada vez, su uso adecuado puede ahorrar memoria de manera efectiva; en segundo lugar, puede lograr algún efecto de "cálculo retrasado". Además, debido a la existencia de Generator (palabra clave de rendimiento) y Generator Expression, a veces el uso de iteradores puede mejorar la legibilidad del código.

Por ejemplo, itertools.islice((calculate_for_value(v) para v en valores), 0, 12) solo se puede calcular en el rango

[0, 12), y se retrasa Calculado, es decir, se calcula solo después de iterar hasta ese objeto. Otro ejemplo es any(i % 3 == 0 for i in

números), que puede encontrar el primer valor en números que sea divisible por 3, porque es un Generador

Expresión (un tipo de iterador), por lo que cualquier función regresará inmediatamente después de encontrarla y no es necesario calcular i % 3 para toda la lista de números.

Por cierto, recomiendo esta biblioteca erikrose/more-itertools, que contiene muchas funciones prácticas de iterador y es un muy buen complemento a la biblioteca estándar itertools.

2. Hacer buen uso de los descriptores (Descriptor)

El descriptor de Python es una abstracción de "atributos". Una vez que un descriptor se define como un atributo de clase, puede controlar instancias de este. class. Los comportamientos de obtención, configuración y eliminación de atributos de instancia con el mismo nombre son más detallados que los métodos mágicos a nivel de instancia como __getattr__, y son más fáciles de reutilizar. Este documento tiene una descripción simple de la Guía práctica del descriptor. Se puede ver que los "métodos de instancia" de Python y @property están implementados por él, y también se utilizan algunas bibliotecas de terceros (como la columna de SQLAlchemy, el campo de WTForms e incluso el. nuevo enum.Enum agregado en el tipo Python 3.4).

Al utilizar la función de descriptor, puede implementar algunas personalizaciones muy convenientes en el código comercial. Por ejemplo, puede implementar una propiedad cached que puede almacenar en caché el valor de retorno usted mismo (también puede usar la de Werkzeug directamente sin implementarla usted mismo). ).

3. Intenta no usar la capacidad de reflexión para luchar con el lenguaje

Mi opinión personal: cuando uses un lenguaje de programación, debes hacer como lo hacen los romanos, y no demasiado. mucho en la lucha con el lenguaje bueno. Porque es difícil hacer un círculo si una rueda se construye a puerta cerrada, sin mencionar que en realidad se sobreestima la capacidad de uno para lidiar con el diseño del lenguaje desde el nivel de los usuarios del lenguaje.

La pregunta se refiere a "técnicas avanzadas", por lo que para un lenguaje dinámico, la reflexión ciertamente se considera una técnica avanzada. Pero he visto a algunas personas usar la reflexión de Python para escanear todos los archivos .py en algunos paquetes y luego importar automáticamente todos los módulos del paquete. Sin mencionar que este enfoque destruye el "módulo es un espacio de nombres" de Python y la configuración de importación diferida, hay muchos problemas solo en términos de "corrección". Este enfoque solo tiene en cuenta el escenario en el sistema de archivos del módulo, pero no considera la posibilidad de que el módulo esté en un zip. Incluso si se mejora aún más la implementación y se considera la importación zip, Python y el uso de Import Hook definido por PEP 302 quedarán completamente inutilizables para dicho hack. Es difícil lograr este tipo de enfoque de lucha con el lenguaje verdaderamente "correcto".

Así que creo que otro consejo de Python es considerar usarlo con cuidado cuando quieras utilizar "técnicas avanzadas". Cálmate y piensa si estás luchando con el lenguaje. Si es así, se recomienda parar. O haz lo que hacen los romanos o considera seriamente si realmente hay algo que valga la pena mejorar en Python. Esto último requiere mucha reflexión, no sólo 10 minutos de reflexión. Si la respuesta a esto último es realmente "sí", creo que lo correcto es escribir un PEP y discutirlo con la comunidad para ver si las mejoras se pueden aplicar directamente a futuras versiones de Python en lugar de usarlo en su propio código. Lo que parece un truco avanzado es en realidad un feo truco implementado contra el lenguaje mismo.

------------------------------------------- ----- ------------------------------------

Algunos otros Técnicas específicas de Python, como decorador, administrador de contexto, etc., debido a que los desarrolladores de Python de todos los ámbitos de la vida están básicamente familiarizados con ellas, no las he enumerado aquí.

------------------------------------------- ----- ----------------------------------