Python es dinámico. La creación de una clase es una declaración ejecutable , como lo es la importación de un módulo; Se puede hacer condicional. Una clase puede ser alterada después de la creación; Esto permite una fácil metaprogramación y AOP.
No hay interfaces reglas de escritura de pato. Si los necesita desesperadamente, hay 'clases base abstractas (ABC)', pero generalmente no se pierden las interfaces, ya que de todos modos no hay verificación de tipo estático.
Aunque todo es un objeto, las funciones vienen antes que los objetos. Tener solo funciones (y sin clases) en un módulo está perfectamente bien.
Todo es una entidad de primera clase. Pasar funciones como parámetros, devolverlas y asignarlas a variables es la norma. Lo mismo para las clases. Los métodos son solo funciones; puede manejar un método de instancia como si fuera una función regular, pasarlo, etc.
Use dictados, conjuntos, listas y tuplas incorporados. Las listas y los dictados son mutables, las tuplas no. Todos ellos son muy eficientes y sintácticamente sucintos. Acostúmbrate a devolver varios valores de una función usando una tupla (ni siquiera necesitas paréntesis). Acostúmbrese a reemplazar jerarquías complejas de objetos muy simples con artilugios hechos de listas simples, tuplas y dictos ('tablas hash'), simplifica la vida.
Python tiene bastante soporte de FP; aprender listas de comprensión y luego iteradores y generadores. Estos ayudan mucho.
Cualquier operador puede sobrecargarse definiendo los métodos adecuados, por lo que la suma o la comparación pueden devolver lo que desee. Recuerda esto trabajando con cosas como SQLAlchemy.
No hay nulo, solo Ninguno, un objeto de pleno derecho. Puede imprimir Ninguno bien, etc. Pasar Ninguno donde se espera otra instancia generalmente da como resultado un AttributeError, no un NPE, a veces más abajo en la tubería de ejecución.
Debido a la naturaleza completamente dinámica de Python, casi no tiene controles estáticos . Puede hacer referencia a un nombre que nunca existe en su programa (por ejemplo, un error tipográfico), o que solo se define en una ruta de ejecución particular, y nada lo recordará hasta que la ejecución realmente llegue a esta referencia y se genere un NameError. Tenga cuidado con el alcance de sus variables y escriba más pruebas unitarias.
Debido a la naturaleza completamente dinámica de Python, los objetos son casi siempre maleables. Por lo general, puede agregar campos y métodos incluso a una instancia y, por lo tanto, eliminar o sobrescribir inadvertidamente su estado o conjunto de métodos. Tenga cuidado al asignar atributos. Esto también permite posibilidades interesantes :)
No hay constantes simbólicas , solo variables. Compruebe que no sobrescribe accidentalmente una 'constante'. Si desea estar seguro de que no puede sobrescribir una constante, use una función o una propiedad (que es una función disfrazada).
Los hilos de Python son buenos para el procesamiento vinculado a E / S, pero no para la CPU. No intente acelerar una tarea computacional ejecutándola en hilos paralelos.