5 Funcions avançades de Python i com utilitzar-les

Bloc

5 Funcions avançades de Python i com utilitzar-les

5 Funcions avançades de Python i com utilitzar-les

Les funcions avançades de qualsevol llenguatge de programació solen descobrir-se mitjançant una àmplia experiència. Esteu codificant un projecte complicat i us trobeu cercant alguna cosa a stackoverflow. A continuació, trobareu una solució molt elegant per al vostre problema que utilitza una característica Python que ni tan sols sabíeu que existia.

Aquesta és totalment la manera més divertida d’aprendre: descobriment per exploració i accident.

on puc comprar una corda?

Aquí teniu 5 de les funcions avançades més útils del llenguatge de programació Python i, sobretot, com utilitzar-les.

(1) Funcions Lambda

A Funció Lambda és una funció petita i anònima, anònima en el sentit que en realitat no té un nom.

Les funcions Python normalment es defineixen utilitzant l'estil de def a_function_name() , però amb les funcions lambda no li donem cap nom. Ho fem perquè el propòsit d'una funció lambda és realitzar algun tipus de simple expressió o operació sense necessitat de definir completament una funció.

Una funció lambda pot adoptar qualsevol nombre d'arguments, però sempre ha de tenir només una expressió:

x = lambda a, b : a * b print(x(5, 6)) # prints '30' x = lambda a : a*3 + 3 print(x(3)) # prints '12'

Mireu que fàcil va ser! Hem realitzat una mica de matemàtiques bàsiques sense la necessitat de definir una funció completa. Aquesta és una de les moltes característiques de Python que el converteix en un llenguatge de programació net i senzill d’utilitzar.

(2) Mapes

Mapa () és una funció Python integrada que s’utilitza per aplicar una funció a una seqüència d’elements com una llista o un diccionari. És una cosa molt neta i el més important llegible manera de realitzar aquesta operació.

def square_it_func(a): return a * a x = map(square_it_func, [1, 4, 7]) print(x) # prints '[1, 16, 47]' def multiplier_func(a, b): return a * b x = map(multiplier_func, [1, 4, 7], [2, 5, 8]) print(x) # prints '[2, 20, 56]'

Consulteu l'exemple anterior. Podem aplicar la nostra funció a una llista única o a diverses llistes. De cara, podeu utilitzar un mapa amb qualsevol funció python que pugueu pensar, sempre que sigui compatible amb els elements de seqüència en què esteu operant.

(3) Filtratge

El Filtre La funció incorporada és bastant similar a la Mapa funció en què aplica una funció a una seqüència (llista, tupla, diccionari). La diferència clau és que filter () només retornarà els elements que la funció aplicada va retornar com a És cert .

Consulteu l'exemple següent per obtenir una il·lustració:

# Our numbers numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] # Function that filters out all numbers which are odd def filter_odd_numbers(num): if num % 2 == 0: return True else: return False filtered_numbers = filter(filter_odd_numbers, numbers) print(filtered_numbers) # filtered_numbers = [2, 4, 6, 8, 10, 12, 14]

No només hem avaluat True o False per a cada element de la llista, sinó que la funció * filter () * també s'ha assegurat de retornar només els elements que coincideixen amb True. Molt convenient per gestionar dos passos per comprovar una expressió i crear una llista de retorns.

(4) Itertools

El Python Itertools module és una col·lecció d’eines per manipular iteradors. Un iterador és un tipus de dades que es pot utilitzar en un bucle for que inclou llistes, tuples i diccionaris.

Utilitzant les funcions del fitxer Itertools El mòdul us permetrà realitzar moltes operacions iteradores que normalment requeririen funcions de diverses línies i una comprensió de llista complicada. Consulteu els exemples següents per obtenir una il·lustració impressionant de la màgia de Itertools!

from itertools import * # Easy joining of two lists into a list of tuples for i in izip([1, 2, 3], ['a', 'b', 'c']): print i # ('a', 1) # ('b', 2) # ('c', 3) # The count() function returns an interator that # produces consecutive integers, forever. This # one is great for adding indices next to your list # elements for readability and convenience for i in izip(count(1), ['Bob', 'Emily', 'Joe']): print i # (1, 'Bob') # (2, 'Emily') # (3, 'Joe') # The dropwhile() function returns an iterator that returns # all the elements of the input which come after a certain # condition becomes false for the first time. def check_for_drop(x): print 'Checking: ', x return (x > 5) for i in dropwhile(should_drop, [2, 4, 6, 8, 10, 12]): print 'Result: ', i # Checking: 2 # Checking: 4 # Result: 6 # Result: 8 # Result: 10 # Result: 12 # The groupby() function is great for retrieving bunches # of iterator elements which are the same or have similar # properties a = sorted([1, 2, 1, 3, 2, 1, 2, 3, 4, 5]) for key, value in groupby(a): print(key, value), end=' ') # (1, [1, 1, 1]) # (2, [2, 2, 2]) # (3, [3, 3]) # (4, [4]) # (5, [5])

(5) Generadors

Generador Les funcions us permeten declarar una funció que es comporta com un iterador, és a dir, es pot utilitzar en un bucle for. Això simplifica enormement el vostre codi i és molt més eficient en memòria que un simple bucle.

Penseu en un exemple en què volem sumar tots els números de l'1 al 1000. La primera part del codi següent il·lustra com ho faríeu mitjançant un bucle for.

Ara, tot està bé i elegant si la llista és petita, diguem que té una longitud de 1000. El problema sorgeix quan es vol fer això amb un enorme llista, per exemple, 1.000 milions de números flotants. Amb un bucle for, es crea una llista de masticació massiva de memòria * a la memòria - * no tothom té memòria RAM il·limitada per emmagatzemar tal cosa. El range() funció de Python fa el mateix, crea la llista a la memòria

La secció (2) del codi il·lustra la suma de la llista de números mitjançant un generador de Python. Un generador crearà elements i els emmagatzemarà només a la memòria ja que els necessita és a dir, d’un en un. Això vol dir que, si heu de crear 1.000 milions de números flotants, només els guardareu a la memòria d’un en un. El xrange() La funció a Python utilitza generadors per crear llistes.

la impressora germana es mostra fora de línia

Moral de la història: si teniu un gran abast per al qual voleu generar una llista, utilitzeu un generador o el xrange funció. Això és especialment cert si teniu un sistema realment sensible a la memòria, com ara la informàtica mòbil o de punta.

Dit això, si voleu repassar la llista diverses vegades i és prou petit per cabre a la memòria, serà millor utilitzar-lo per a bucles i la funció range Això es deu al fet que els generadors i xrange generarà nous valors de llista cada vegada que hi accediu, mentre que range és una llista estàtica i els enters ja existeixen a la memòria per accedir-hi ràpidament.

# (1) Using a for loop numbers = list() for i in range(1000): numbers.append(i+1) total = sum(numbers) # (2) Using a generator def generate_numbers(n): num, numbers = 1, [] while num

#python # aprenentatge automàtic