¿Para qué tipo de aplicaciones es Python una mala elección? [cerrado]

21

Acabo de comenzar a aprender Python, y me gustaría obtener más contexto sobre el lenguaje.

Me doy cuenta de que, en muchos casos, Python es un lenguaje lento en relación con C o C ++. Por lo tanto, Python probablemente no sea la mejor opción para aplicaciones que necesitan ejecutarse lo más rápido posible.

Fuera de esto, parece que Python es un gran lenguaje de propósito general que es fácil de leer y escribir. Las bibliotecas disponibles le dan una gran cantidad de funcionalidad. Fuera de las aplicaciones críticas de rendimiento, ¿dónde es una mala elección usar Python (y por qué)?

Casey Patton
fuente
8
No existe un gran lenguaje de propósito general. Cada cinco años más o menos, uno nuevo reemplaza al antiguo que sobrevive solo en nichos de mercado. Lisp, Fortran, Pascal, Basic, Ada, Perl ...
mouviciel
3
@mouviciel: ¿Pascal es un lenguaje de nicho? Ok, su nombre fue cambiado a Delphi para que coincida con el IDE de Borland / CodeGear / Embarcadero, pero Delphi sigue siendo (basado en) Pascal y, aunque ha perdido cuota de mercado, no lo llamaría exactamente un idioma de nicho. Y tampoco Basic para el caso. Visual Basic sigue siendo básico. Tanto Delphi como Visual Basic se utilizan en muchas empresas ...
Marjan Venema
77
"Python es un lenguaje lento en relación con C o C ++". Debe respaldar esto con el punto de referencia específico que utilizó. En algunos casos (programas vinculados de E / S que hacen muchas llamadas al sistema) Python es tan rápido como C porque es solo un contenedor alrededor de la biblioteca de C.
S.Lott
@ S.Lott True, y PyPy a veces puede rivalizar con la JVM o incluso C / C ++
yati sagade
Pascal solía ser el idioma de enseñanza preferido cuando estaba en la universidad. Luego pasaron unas décadas y ahora le parece a su Java. Codifico varios idiomas profesionalmente (media docena más o menos), pero sigo codificando Delphi por diversión.
Mawg

Respuestas:

22

Software dirigido a objetivos integrados con sus recursos limitados. La mayoría de los procesadores en este planeta no pueden ejecutar Python debido a recursos insuficientes, o nadie ha portado una versión a esa arquitectura. La mayoría de los procesadores, incluso ahora, vienen con menos de un megabyte de memoria.

uɐɪ
fuente
... eso es hasta que alguien hace un puerto Python de Arduino. ¡Oh espera!
Spoike
55
@Spoike ese enlace es para ejecutar Python en la computadora y solo comunicarse en serie con Arduino. Arduino no se está ejecutando el código Python
Basarat
1
@BasaratAli: Descargo de responsabilidad: escribí mi comentario en broma. ;-)
Spoike
14

Los dos lugares que me vienen a la mente son cosas que requieren mucha concurrencia, para lo cual usaría Erlang. O cálculo numérico de alta resistencia, que probablemente trataría de usar Fortran.

Zachary K
fuente
1
Fortran es todavía por delante de C / C ++ en el cálculo numérico ...?
Sardathrion - Restablecer Mónica
1
Sabes que no lo se. No es un área que tenga mucha experiencia. Pero sí sé que la gente de Fortran ha pasado más de 30 años haciendo que sus herramientas funcionen realmente rápido.
Zachary K
@Sardathrion: es difícil de decir. Es natural, lo entiendes. Pero, hace unos meses, el Sr. Lionel, de la fama de Intel Fortran, declaró que su línea fortran supera en ventas a cualquier otro producto en su línea de desarrollo (que no es tan estrecho).
Torre el
@Idigas: De hecho, sé que Fortran se usa ampliamente, pero eso podría deberse al código heredado y no a las restricciones de optimización. Tal vez debería hacer eso como una pregunta ...
Sardathrion - Restablecer a Monica el
También recuerde que mucha de la gente que hace cómputo numérico conoce a Fortran realmente bien y es su herramienta de elección. Entonces, cuando tengan que hacer ese tipo de tarea, alcanzarán a Fortran.
Zachary K
8

Dado que Python es un lenguaje de tipo dinámico, sin verificación de tiempo de compilación, será difícil refactorizar un gran proyecto de Python que no tenga pruebas unitarias extensas.

Entonces, si tiene un proyecto grande que necesita mantenimiento y modificación durante mucho tiempo, y su equipo no está comprometido a crear pruebas automatizadas para todo, entonces es mejor que use Java o C #.

Eric Wilson
fuente
17
Refactorizar cualquier proyecto grande sin pruebas unitarias es muy difícil.
Sardathrion - Restablece a Monica el
99
Es cierto, pero mucho más difícil sin tipo de seguridad.
Eric Wilson el
3
@Eric Wilson - Incluso entonces, escribir con precisión puede darte una falsa sensación de seguridad ... ¡Compila, envía!
Mark Booth el
2
Esto podría no ser 100% en el tema de la pregunta, pero sigue siendo un punto válido. Falta el soporte de herramientas, especialmente la refactorización para lenguajes de tipo dinámico en comparación con lenguajes como Java o C #. Solo renombrar cosas puede ser un ejercicio exhaustivo en grandes proyectos de Python.
OliverS
¿Python requiere un tiempo de ejecución o VM por separado, o puede generar un solo ejecutable autónomo?
Jim In Texas
2

Si el enfoque principal es el desarrollo de la GUI de Windows, entonces recomendaría contra CPython ya que hay una escasez de buenos diseñadores de formularios (en comparación con el uso de .Net).

Sin embargo, IronPython se ejecuta en .Net y hay dos IDE con diseñadores de formularios para elegir: Visual Studio y SharpDevelop. De hecho, las herramientas de Python para Visual Studio se pueden usar para CPython y IronPython, que es bastante bueno, aunque todavía no lo he probado ...

Andy tiene
fuente
2

Esto realmente depende de lo que quiere decir con "mala elección".

Si te refieres a aplicaciones en las que usar Python es muy difícil, entonces hay relativamente pocas: la principal que viene a la mente y que aún no se ha mencionado es el código que requiere altos niveles de corrección donde los idiomas con sistemas de tipos sofisticados (Haskell, lenguajes de tipo dependiente) ) son mejores opciones.

Si te refieres a aplicaciones donde Python es subóptimo (es decir, hay mejores opciones), entonces hay más pero también son más subjetivas. Por ejemplo, en mi experiencia ciertamente limitada, trabajar en compiladores e intérpretes es mucho más fácil con tipos de datos algebraicos, coincidencia de patrones y más funciones funcionales que Python. Sin embargo, enumerar exhaustivamente aplicaciones como esta es imposible ya que varían según la persona.

Tikhon Jelvis
fuente
2

Es ideal para crear secuencias de comandos rápidamente debido a su capacidad expresiva y su amplia variedad de bibliotecas de soporte.

La verificación dinámica de tipos y la falta de declaración explícita de variables lo convierten en una mala elección para proyectos grandes que involucran cientos de miles, o incluso millones de líneas de código. Lo mismo ocurre con los sistemas de misión crítica o de seguridad. En un sistema de aviónica, por ejemplo, sería completamente inaceptable que un sistema fallara debido a un error que podría haberse detectado en el momento de la compilación.

Mike Collins
fuente
0

Bueno, al igual que tú, también estoy empezando con Python. Pero para mí en el contexto del aprendizaje automático y la ciencia de datos.

También acabo de adquirir todo el conocimiento nuevo en Java 8 y sus nuevas bibliotecas orientadas a la transmisión.

Realmente me encantó la sensación fluida de las nuevas bibliotecas de secuencias de Java 8, y lo cerca que me sentí que debía a las bibliotecas de chispas de Apache. Cuando entré en Python, esperaba lo mismo y más.

Vi más Pero mucho menos. Mala documentación, aunque había mucha; sin fluidez, y de hecho me quedé adivinando si un método reinaba un nuevo objeto, o si funciona con esto; nada cerca de un mapa / reducir, etc. Me sorprendió que me dejaran decepcionado.

Sin embargo, desde el principio, no tenía grandes expectativas de lo fácil que sería aprender a aprender un idioma. Se descubrió que tenía razón: inconsistente, poco intuitivo, difícil de aprender. Pero esa fue solo mi experiencia de ser bastante bueno en todo lo que le gusta a Java.

Yoyó
fuente