tipados tipado qué programación por lenguajes lenguaje fuertemente fuerte estatico entre débilmente dinamico diferencia python static-typing

python - qué - lenguajes fuertemente y débilmente tipados



Herramientas para comprobación de tipos estáticos en Python (7)

Existe el paquete ''gradual'' para Python 3; ver PIP o el informe de Bitbucket

Aparentemente esta es una implementación del grupo alrededor de Jeremy Siek, quien parece ser una gran autoridad en el campo de la tipaje gradual.

Algunas anotaciones son aparentemente necesarias, aquí hay un ejemplo:

from gradual import * @typed def calculate_total(a:int, b:int) -> int: return a + b//100

En cuanto a las anotaciones, esto no es tan malo. No he usado el paquete, por lo que no puedo hablar de su calidad, pero la sintaxis (y las personas que lo respaldan) ciertamente lo hacen parecer prometedor.

Estoy trabajando con una gran base de código de Python existente y me gustaría comenzar a agregar anotaciones de tipo para poder obtener un cierto nivel de comprobación estática. Strongtalk algo como Erlang , Strongtalk o Typed Scheme / Racket .

He visto decoradores rápidos y sucios que insertan comprobaciones dinámicas basadas en parámetros de funciones y anotaciones de tipo de retorno, pero estoy buscando algo más sólido y que realice comprobaciones en tiempo de compilación.

¿Qué herramientas están disponibles ahora para este tipo de cosas? Estoy familiarizado con los compiladores y el control de tipos, y definitivamente estoy dispuesto a mejorar una herramienta incompleta si tiene una buena base.

(Nota: no estoy interesado en una discusión sobre los pros / contras del tipado estático).

EDITAR : Un ejemplo:

def put(d, k, v): d[k] = v

Me gustaría poder anotar la función put como que tiene type put<K,V>(dict<K,V>, K, V) -> None .

ACTUALIZACIÓN : El nuevo PEP 484 (septiembre de 2014) define un estándar para el tipado estático y escribe anotaciones en Python 3.5+. Hay una herramienta de verificación de mypy llamada mypy que es compatible con PEP 484.


Me gusta prospector , backend de landscape.io . Combina la salida de los analizadores existentes, como pylint, pyflakes, pep8, frosted ..., en un solo informe. Ordenado.


Mira esta publicación: PySonar . PySonar es una herramienta que infiere tipos utilizando interpretación abstracta (parcialmente en ejecución) de código. Encuentra todas las rutas de ejecución posibles de su programa y encuentra todos los tipos posibles de todas las variables.

Básicamente hay tres versiones de PySonar:

  • Java de fuente abierta (indexador Jython)
  • Java de fuente cerrada (oculto en Google)
  • Python de código abierto ( mini-pysonar )

Ninguno de ellos (excepto el de fuente cerrada) está completamente implementado. Pero la idea básica es que puedes usarla como base para tu trabajo.


No sé si esto ayuda, pero lo que vale, Jeremy Siek en U of Colorado hizo algo de trabajo en mecanografía gradual, y encontré esto haciendo una búsqueda rápida. http://www.wiki.jvmlangsummit.com/pdf/28_Siek_gradual.pdf

Mi suposición (podría estar equivocado) es que no hay ninguna herramienta prometedora de código abierto que pueda encontrar en este momento, ya que su investigación parece relativamente nueva.

Su mejor opción podría ser ponerse en contacto con los autores y preguntarles si pueden divulgarle su código.



Tuve una necesidad similar hace algún tiempo. Todas las soluciones existentes que he encontrado tienen algún problema o no tienen una característica que me gustaría tener, así que he hecho las mías.

Así es como lo usa:

from requiretype import require @require(name=str, age=(int, float, long)) def greet_person(name, age): print "Hello {0} ({1})".format(name, age) >>> greet_person("John", 42) Hello John (42) >>> greet_person("John", "Doe") # [...traceback...] TypeError: Doe is not a valid type. Valid types: <type ''int''>, <type ''float''>, <type ''long''> >>> greet_person(42, 43) # [...traceback...] TypeError: 42 is not a <type ''str''> type

Espero que esto sea útil para ti.

Para más detalles mira:

PD: (citando a mí mismo de github repo)

En la mayoría de los casos, recomendaría usar pruebas en lugar de verificar tipos, ya que es más natural hacerlo en Python. Pero, hay algunos casos en los que desea / necesita especificar un tipo específico para usar y dado que python no tiene verificaciones de tipo para los parámetros aquí es donde esto es útil.


Editar 11-11-2011: usa mypy . Las sugerencias de tipo se pueden agregar gradualmente. En el código fuente de Python 3, verifica las sugerencias de tipo estándar del PEP 484 . Los tipos aún se pueden expresar en Python 2 usando comentarios especiales. A Guido le gusta .

Esta publicación fue escrita originalmente hace mucho tiempo antes de que mypy fuera una cosa. A continuación, he conservado el contenido original de la publicación, aunque no sea del todo exacto.

Publicación original:

Es posible que desee verificar algunos de los proyectos mencionados en esta publicación relacionada de en análisis estático para Python .

En resumen:

Dado que Python usa el tipado de pato extensivamente, las cosas que podrían llamarse "errores de tipo" en otros idiomas podrían terminar siendo "el objeto X no admite el método Y " en Python.

Editar 2011-05-17:

Estoy de acuerdo con delnan que la tipificación estática no es posible para Python [aparentemente incorrecto] . Pero dado que nuestro escepticismo no parece disuadirlo, solo puedo brindarle más información sobre el tema. Estoy presente:

  • Una discusión sobre la inferencia de tipo para Python . (Otros enlaces son de aquí).
  • Artículos de Guido van van Rossum sobre cómo agregar tipado estático opcional: parte 1 y parte 2 .
  • RPython , un subconjunto de Python que podría tener la posibilidad de ser analizado de forma estática lo suficiente como para hacer algún tipo de comprobación de tipo.