00:00Questo video parlerà della nuova caratteristica degli argomenti di sola posizione. Vi farò iniziare con un esempio. Voglio iniziare questo video parlando di una funzione incorporata chiamata float()
.
00:09float()
può essere usata per convertire stringhe di testo o numeri in oggetti float
, come questo. Se portate la funzione help()
sulla funzione built-in float
, se guardate la firma per float
proprio qui, noterete che c’è una barra (/
) dopo il parametro. Cosa significa? Beh, risulta che c’è un parametro di float()
e si chiama x
, e non ti è permesso usare il nome del parametro quando lo chiami. Quando si usa float()
, è permesso specificare gli argomenti solo per posizione, non per parola chiave. Lasciate che vi mostri cosa intendo. Quindi di nuovo, notate la barra (/
) qui. Premendo q
si esce da help()
. Quindi se provate di nuovo float()
e dite x="3.8"
-una stringa di testo-vedrete qui che dice float() takes no keyword arguments
, solo questo argomento posizionale.
00:53Non potete usare una parola chiave quando specificate l’argomento. Prima di Python 3.8, non c’era un modo semplice per specificare che gli argomenti dovessero essere solo posizionali nelle vostre funzioni. Quindi, se voi doveste definire qualcosa come questa funzione – la chiameremo incr()
(incremento).
01:10Quando chiamate incr()
, e diciamo che gli date un float, potreste usare entrambi i metodi, e questo è normale per un argomento normale. Ed è qui che entra in gioco il cambiamento in Python 3.8.
01:24Si potrebbe riscrivere la funzione incremento incr()
per accettare argomenti di sola posizione. Sarebbe più simile a questo, con una virgola (,
) poi una barra (/
), e il resto è lo stesso.
01:40Quindi quando chiamate incr()
, funziona bene. Ma se ora si dovesse usare la parola chiave, succede qualcosa di nuovo. Qui dice incr() got some positional-only arguments passed as keyword arguments
.
01:55Quindi questo solleverà un’eccezione e vi darà un TypeError
. Potete usare questo quasi come un divisore tra i vostri argomenti di sola posizione e gli argomenti regolari. Lasciate che lo proviate con un altro esempio.
02:07Definite una nuova funzione chiamata greet()
. greet()
prenderà un name
come argomento di sola posizione, poi ci metterete quella barra (/
) in modo da poter combinare argomenti di sola posizione con argomenti regolari. Quindi ecco un argomento regolare di un greeting
.
02:23Qui restituirete una stringa f con il greeting
. Se non avete ancora lavorato con le stringhe f, includerò nel testo sottostante un link ad articoli e corsi su di esse.
02:31Comma, spazio, il name
. Così, quando chiami greet()
– di nuovo, il greeting
predefinito sarà "Hello"
.
02:37Inserirai il name
qui come una posizione-solo.
02:43Grande. Potreste anche chiamare greet()
02:49e dargli un greeting
.
02:55Ma quello che non potete fare – o che vi darà un errore – è se digitate name
,
03:08qui avrete un’eccezione di un TypeError
. Di nuovo, proprio come nel precedente per incr()
, greet()
ha alcuni argomenti solo posizionali passati come argomenti di parole chiave, in particolare name
. A prima vista, gli argomenti posizionali possono sembrare un po’ limitanti e contrari al mantra di Python sull’importanza della leggibilità.
03:26 Probabilmente troverete che non ci sono molte occasioni in cui gli argomenti solo posizionali migliorano il vostro codice. Tuttavia, nelle giuste circostanze, può darvi una certa flessibilità quando progettate le funzioni.
03:35In primo luogo, gli argomenti di sola posizione hanno senso quando avete argomenti che hanno un ordine naturale ma a cui è difficile dare buoni nomi descrittivi. Un altro vantaggio dell’uso di argomenti di sola posizione è che potete più facilmente rifattorizzare le vostre funzioni – in particolare, potete cambiare il nome dei vostri parametri senza preoccuparvi che altro codice dipenda da quei nomi.
03:57Per ripetere questa informazione, come si specificano gli argomenti di sola posizione? Si usa la barra (/
) per indicare che gli argomenti prima di essa devono essere specificati per posizione. Per saperne di più sulla notazione slash, PEP 457 fornisce una discussione approfondita al riguardo. PEP 570 si immerge molto più a fondo nei parametri Python di sola posizione. I link ad entrambi sono nel testo sotto questo video.
04:20Il complemento agli argomenti di sola posizione sarebbero gli argomenti di sola parola chiave, e questi sono disponibili in qualsiasi versione di Python 3. Potete specificare che volete argomenti solo parole chiave usando un asterisco (*
).
04:31Ogni argomento dopo quel *
deve essere specificato usando una parola chiave. Qui c’è un esempio di conversione in Fahrenheit, e potete vedere che ha un argomento di sola parola chiave celsius
.
04:46Lasciate che vi faccia provare questa funzione. Quindi qui, per specificare solo parole chiave, mettereste un *
e poi mettereste l’argomento parola chiave dopo – in questo caso, celsius
. E in questo caso, return
05:0232 + celsius * 9 / 5
. Quindi qui, se si dovesse chiamare to_fahrenheit()
e dargli solo un valore, diciamo 40
gradi Celsius, qui dice che takes 0 positional arguments but 1 was given
.
05:16Così è necessario avere una parola chiave per poterlo chiamare correttamente. Inoltre, a seconda delle circostanze, potreste voler combinare argomenti solo posizionali, regolari e solo parole chiave. Per farlo, dovreste specificarli separati dalla barra (/
) e dall’asterisco (*
).
05:35Così sarebbe qualcosa del genere. Qui, una posizione-solo di text
, la barra (/
). Qui, l’argomento standard.
05:46E ora, dopo il border
, usando il *
, l’argomento keyword-only di width
, che ha un valore predefinito di 50
.
05:54State restituendo una stringa f con uno spazio davanti al valore dell’argomento text
e poi un altro spazio. E poi stai usando il metodo text string di .center()
con due parametri che stai prendendo da quegli argomenti, width
e border
.
06:08L’unico che è posizionale è text
. Potreste iniziare con headline()
e dire "Positional-only"
.
06:18Qui, potete vedere il valore predefinito che sarà quel tipo di bordo con un width
di 50
, che sembra qualcosa del genere. Di nuovo, dato che è solo posizionale, se si dovesse dare text
,
06:35sarebbe un errore, un TypeError
. Per border
, è un argomento regolare. Quindi, in questo caso, potreste dire solo un valore, ad esempio, il segno di uguale ("="
) invece.
06:49Oppure potreste specificare che border
è uguale, ad esempio, a un due punti (:
). Accetterà entrambi gli stili. Ma il width
deve essere specificato usando una parola chiave, se avete intenzione di inserirlo…
07:07 sovrascrivendo il valore predefinito con un valore di 38
.
07:15Se doveste dare solo il valore di 38
, ciò solleverebbe nuovamente un’eccezione, ottenendo un TypeError: headline() takes 1 to 2 positional arguments
but 3 were given
. Quindi, ancora una volta, questo deve essere un argomento di parola chiave.
07:29Così, come potete vedere, gli argomenti di sola posizione possono integrare piacevolmente gli argomenti regolari e gli argomenti di sola parola chiave. Nel prossimo video, imparerete come Python 3.8 migliora il controllo dei tipi usando tipi più precisi.