No hay inglés y jerga de lujo.
Vamos a bucear directamente en.
Consejos básicos para aumentar la eficiencia de los scripts básicos de Python.
1.-Lugar de intercambio de dos números.
x, y = 10, 20
imprimir (x, y)
x, y = y, x
imprimir (x, y)
# 1 (10, 20)
# 2 (20, 10)
2.Protección del operador de comparación.
n = 10
resultado = 1
imprimir (resultado)
# Cierto
resultado = 1> n <= 9
imprimir (resultado)
# Falso
3.Uso de operadores ternarios para asignación condicional.
Sintaxis para usar el operador condicional en Python
[on_true] si [expresión] else [on_false]
Aquí hay algunos ejemplos que puede usar para hacer que su código sea compacto y conciso.
La siguiente declaración está haciendo lo mismo que se supone que es
“ Asigne 10 a x si y es 9, de lo contrario asigne 20 a x ”.
Podemos ampliar el encadenamiento de operadores si es necesario.
Pitón
x = 10 si (y == 9) más 20
Del mismo modo, podemos hacer lo mismo para los objetos de clase.
x = (classA si y == 1 else classB) (param1, param2)
En el ejemplo anterior, classA y classB son dos clases y uno de los constructores de clase sería llamado.
A continuación se muestra un ejemplo más con un no. de condiciones de unión para evaluar el número más pequeño.
pequeño def (a, b, c):
devuelve a si a <= b y a <= c else (b si b <= a y b <= c else c)
impresión (pequeño (1, 0, 1))
impresión (pequeño (1, 2, 2))
impresión (pequeño (2, 2, 3))
impresión (pequeño (5, 4, 3))
#Salida
# 0 # 1 # 2 # 3
Incluso podemos usar un operador ternario con la lista de comprensión.
[m ** 2 si m> 10 más m ** 4 para m en el rango (50)]
# => [0, 1, 16, 81, 256, 625, 1296, 2401, 4096, 6561, 10000, 121, 144, 169, 196, 225, 256, 289, 324, 361, 400, 441, 484, 529, 576, 625, 676, 729, 784, 841, 900, 961, 1024, 1089, 1156, 1225, 1296, 1369, 1444, 1521, 1681, 1764, 1849, 1936, 2025, 2116, 2209, 2304, 2401]
Trabaja con cuerdas multilínea.
El enfoque básico es utilizar barras invertidas que se derivan del lenguaje C
multiStr = “select * from multi_row \
donde row_id <5 "
imprimir (multiStr)
# select * from multi_row donde row_id <5
Un truco más es usar las comillas triples.
multiStr = “” “select * from multi_row
donde row_id <5 "" "
imprimir (multiStr )
#select * de multi_row
#where row_id <5
El problema común con los métodos anteriores es la falta de sangría adecuada. Si intentamos sangrar, insertará espacios en blanco en la cadena.
Así que la solución final es dividir la cadena en varias líneas y encerrar toda la cadena entre paréntesis.
multiStr = (“select * from multi_row”
“donde row_id <5"
“orden por edad”)
imprimir (multiStr)
#select * de multi_row donde row_id <5 ordena por edad
Almacenar elementos de lista en una nueva variable
testList = [1,2,3]
x, y, z = testList
imprimir (x, y, z)
# -> 1 2 3
Imprime la ruta del archivo de los módulos importados.
subprocesos de importación
zócalo de importación
imprimir (enhebrar)
imprimir (socket)
# 1-
# 2-
Utilice el operador interactivo “_”.
> >> 2 + 1
3
>>> _
3
>>> imprimir _
3
Diccionario / conjunto de comprensiones.
testDict = {i: i * i para i en xrange (10)}
testSet = {i * 2 para i en xrange (10)}
imprimir (testSet)
imprimir (testDict)
#set ([0, 2, 4, 6, 8, 10, 12, 14, 16, 18])
# {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}
Nota- Solo hay una diferencia de <:> en las dos afirmaciones. Además, para ejecutar el código anterior en Python3, reemplaza por
Depuración de scripts.
importar pdb
pdb.set_trace ()
Podemos especificar en cualquier lugar del script y establecer un punto de interrupción allí. Es extremadamente conveniente.
Configuración de intercambio de archivos.
Python permite ejecutar un servidor HTTP que puede usar para compartir archivos desde el directorio raíz del servidor. A continuación se muestran los comandos para iniciar el servidor.
# Python 2
Cáscara
1
python -m SimpleHTTPServer
# Python 3
Cáscara
python3 -m http.server
Los comandos anteriores iniciarían un servidor en el puerto predeterminado, es decir, 8000. También puede usar un puerto personalizado pasándolo como último argumento a los comandos anteriores.
Inspecciona un objeto en python.
Podemos inspeccionar objetos en Python llamando al método dir (). Aquí hay un ejemplo simple.
prueba = [1, 3, 5, 7]
imprimir (dir (prueba))
Cáscara
[‘__add__’, ‘__class__’, ‘__contiene__’, ‘__delattr__’, ‘__delitem__’, ‘__delslice__’, ‘__doc__’, ‘__eqq’ ‘,’ __getat ”, ‘__eq__’ ‘,’ __ge__ ” __getslice__ ‘,’ __gt__ ‘,’ __hash__ ‘,’ __iadd__ ‘,’ __imul__ ‘,’ __init__ ‘,’ __iter__ ‘,’ __le__ ‘,’ __len__ ”, ‘__len__’, ‘__len__’ ‘ , ‘__reduce__’, ‘__reduce_ex__’, ‘__repr__’, ‘__reversed__’, ‘__rmul__’, ‘__setattr__’, ‘__setitem__’, ‘__setsci__’, ‘nsetslice__’, ‘__sizeof__’ ‘ contar ‘,’ extender ‘,’ index ‘,’ insert ‘,’ pop ‘,’ remove ‘,’ reverse ‘,’ sort ‘]
Simplificar si enunciado.
Para verificar múltiples valores, podemos hacerlo de la siguiente manera.
si m en [1,3,5,7]:
en lugar de:
si m == 1 o m == 3 o m == 5 o m == 7:
Alternativamente, podemos usar ‘{1,3,5,7}’ en lugar de ‘[1,3,5,7]’ para ‘en’ operador porque ‘set’ puede acceder a cada elemento con O (1).
Detectar la versión de python en tiempo de ejecución
En ocasiones, es posible que no queramos ejecutar nuestro programa si el motor de Python actualmente en ejecución es menor que la versión compatible. Para lograr esto, puede utilizar el siguiente fragmento de código. También imprime la versión de Python actualmente utilizada en un formato legible.
sistemas de importación
#Detecta la versión de Python actualmente en uso.
Si no es hasattr (sys, “hexversion”) o sys.hexversion! = 50660080:
imprimir (“Lo sentimos, no estás ejecutando en Python 3.5 \ n”)
imprimir (“Actualiza a 3.5. \ n”)
sys.exit (1)
#Imprimir la versión de Python en un formato legible.
imprimir (“Versión actual de Python:”, sys.version)
Alternativamente, puede usar sys.version_info> = (3, 5) para reemplazar sys.hexversion! = 50660080 en el código anterior. Fue una sugerencia de uno de los lectores informados.
Salida cuando se ejecuta en Python 2.7.
Python 2.7.10 (predeterminado, 14 de julio de 2015, 19:46:27)
[GCC 4.8.2] en linux
Lo sentimos, no estás corriendo en Python 3.5
Por favor actualice a 3.5.
Combinando múltiples cadenas.
Si desea concatenar todos los tokens disponibles en una lista, consulte el siguiente ejemplo.
prueba = [‘I’, ‘Me gusta’, ‘Python’, ‘automatización’]
Ahora, vamos a crear una sola cadena a partir de los elementos en la lista dada anteriormente.
>>> print ” .join (test)
Cuatro formas de revertir cadenas / lista.
Invertir la propia lista.
testList = [1, 3, 5]
testList.reverse ()
imprimir (testList)
# -> [5, 3, 1]
# Invertir mientras iterando en un bucle.
para elemento en reversa ([1,3,5]): imprimir (elemento)
# 1-> 5
# 2-> 3
# 3-> 1
# Invertir una cadena en línea.
“Prueba Python” [:: – 1]
Esto da la salida como “nohtyP tseT”
# Invertir una lista usando rebanado.
[1, 3, 5] [:: – 1]
El comando anterior dará la salida como [5, 3, 1].
Jugar con la enumeración.
Con los enumeradores, es fácil encontrar un índice mientras está dentro de un bucle.
lista de pruebas = [10, 20, 30]
para i, valor en enumerar (lista de prueba):
imprimir (i, ‘:’, valor)
# 1-> 0: 10
# 2-> 1: 20
# 3-> 2: 30
Uso de enumeraciones en python.
Podemos usar el siguiente enfoque para crear definiciones de enumeración.
Formas de clase:
Círculo, Cuadrado, Triángulo, Cuadrángulo = rango (4)
imprimir (Shapes.Circle)
imprimir (Shapes.Square)
imprimir (Shapes.Triangle)
imprimir (Shapes.Quadrangle)
# 1-> 0
# 2-> 1
# 3-> 2
# 4-> 3
Devuelve múltiples valores de la función.
No muchos lenguajes de programación soportan esta característica. Sin embargo, las funciones en Python devuelven múltiples valores.
Consulte el siguiente ejemplo para verlo funcionar.
# función que devuelve múltiples valores.
def x ():
devuelve 1, 2, 3, 4
# Llamando a la función anterior.
a, b, c, d = x ()
imprimir (a, b, c, d)
# -> 1 2 3 4
Desempaquete el argumento de la función usando el operador splat
El operador splat ofrece una forma artística de desempaquetar listas de argumentos. Por favor, consulte el siguiente ejemplo para mayor claridad.
prueba de def (x, y, z):
imprimir (x, y, z)
testDict = {‘x’: 1, ‘y’: 2, ‘z’: 3}
testList = [10, 20, 30]
prueba (* testDict)
prueba (** testDict)
test (* testList)
# 1-> xyz
# 2-> 1 2 3
# 3-> 10 20 30
Utilice un diccionario para almacenar un interruptor.
Podemos hacer un diccionario de expresiones de la tienda.
stdcalc = {
‘suma’: lambda x, y: x + y,
‘resta’: lambda x, y: x – y
}
print (stdcalc [‘sum’] (9,3))
imprimir (stdcalc [‘restar’] (9,3))
# 1-> 12
# 2-> 6
Calcula el factorial de cualquier número en una línea.
Python 2.X.
resultado = (lambda k: reduce (int .__ mul__, rango (1, k + 1), 1)) (3)
imprimir (resultado)
# -> 6
Python 3.X.
funciones de importación
resultado = (lambda k: functools.reduce (int .__ mul__, rango (1, k + 1), 1)) (3)
imprimir (resultado)
# -> 6
Encuentra el valor más frecuente en una lista.
prueba = [1,2,3,4,2,2,3,1,4,4,4]
imprimir (max (set (test), key = test.count))
# -> 4
Restablecer el límite de recursión.
sistemas de importación
x = 1001
imprimir (sys.getrecursionlimit ())
sys.setrecursionlimit (x)
imprimir (sys.getrecursionlimit ())
# 1-> 1000
# 2-> 1001
Compruebe el uso de memoria de un objeto.
En Python 3.5.
sistemas de importación
x = 1
imprimir (sys.getsizeof (x))
# -> 28
Utilice __slots__ para reducir los gastos generales de memoria.
¿Alguna vez has observado que tu aplicación Python consume muchos recursos, especialmente memoria? Aquí hay un truco que usa la variable de clase <__slots__> para reducir la sobrecarga de memoria en cierta medida.
sistemas de importación
clase FileSystem (objeto):
def __init __ (auto, archivos, carpetas, dispositivos):
self.files = archivos
self.folders = carpetas
self.devices = dispositivos
imprimir (sys.getsizeof (sistema de archivos))
clase FileSystem1 (objeto):
__slots__ = [‘archivos’, ‘carpetas’, ‘dispositivos’]
def __init __ (auto, archivos, carpetas, dispositivos):
self.files = archivos
self.folders = carpetas
self.devices = dispositivos
imprimir (sys.getsizeof (FileSystem1))
#En Python 3.5
# 1-> 1016
# 2-> 888
Claramente, se puede ver en los resultados que hay ahorros en el uso de la memoria. Pero debe usar __slots__ cuando la sobrecarga de memoria de una clase es innecesariamente grande. Hazlo solo después de perfilar la aplicación. De lo contrario, hará que el código sea difícil de cambiar y sin ningún beneficio real.
Lambda para imitar la función de impresión.
sistemas de importación
lprint = lambda * args: sys.stdout.write (“” .join (map (str, args)))
lprint (“python”, “tips”, 1000,1001 )
# -> puntas de pitón 1000 1001
Crea un diccionario a partir de dos secuencias repetidas.
t1 = (1, 2, 3)
t2 = (10, 20, 30)
imprimir (dict (zip (t1, t2)))
# -> {1: 10, 2: 20, 3: 30}
Búsqueda en línea de múltiples prefijos en una cadena.
imprimir (“ http: //www.google.com" ; .startswith ((” http: // “,” https: // “)))
imprimir (“ http: //www.google.co.uk" ; .endswith ((“. com “,”. http://co.uk “)))
# 1-> Verdadero
# 2-> Verdadero
Forma una lista unificada sin utilizar ningún bucle.
importar itertools
prueba = [[-1, -2], [30, 40], [25, 35]]
imprimir (lista (itertools.chain.from_iterable (prueba)))
# -> [-1, -2, 30, 40, 25, 35]
Implementar un verdadero cambio de caja en python.
Aquí hay un código para eso.
def xswitch (x):
devolver xswitch._system_dict.get (x, Ninguno)
xswitch._system_dict = {‘archivos’: 10, ‘carpetas’: 5, ‘dispositivos’: 2}
imprimir (xswitch (‘predeterminado’))
imprimir (xswitch (‘dispositivos’))
# 1-> Ninguno
# 2-> 2