Per prima cosa, devi capire a cosa servono le funzioni. Potresti dire che una funzione fornisce un servizio: fa qualcosa per te.
Funzioni
- Fornisci un servizio
- non sai che esisti
Una stampante ad esempio è una sorta di servizio: stampa documenti per te, non devi farlo tu stesso. Se fornisci alla stampante le informazioni necessarie (i parametri), la stampante farà felicemente il suo lavoro.
La stampante non sa quali dati riceverà, altrimenti non avrebbe bisogno di un parametro. Il parametro è lo "sconosciuto" necessario per eseguire il servizio.
def my_function(a, b):
pass
Questo fornisce un servizio (o una funzione) che richiede due informazioni da te. Una volta che ha questa informazione, deve essere in grado di riferirsi ad essa in qualche modo . La notazione (a, b)
significa semplicemente che qualunque cosa tu gli dai come prima "informazione", sarà accessibile dal nome a
e quello che passi secondo sarà accessibile dal nome b
.
Quando si chiama effettivamente la funzione (ad esempio, indica alla stampante di stampare effettivamente qualcosa), è necessario riempire queste lacune di conoscenza in questo modo:
my_function(data_that_i_know, other_data_that_i_know)
Le tue domande
How does the function buildConnectionString with the argument (params) know to get it's data from the variable myParams?
Non è così. La mia stampante sa che sto per stampare un documento relativo alla programmazione di domani? No. Domani invierò le informazioni alla mia stampante, che stamperà felicemente. La stampante non sa nemmeno che esisto.
Allo stesso modo, "invia" (passa) i dati ( myParams
) alla tua funzione con la seguente espressione:
buildConnectionString(myParams)
In qualche altro punto del tuo programma, potresti voler eseguire la tua funzione con dati diversi. Simile alla stampante, la funzione non sa chi la chiamerà, o quando verrà chiamata, o con quali dati verrà chiamata.
Or params.items(), too within the return line?
La funzione, una volta eseguita, ha ricevuto alcuni dati in modo che possa svolgere il proprio lavoro. Questo eseguirà una funzione chiamata items()
su qualunque funzione sia stata assegnata alla funzione.
Una funzione di esempio
Voglio creare il mio servizio, che può calcolare il quadrato di un numero. Ciò implica che è necessario fornire un numero per poter funzionare. Dopotutto, non puoi quadrare nulla, vero?
La funzione non sa, quale numero sarà dato. Tuttavia, per essere in grado di moltiplicare questo numero, dobbiamo essere in grado di fare riferimento ad esso in qualche modo, quindi, gli diamo un nome: x
.
def square(x):
return x * x
Definisce una funzione chiamata square a cui deve essere assegnato un pezzo di dati (il x
).
Ora posso usare questa funzione per quadrare un numero:
>>> print square(2) # "Please square this number 2 for me"
4
All'interno della funzione, x
ora si riferisce al valore 2
.
Ma avrei anche potuto chiamare la funzione con il numero 3:
>>> print square(3) # "Please square this number 2 for me"
9
Avrei potuto scegliere il nome two
invece di x
per la mia funzione. Ma questo sarebbe fuorviante: il valore non deve essere 2
, può essere qualunque cosa io desideri che sia.
And is there a reason behind not naming your variable params, or vice
versa naming your argument in your function myParams?
I nomi nella programmazione possono essere scelti arbitrariamente, a condizione che non siano riservati dalla lingua (sono chiamati parole chiave).
Solitamente, nominerai le tue variabili in qualunque senso abbia senso in quel contesto. Ad esempio, nel codice relativo agli oggetti geometrici, la mia variabile locale può essere denominata area
che verrà quindi quadrata utilizzando la funzione square()
. Nel codice di un'auto, potrei avere una variabile denominata weight
nell'altra mano. Sono sicuro che sarai d'accordo che posso chiamare square con square(weight)
e square(area)
trasmette un sacco di informazioni.
Ora modificheresti il parametro square
da x
a weight_or_area
? Spero che non lo faresti. Cosa succede se dovessi utilizzare la funzione in relazione a length
s? Dovrai abituarti al fatto che i parametri e gli argomenti delle funzioni sono di solito denominati in modo diverso, ovvero Good Thing® .
It's just been
extremely confusing seeing the argument set as one word, and then
having the variable named something completely different, but having
the function still be able to read your code, even when the argument
name is different from your variable with the data you're printing
from.
È importante capire che la funzione non legge il tuo codice. Non ha idea nemmeno esiste. Questo ci riporta all'analogia della stampante: sa che tu o io esistiamo? No, è lì per svolgere un lavoro, senza fare domande. La stessa cosa vale per le funzioni: sono lì per fare le nostre offerte. Non agiscono da soli e "leggono il codice" per vedere dove sono referenziati.