Corso Avanzato di Sviluppo Python
Capitolo
>
Livello
Funzioni Avanzate
Funzioni parziali
Obiettivo
Imballa e posiziona i materiali da costruzione che sono stati consegnati al molo utilizzando funzioni parziali.
Alcune forniture sono state appena consegnate a un molo, e devono essere imballate e conservate in modo da poter essere usate come materiali per la costruzione. I materiali devono essere avvolti in stoffa e legati con del filo. È importante pesare tutti gli elementi durante l'imballaggio in modo che possano essere trasportati efficacemente in seguito. Per facilitare questo processo possiamo ottimizzarlo utilizzando le Funzioni Parziali.
Una Funzione Parziale è una funzione personalizzata che viene abbreviata dal fatto di non dover aggiungere i valori degli argomenti che sono in gran parte costanti. Questo ti permette di usare funzioni che accettano più argomenti ed eseguirle con un solo argomento o con il numero che scegli.
from functools import partial
Per iniziare devi importare partial dal modulo chiamato functools, questo ti permetterà di creare Funzioni Parziali. L'importazione del codice va sempre posta in cima all'editor di codice.
Definisci una funzione chiamata weight e falla prendere tre (3) argomenti: thread, cloth e material. Questa funzione ti permetterà di calcolare il peso dei materiali imballati; possiamo ottimizzare ulteriormente questo processo canalizzandolo attraverso una funzione parziale.
def weight(thread, cloth, material):
return 2 * thread + 5 * cloth + material * 10
package = partial(weight, 4, 2)
Crea una Funzione Parziale chiamata package, configurata in modo simile alle funzioni lambda. Usa partial() per popolare la funzione e aggiungi il nome della funzione, oltre ai valori fissi per gli argomenti che desideri assegnare.
Qualsiasi argomento della funzione originale che non assegni diventerà l'argomento che dovrà essere specificato nella Funzione Parziale. Nel caso della Funzione Parziale package(), si tratta dell'argomento material.
Attraversa le X scure di fronte alle casse per prendere i materiali d'imballaggio. Sul tappeto giallo, dove è presente una X, usa la funzione collect() per acquisire "thread" e vai alla X sul tappeto viola per usare la funzione collect() e acquisire "cloth". Questi elementi saranno usati per imballare i materiali.
Attraversa il molo e raccogli tutti i materiali da costruzione, che sono: bricks, planks, red_bricks e wood. Una volta raccolti, assegna il numero di ognuno a una variabile denominata come il materiale, per esempio: bricks = 3.
Successivamente, recati alle X chiare di fronte alle casse e calcola il peso di ciascun materiale da costruzione prima di conservarlo. Usa la funzione speak() in combinazione con la Funzione Parziale package() per calcolare il peso. Usa le variabili dei materiali come argomenti per la funzione package(), per esempio:
player.speak("Package weighs %s pounds" % package(bricks)) player.place(package(bricks))
Continua utilizzando la funzione place() per conservare il materiale nelle casse, sempre usando la funzione package(), come nell'esempio sopra.
Alla X chiara con il tappeto red pesa e conserva bricks. Alla X chiara con il tappeto blue pesa e conserva planks. Alla X chiara con il tappeto orange pesa e conserva red_bricks. Alla X chiara con il tappeto green pesa e conserva wood. Conserva e pesa tutti e quattro i materiali nelle casse corrette per completare il livello.