¿Existe algún defecto de diseño en el lenguaje Python?
La forma de lidiar con los síntomas es usar JetBrains PyCharm, que tiene derivación de tipo (tenga en cuenta la anotación de tipo).
La solución básica es cambiar a un lenguaje fuertemente tipado y de tipo estático. Por ejemplo, ahora soy adicto al lenguaje Rust.
Además, Python está considerando introducir la verificación de tipos (mypy) [python-ideas] Propuesta: utilizar la sintaxis mypy para anotaciones de funciones. Python 3 admite de forma nativa anotaciones de tipo.
def func(Foo:Foo)-& gt;Bar:
Bar
Los caracteres chinos confusos son culpa tuya, no comentes.
====
Respuesta de @Vani (¿Python tiene fallas de diseño? -Respuesta de Vani)
Explicación de 1. len: [python-3000] Métodos especiales y un sistema de tipos basado en interfaz.
Primero, elegí len(x) en lugar de x len() por razones de HCI (def
__len__() vino después). En realidad, hay dos razones entrelazadas:
Dos HCI:
(a) Para algunos operadores, los prefijos son más fáciles de leer que los sufijos: el prefijo (y el infijo) tienen una larga historia en matemáticas. , y sus efectos visuales pueden ayudar a los matemáticos a pensar en algunos problemas. Simplemente podemos reescribir x*(a+b) en x*a+x*b, pero la forma OO de hacer lo mismo es torpe.
(2)
Cuando leo len(x), sé que su longitud es x y el código me dice dos cosas: el valor de retorno es un número entero y el argumento es una especie de contenedor. Cuando leo x.len()
Solo sé que X es un contenedor, implementa una excusa o hereda un método usando len(). Hemos sido testigos de tal confusión, una clase tiene get() sin mapeo.
O las claves() o algunos archivos que no son archivos tienen el método write().
Para decir lo mismo de otra manera, creo que "len" es una operación incorporada. No quiero perderlo. Tenga en cuenta que len siempre llama a foo. __len__(), esto es obviamente un diseño intencional, no un error involuntario. No sólo un lenguaje escrito hace 3 semanas puede llamarse OO.
2. Correcto, los movimientos se tratan como eliminaciones, Python 3 no ha cambiado esto.
3. El cierre también es una restricción intencional. Python tiene muchas restricciones en la programación funcional. Diferentes personas tienen diferentes opiniones.
Esto es un peligro para los novatos. Todos los tutoriales le recordarán que no utilice valores de variables como valores predeterminados. Si hay una mejor manera de manejar esto, indíquelo.
Los defectos de diseño son diferentes a las decisiones de diseño. El primero es un defecto (pozo) causado por no considerar el diseño, y el segundo es el resultado de compensaciones en el diseño.
Los nombres inconsistentes, la clasificación Sur(), etc. son todos los primeros, y realmente deberían ser negros.
También existen len() de Python, optimización de recursividad sin cola, restricciones de cierre, números de coma flotante divididos por enteros, etc. Es todo lo último. El diseño de un lenguaje no puede ser fácil para todos, por lo que no estoy satisfecho con muchos aspectos de Python.