script net from c# python

net - Asesoramiento para el programador C#escribiendo Python



ironpython c# (10)

Principalmente he estado haciendo desarrollo de C # en los últimos años, pero recientemente comencé a hacer un poco de Python (no de Iron Python). Pero no estoy seguro de si he dado el salto mental a Python ... Siento que estoy tratando de hacer las cosas como lo haría en C #.

¿Algún consejo sobre cómo puedo aprovechar plenamente Python?

¿O algún consejo, trucos, cosas de las que aprender, cosas de las que tener cuidado?


En caso de que aún no lo haya escuchado, Dive Into Python es un excelente lugar para comenzar para cualquiera que esté aprendiendo Python. También tiene un montón de consejos y trucos .


Primero, revisa los tgray''s y Lundström''s .

Entonces, algunas cosas que tal vez quiera saber:

  • Python se tipea dinámicamente, así que a diferencia de C #, no verificará el tipo, sino el comportamiento. Es posible que desee googlear sobre pato escribiendo. Implica que no tiene que lidiar con el boxeo y el desempaquetado.

  • Python está completamente orientado a objetos, pero la sintaxis no hace cumplir este paradigma. Puedes escribir Python sin usar la palabra "clase".

  • La biblioteca de GUI presentada con Python no se puede comparar con C #. Compruebe las bibliotecas PyQt , GTK o wxPython .

  • Python tiene muchos conceptos con los que quizás no estés familiarizado: listas de comprensión, generadores ("yield" existe en C #, pero no se usa mucho), decoradores, metaclasses, etc. No temas; puedes programar en Python sin ellos. Son solo herramientas inteligentes, no obligatorias.

  • Al igual que en C #, la biblioteca estándar de Python es enorme. Míralo siempre cuando encuentres algún problema. Es muy probable que alguien ya lo haya resuelto.

  • Python utiliza etiquetas de enlace y variable TARDÍAS. Es demasiado pronto para que alguien que comienza con el idioma se preocupe por ello, pero recuerde que algún día se encontrará con un comportamiento con variables que PARECE ilógicas, y tendrá que comprobarlo. Por el momento:

Solo recuerde nunca hacer lo siguiente:

def myfunc(my_list=[]) : # bla

En lugar:

def myfunc(my_list=()) : my_list = list(my_list)

Y estarás bien. Hay una buena razón para eso, pero ese no es el punto :-)

  • Python es multiplataforma, disfruta escribir en Mac y ejecutar en Linux, si lo desea.

  • Python no cuenta con un IDE complejo (tienes IDLE :-)). Si eres un adicto a Visual Studio, revisa Glade . Esto no es tan avanzado como Visual Studio, pero sigue siendo un buen RAD .

  • Si desea desarrollar alguna aplicación web en Python, recuerde que Python no es .NET. Debe agregar un marco web si desea comparar. Me gusta Django .

  • Python no necesita un gran IDE para trabajar. SciTE , Notepad++ , IDLE , Kate , gedit ... Los editores de peso ligero son realmente suficientes.

  • Python impone sangría usando espacios y salto de línea, no puede cambiar eso. Debería evitar usar pestañas para sangrar y elegir espacios en su lugar. El equivalente de pulseras vacías {} es la palabra clave "pase".

  • Python no aplica las variables privadas. Puede definir una varita privada usando "__" (dos guiones bajos) al principio del nombre de la variable, pero todavía es omitible en algunas formas complicadas. Python usualmente asume que los programadores son adultos crecidos que saben lo que hacen y se comunican.

  • Python usa iteración. Mucho. Mucho. Y así el módulo itertools es tu mejor amigo.

  • Python no tiene delegados integrados. El módulo delegado no es lo que piensas. Para la programación basada en eventos, use una GUI lib (o codifique el patrón usted mismo, no es tan difícil).

  • Python tiene un intérprete: puedes probar casi cualquier cosa, en vivo. Siempre debería estar ejecutándose al lado de su editor de texto. El intérprete básico de Python no es mucho, pruebe IPython para obtener algo sabroso.

  • Python se autodocumenta: use docstrings en su propio código y consulte a los demás usando "help ()" en el intérprete de Python

Conceptos básicos del módulo:

  • sys: manipular las características del sistema
  • os: establecer credenciales, manipular rutas de archivos, renombrar, recorridos de archivos recursivos, etc.
  • shutil: procesamiento de archivos por lotes (como eliminación recursiva)
  • re: regexp
  • urllib y urllib2: secuencias de comandos HTTP como descargar, publicar / obtener resúmenes, etc.
  • fecha y hora: manipular fecha, hora Y DURACIÓN
  • hilo: lo adivinas
  • zlib: compresión
  • pickle: serialización
  • xml: análisis / escritura de XML con SAX o DOM

Hay cientos de módulos. Disfrutar.

Algunas formas típicas de hacer cosas en Python:

Bucles:

Los codificadores Python usan masivamente el equivalente del bucle C # foreach , y lo prefieren a cualquier otro:

Iteraciones básicas:

for item in collection: print str(item)

"colección" puede ser una cadena, una lista, una tupla ... Cualquier iterable: cualquier objeto que define el método .next (). Hay muchos iterables en Python. Por ejemplo: una expresión idiomática típica de Python para leer archivos:

for line in open("/path/to/file") : print line

Un atajo al bucle for se llama "lista de comprensión". Es una forma de crear un nuevo iterable en una línea:

Crear una lista filtrada con comprensión de lista:

my_list = [item for item in collection if condition]

Crear una nueva lista con una lista de comprensión:

my_list = [int(item) * 3 for item in collection]

Creando un nuevo generador con una lista de comprensión:

my_list = (int(item) * 3 for item in collection)

Lo mismo que arriba, pero los valores se generarán sobre la marcha en la primera iteración y luego se perderán. Más información al respecto here .

Ordinary for loop

Si desea expresar un bucle for normal, puede usar la función xrange (). for (int i = 0; i < 5; i++) convierte en:

for i in xrange(0,5) :

hacer mientras equivalente

No hay "Do While" en Python. Nunca me lo perdí, pero si tienes que usar esta lógica, haz lo siguiente:

while True : # Yes, this is an infinite loop. Crazy, hu? # Do your stuff if condition : break

Desempacando

Intercambio de variables:

a, b = b, a

Múltiples asignaciones:

Lo anterior es solo el resultado de lo que llamamos "desempaquetar" (aquí se aplica a una tupla). Una forma simple de explicarlo es que puede asignar cada valor de cualquier secuencia directamente a un número igual a variables, en una fila:

animal1, animal2, animal3, animal4 = ["cow", "dog", "bird", "fish"]

Esto tiene muchas implicaciones. Al iterar en una matriz multidimensional, normalmente obtiene cada sub secuencia una por una y luego la usa, por ejemplo:

agenda = [("steve", "jobs"), ("linus", "torvald"), ("bill", "gates"),("jon", "skeet")] for person in agenda: print person[0], person[1]

Pero con el desempaquetado, puede asignar los valores directamente a las variables también:

agenda = [("steve", "jobs"), ("linus", "torvald"), ("bill", "gates"),("jon", "skeet")] for name, lastname in agenda: print name, lastname

Y es por eso que si desea obtener un índice mientras itera, los codificadores Python usan los siguientes modismos (enumerate () es una función estándar):

for index, value in enumerate(sequence) : print index, value

Desempaquetado en llamadas de funciones

Este es un uso avanzado, y puede omitirlo si le molesta.

Puede descomprimir valores usando el signo "*" para usar una secuencia directamente en una llamada de función. P.ej:

>>> foo(var1, var1, var3) : print var1, var2 print var3 >>> seq = (3.14, 42, "yeah") >>> foo(*seq) 3.14 42 yeah

Hay incluso más que eso. Puede descomprimir un diccionario como variables con nombre y escribir prototipos de función con * , ** para aceptar un número arbitrario de argumentos. Pero no se usó lo suficiente para merecer que esta publicación sea aún más larga :-).

Formato de cadena:

print "This is a %s on %s about %s" % ("post", "", "python") print "This is a %(subject)s on %(place)s about %(about)s" % {"subject" : "post", "place" : "", "about" : "python"}

Cortando un iterable:

Puede obtener cualquier parte de un iterable usando una sintaxis muy concisa:

print "blebla"[2:4] # Print "eb" last = string[:-1] # Getting last element even = (0,1,2,3,4,5,6,7,8,9)[::2] # Getting evens only (third argument is a step) reversed = string[::-1] # Reversing a string

Controles lógicos:

Puedes verificar la forma en que lo haces en C #, pero hay formas "Pythonic" (más cortas, más claras :-)):

if 1 in (1, 2, 3, 4) : # Check en element is in a sequence if var : # check is var is true. Var == false if it''s False, 0, (), [], {} or None if not var : # Contrary of above if thing is var: # Check if "thing" and "var" label the same content. if thing is None : # We use that one because None means nothing in Python (almost null)

Combo (imprima en una línea todas las palabras que contengan una "o" en mayúsculas):

sentence = "It''s a good day to write some code" print " ".join([word.upper() for word in sentence.split() if "o" in word])

Salida: "BUENO PARA ALGUN CÓDIGO"

Es más fácil pedir perdón que permiso

Los codificadores de Python generalmente no verifican si algo es posible. Son un poco como Chuck Norris. Ellos lo hacen. Entonces atrapa la excepción. Por lo general, no verifica si existe un archivo, intenta abrirlo y retroceder si falla:

try : f = open(file) except IOerror : print "no file here !"

Por supuesto, Chuck Norris nunca usa excepciones ya que nunca falla.

La cláusula else

"Else" es un mundo de muchos usos en Python. Encontrarás "else" después de "if", pero después de "except" y "for" también.

for stuff in bunch : # Do things else : # This always happens unless you hit "break" in the loop

Esto también funciona para el ciclo "while", incluso si no usamos este ciclo tanto.

try : # A crazy stuff except ToCrazyError : # This happens if the crazy stuff raises a ToCrazyError Exception else : # This will happen if there is no error so you can put only one line after the "try" clause finally : # The same as in C#

Si tiene curiosidad, aquí hay un montón de fragmentos de Python avanzados, rápidos y sucios (pero agradables).


Si no eres nuevo en la programación, te recomendaría el libro "Sumérgete en Python" de Mark Pilgrim. Explica Python de una manera que hace que sea fácil entender cómo se pueden aplicar las técnicas y modismos de Python para crear aplicaciones prácticas.



Si usted es alguien que está aprendiendo mejor un nuevo idioma tomando pequeños pasos incrementales, le recomendaría utilizar IronPython . De lo contrario, utiliza CPython regular y no hagas más codificaciones de C # hasta que sientas que tienes una comprensión de Python.


Sugeriría obtener un buen editor para que no te muerda el espacio en blanco. Para simplificar, solo uso los paquetes de ActivePython Link , que incluyen un editor y todas las bibliotecas de win32api. Son muy divertidos si has estado usando C #. El win32api en Python puede ser un poco más simple. No es necesario que haga todo el asunto DDLImport. Descargue ActivePython (que viene con CPython), ábralo y comience a ingresar algunas cosas en la consola. Lo recogerás bastante fácil después de usar C #. Para conocer más curiosidades interesantes de Python, pruebe el código ActiveState , que tiene todo tipo de recetas, que pueden permitirle ver muy simplemente diferentes cosas que puede hacer con Python.


También estoy en tu lugar, aún usando C # para la mayor parte de mi trabajo, pero usando Python cada vez más para otros proyectos.

@ e-satis probablemente conoce Python al revés y todos sus consejos son de primera categoría. Desde mi punto de vista, lo que más me diferenció fue lo siguiente:

Vuelve a funcional. no necesariamente el código de espagueti, pero aprender que no todo tiene que estar en un objeto, ni debería serlo.

El interprete. Es como la ventana inmediata excepto 10 ^ 10 mejor. Debido a la forma en que funciona Python, no necesitas todo el equipaje y la mierda C # te hace ingresar antes de que puedas ejecutar las cosas; puedes simplemente golpear algunas líneas y ver cómo funcionan las cosas.

Normalmente tengo una instancia IDLE en la que simplemente lanzo fragmentos mientras estoy averiguando cómo funcionan los diversos bits en el lenguaje mientras estoy editando mis archivos ... por ejemplo, estoy ocupado en cómo hacer una llamada al mapa en una lista, pero no estoy al 100% en la lambda que debería usar ... pinchar algunas líneas en IDLE, ver cómo funciona y qué hace.

Y finalmente, amando la verbosidad de Python, y no me refiero a eso en el largo sentido de la verbosidad, sino como lo señaló e-satis, usando verbos como "in", "is", "for", etc.

Si hiciste un montón de trabajo de reflexión en C #, tendrás ganas de llorar cuando veas lo simple que es lo mismo en Python.

Suerte con ello.


Y luego, algo de lo que puede beneficiarse:

Shell IPython : finalización automática en el shell. Realiza operaciones por lotes, agrega un montón de características, registro y demás. >>> Juega con el caparazón - ¡siempre!

easy_install / pip : Una forma sencilla y fácil de instalar una aplicación de Python de terceros.


Comience leyendo El Zen de Python

Puede leerlo en el enlace de arriba, o simplemente escriba import this en el indicador de Python. =)

Aproveche las funciones de Python no ofrecidas * por C #

Como escribir patos, metaclases, comprensión de listas, etc. *

Escribe programas simples solo para probar estas características. Te acostumbrarás (si no eres adicto) a ellos en poco tiempo.

Mire la biblioteca estándar de Python

Entonces no reinventas la rueda. No trates de leer todo, incluso una mirada rápida al TOC podría ahorrarte mucho tiempo.

* Sé que C # ya tiene algunas de estas características, pero por lo que puedo ver, son bastante nuevas o no muy utilizadas por los desarrolladores de C #. Por favor corrígeme si estoy equivocado.


  • Abstenerse de usar clases. Usa diccionarios, conjuntos, listas y tuplas.
  • Setters y getters están prohibidos.
  • No tenga manejadores de excepciones a menos que realmente lo necesite, deje que se cuelgue con estilo.
  • Pylint puede ser tu amigo para un estilo de codificación más pitón.
  • Cuando esté listo, consulte la lista de comprensiones, generadores y funciones lambda.