Red de conocimientos turísticos - Información de alquiler - ¿Hay alguien aquí para hablar sobre el problema de que la escritura en Python chino es demasiado lenta?

¿Hay alguien aquí para hablar sobre el problema de que la escritura en Python chino es demasiado lenta?

Explicación: Aumentar el poder descriptivo del código puede reducir exponencialmente tu LOC, haciéndolo simple, real y poderoso

Vista: menos escribir = más pensar + menos errores, 10 líneas de códigos son más comprensibles que 50 líneas Los siguientes consejos pueden ayudar a mejorar la eficiencia del trabajo 5 veces

1. Evite el uso de variables temporales al intercambiar valores de variables: (libro de recetas 1.1)

Código antiguo. : A menudo estamos muy familiarizados con el siguiente código

temp = x

x = y

y = temp

Código 1:

u, v, w = w, v, u

Alguien sugirió que el orden de asignación se puede utilizar para simplificar las tres líneas de código anteriores en una sola.

Código 2:

u, v = v, u

De hecho, utilizar el concepto de asignación de tuplas de Python puede ser más conciso: inicialización de tuplas, asignación de tuplas

2 Evite juzgar si el valor clave existe al leer el diccionario: (libro de cocina1.2)

d = { 'key': 'value' }

Código antiguo:

si 'clave' en d: imprimir d['clave']

de lo contrario: imprimir 'no encontrar'

Nuevo código:

print d.get ('key', 'not find')

3. Optimización del código para encontrar el valor mínimo y la posición:

s = [4, 1, 8 , 3]

Código antiguo:

mval, mpos = MAX, 0

para i en xrange(len(s)):

if s[i] lt; mval: mval, mpos = s[i], i

Nuevo código:

mval, mpos = min([ (s[i] , i) for i in xrange (len(s)) ])

Las características de la comparación de tuplas se pueden escribir convenientemente en una línea

Vista 1: la programación en Python requiere la sensación de "una palabra de oro"; ya que si elige Python, no se preocupe por la eficiencia de una sola declaración.

Los ejemplos anteriores son muy básicos. En la práctica, no es imposible comprimir el código original en 1/5. Nuestro subproyecto anterior tenía un código C de 270 K.

Después. Después de la reconstrucción, el código Python tiene solo 67 K. Por supuesto, el uso del módulo de registro de Python (registro), la lectura y escritura de texto de la tabla (csv), etc., también contribuyó mucho

Al final, el código se convirtió en 1 /4 del original, y siento que mi vida se ha extendido tres veces. . .

Lo siguiente optimiza varios códigos comunes:

4. La expresión más simple del trabajo de lectura de archivos:

Código antiguo: necesitamos leer archivos de texto en la memoria

línea = ''

fp = open('text.txt', 'r')

para línea en fp: text = line

Código uno:

text = string.join([ línea por línea en open('text.txt')], '']

Código dos:

text = ' '.join([ línea por línea en open('text.txt')])

Código 3:

texto = archivo('text.txt' read()).

La nueva versión de Python te permite escribir código más hermoso que 1 y 2 (abrir es un alias para archivo, aquí archivo es más intuitivo)

5. en Python Implemente la fórmula ternaria:

Código antiguo: estoy acostumbrado a C, Java, C# y no me gusta escribir el siguiente código

if n gt = 0: print; 'positivo'

else: print 'negitive'

Código 1: Esta técnica también es muy común en Lua

print (n gt; = 0) y 'positivo' o 'negativo'

Explicación: 'y' y 'o' aquí son equivalentes a ':' y '?' en C. La razón es muy simple, porque si la expresión es

verdadero Entonces se cortocircuita el siguiente o y se obtiene 'positivo' en caso contrario, se cortocircuita y se obtiene 'negativo'

Código 2:

print (n gt; = 0 and [ 'positivo'] o ['negitivo])[0]

Explicación: Reúna dos valores en una tupla, incluso si 'positivo' es Ninguno, ' ', 0 y así sucesivamente, la oración completa es segura

Código 3:

print ('negitive', 'positive')[n gt = 0]

Descripción: (FalseValue, TrueValue)[Condición] Utiliza los dos principios de acceso a tuplas True=1

6. Evite la inicialización de miembros del diccionario que sean objetos complejos: (libro de recetas 1.5)<. /p>

Código antiguo:

si no y en d: d[y] = { }

d[y][x] = 3

Nuevo código:

d .setdefault(y, { })[x] = 3

Igual si el miembro es una lista: d.setdefault(key, []) .append(val)

Arriba Después de aplicar las seis habilidades, el código ya es muy compacto, pero aún no ha logrado "sin tonterías". Algunas personas pueden dudar de que realmente pueda reducir el código en 1. / 5. Lo que quiero decir es 1/5. De hecho, es muy conservador. Después de usar Python, el autor de Thinking in C sintió que Python incluso mejoró la eficiencia del trabajo 10 veces.

El siguiente ejemplo se puede explicar con más detalle:

Ejemplo 1: convertir una dirección IP de texto a un número entero

Explicación: es necesario convertir una dirección IP similar a '192.168.10.214' a 0x0C0A80AD6 , en Sin inet_aton

Cuando los programadores de C/Java se preocupan por cómo realizar análisis de texto y lidiar con varias entradas incorrectas, los programadores de Python ya no están trabajando:

f = lambda ip: sum([ int(k)*v for k, v in zip(ip.split('.'), [1lt;lt;24, 65536, 256, 1])] )

Primera ip .split('.') obtiene la lista ['192', '168', '10', '214']. Después del ensamblaje zip, se convierte en

[('192', 0x1000000), ('168', 0x10000), ('10', 0x100), ('214', 1)]

Luego el bucle for realiza la multiplicación de enteros de los dos elementos de cada tupla, y finalmente el nuevo list Los valores se suman usando suma para obtener el resultado

El programador de C dijo infiel: "Parece que confías demasiado en los datos y no consideraste la entrada incorrecta en absoluto"

El programador de Python respondió: "El try/except externo me ha ayudado a completar todo el manejo de excepciones, por lo que no tengo que preocuparme por fallas fuera de los límites y por no poder detectarlas".

El programador de Java miró con orgullo sus cientos de líneas de código: "Quiero saber cómo puede hacer que sus colegas comprendan su obra maestra. ¿Ha considerado procesar funciones como gettoken de forma independiente para que se puedan reutilizar problemas similares? Mi código ilustra cómo aprovechar al máximo Reflection y

Las excelentes características de la interfaz proporcionan un código claro y legible al mismo tiempo que aumentan la reutilización"

Python dijo impotente: "Esto es 'código puro', lo que significa que no se puede modificar, similar a las expresiones regulares. Siempre que la gente entienda su función, será suficiente

Si quieres modificarlo, simplemente reescribelo.

Incluso si puedo completarlo en tres líneas de código, nunca tendré la idea de encapsularlo. Además, ¿a las personas que están familiarizadas con Python no les resultará difícil de leer? "

El programador de C lanza Killer Jane: "¿Qué pasa si te piden que proceses 100.000 conversiones de IP en un segundo? "

El programador de Python tenía ganas de dormir: "¿Crees que sería tan estúpido como para usar Python para hacer tal cosa? ”

El programador de C no pareció escucharlo en este momento, sino que comenzó a pensar seriamente en la pregunta que acababa de hacer. Después de un rato, miró las otras dos preguntas con desprecio.

La gente le echa un vistazo, luego se vuelve confiadamente hacia el ordenador y empieza a escribir en la pantalla: "template lt;...."

Pequeña broma: La trampa de la encapsulación Hace que la gente grite "encapsulación" o "encapsulación" "Reutilizar", mientras que en el nuevo proyecto, rompe y reescribe todo, y lo explica como: Refactorización

Vista 2: La simplicidad es hermosa y diseñar algo complejo es inherentemente problemático

Pregunta para pensar: si el programa anterior se invierte para convertir la forma entera de IP en una cadena, ¿cómo debería diseñarlo?

Ejemplo 2: generar los nombres y nombres de cada miembro de un objeto Valor

g = lambda m: '/n'.join([ 's=s'(k, repr(v)) for k, v in m.__dict__. iteritems() ])

Uso: print g(x)

Extensión: después de familiarizarse con lambda en los dos ejemplos anteriores, se recomienda intentar usar rendimiento

Resumen de vistas

P: "¿Cómo podemos prestar más atención a lo que piensas que a lo que estás escribiendo?"

R: "Significa que estás escribiendo el código requerido en la página 1 en tu mano, pero tus ojos lo están mirando. El contenido requerido en la página 2, pensando en cómo manejar el contenido en las páginas 5-10”

Tiene sentido en países extranjeros Abolir PASCAL hace muchos años y utilizar Python para la investigación y la enseñanza científicas. Hay innumerables ejemplos de simplificación de código. Al codificar con él, debe tener la sensación de "una palabra de oro", de lo contrario, lo que termine escribiendo seguirá siendo. un "programa C disfrazado de Python".

La programación es inherentemente feliz. Evite el trabajo físico excesivo y gane más tiempo para pensar.

Pregunta de reflexión: ¿deberíamos encapsular o abandonar el empaquetado?

Pregunta para pensar: "más de una forma de hacerlo". ¿Es "eso" algo bueno? ¿Cuál es su opuesto?

PD: Para conocer métodos más prácticos, puede leer el URL diaria de Python y "Libro de recetas de Python"