Me estoy mudando de C # a Python, ¿cuáles son las principales diferencias?

Al igual que tú, me mudé de C # a Python. El cambio no es muy difícil, dado que Python se enfoca mucho en asegurarse de que el código sea lo más accesible posible. El cambio más grande para mí fue pasar de Windows a Linux. Linux tiene una gran carga terminal, mientras que el desarrollo de Windows tiene mucha IU.
Sin embargo, la buena noticia es que las personas que comienzan a programar desde cero tienen mucho éxito con Python. Esto significa que los programadores experimentados pueden recogerlo con bastante facilidad.

Aquí hay una lista de diferencias que he encontrado:

  • Tuplas, diccionarios, matrices, conjuntos : Python se centra mucho en utilizar la estructura más útil de inmediato. Como resultado, tiene un fuerte énfasis en el azúcar sintáctico alrededor de las estructuras de datos de uso común. Veo tuplas y diccionarios en casi todas partes. En C # también tenemos estos, pero no tenemos la sintaxis breve para ellos como lo hace Python, por lo que no se usan con tanta frecuencia. Python hace un muy buen trabajo al hacer que estas estructuras sean muy fáciles de usar.
  • Sin decoraciones de tipo explícitas : la última versión de Python tiene lo que llaman sugerencias de tipo. Sin embargo, es probable que use una de las versiones más vainillas de Python. 2.7 y 3.3 siguen siendo versiones muy populares. Lo que notará es que Python no tiene una escritura explícita. En cualquier sitio. No hay forma de definir el tipo de una variable que no sea asignarle un valor (las variables son el tipo del valor que se les asigna). Esto no significa que Python no tenga un sistema de tipos; Mucho de esto está simplemente escondido debajo del capó.
  • El alcance comienza en el nivel del módulo : en C #, tiene espacios de nombres, clases, métodos. Estos son los bloques que definen el alcance y existen limitaciones en cada uno. Python, por otro lado, le permite definir la lógica donde la necesite. Puede anidar clases, definir clases dentro de funciones, definir funciones dentro de funciones, etc. Existen limitaciones en algunos casos, como las clases, pero son mucho menos estrictas. Comienza en el nivel del módulo, lo que significa que el código se ejecuta en la importación del módulo si no está encapsulado en nada.
  • Gran énfasis en las comprensiones de listas y dictados : Python pone gran énfasis en el azúcar sintáctico para simplificar las operaciones de listas y diccionarios. Reconocerá esto como similar a LINQ. Si bien no estoy totalmente de acuerdo con que sea tan robusto como LINQ (aquí hay un punto de vista opuesto), le recomiendo que lo use siempre que trabaje con listas y diccionarios (a menos que la lógica no se pueda hacer con la comprensión de listas / dict) .
  • Los archivos Py pueden ejecutarse individualmente : dado que el código puede ejecutarse en el nivel del módulo, puede ejecutar cualquier archivo Python individualmente. Es común ver a un guardia principal al final del archivo. Python técnicamente no tiene una función “principal”. En cambio, tienen un guardia principal, y se puede definir en cualquier archivo.
  • La encapsulación es realmente pública : le recomiendo que recoja una copia de Effective Python de Brett Slatkin. En el libro, Brett señala que Python en realidad no tiene miembros de clase privada. Incluso con guiones bajos dobles, el intérprete simplemente cambia el nombre del campo de una manera inteligente para “ocultarlo”. Esto significa que puede diseñar al revés la denominación para “no ser privado” de algo. Este patrón de “nada debe ser privado” se enfatiza mucho en Python. Si bien el truco del doble bajo puntaje no es completamente infrecuente, no se recomienda. Cuando trabaje con Python, suponga que nada es privado , así que diseñe en torno a todo lo que sea público.
  • Los decoradores son extremadamente potentes : las personas detrás de Python aprovecharon al máximo la naturaleza de tipo dinámico del lenguaje. Este tipo de naturaleza hace que sea muy fácil ajustar e intercambiar una función, clase o método durante el tiempo de ejecución. Los decoradores son muy potentes y, como resultado, existen tanto para clases como para funciones. Funcionan realmente bien para limpiar el código repetitivo, es una forma muy compacta y limpia.
  • Python está fracturado en 2.xy 3.x : la división ocurrió originalmente porque Python 2.x no tenía suficiente soporte para Unicode. Definitivamente puedes hacer unicode en 2.x, pero no es sencillo. Como resultado, nació 3.x y también abordó algunos de los problemas de idioma en 2.x. Desde entonces, la comunidad ha sido muy lenta para actualizar a 3.x. Las dos versiones no son totalmente compatibles, aunque si se adhiere a una sintaxis común y usa las seis bibliotecas, puede ser compatible con ambas versiones. Espere ver proyectos importantes que admitan 2.7 + 3.xo simplemente 2.7.

¡Espero que esto ayude!

C # se escribe estáticamente; Python se escribe dinámicamente. Podría decirse que esto hace que C # sea más adecuado para escribir software mantenible a gran escala.

C # se centra principalmente en Windows, aunque cosas como Xamarin y Unity le están dando un mayor alcance; Python está ampliamente disponible en todas partes.

C # tiene una sintaxis tipo C y una buena cantidad de repetitivo; Python es sintácticamente muy limpio y usa sangría para delinear bloques de código.

Python es mucho más fácil de aprender.

C # se ejecuta mucho más rápido que Python.

Python es mucho, mucho más versátil. Se utiliza en informática numérica y de ingeniería, ciencia de datos, aplicaciones financieras, robótica, Internet de las cosas, procesamiento de lenguaje natural, gestión de operaciones, neurociencia, infraestructura de telefonía, backends de juegos, etc.

Python es mucho, mucho más popular que C #, según casi todos los sitios web de clasificación.

Richard Kenneth Eng y Garry Taylor ya han cubierto la mayoría de los aspectos principales. Solo deseo agregar que Python es mucho más que un lenguaje de programación, es todo un ecosistema. Así que aprenda los pips de los administradores de paquetes (o conda de Anaconda Python). También navegue a través del índice de paquetes de Python y / o blogs relacionados con sus áreas de aplicación para identificar los paquetes disponibles. Utiliza entornos virtuales.

No sé si C # tiene características análogas, si las tiene, su transición será fácil. De lo contrario, dedica un tiempo a dominarlos.

La principal diferencia es que está pasando de tipos estáticos a tipos dinámicos, y si está ejecutando el tiempo de ejecución estándar de Python, pasará de un tiempo de ejecución de subprocesos múltiples a uno que esencialmente se ejecuta en un solo hilo.

En términos de velocidad, el tiempo de ejecución estándar de Python es mucho más lento que el tiempo de ejecución estándar de .NET, pero es poco probable que lo note a menos que esté vinculado a la CPU y haya menos aplicaciones de las que podría pensar.

Python tiende a tener un mejor soporte para módulos de terceros fuera de Windows, por otro lado, C # probablemente tenga un mejor soporte * en * Windows.

Probablemente encontrará que los IDE de Python no son tan buenos como Visual Studio, suponiendo que lo estuviera usando para C #.

Mi mejor consejo, comenzaría a aprender sobre entornos virtuales, el paquete Anaconda y el comando “pip install”. Solo un adelanto que puede hacerte la vida más fácil.