00:00Cette vidéo va parler de la nouvelle fonctionnalité des arguments positionnels uniquement. Je vais vous faire commencer par un exemple. Je veux commencer cette vidéo en parlant d’une fonction intégrée nommée float().

00:09float() peut être utilisée pour convertir des chaînes de texte ou des nombres en objets float, comme ceci. Si vous faites apparaître la fonction help() sur la fonction intégrée float, si vous regardez la signature de float juste ici, vous remarquerez qu’il y a une barre oblique (/) après le paramètre. Qu’est-ce que cela signifie ? Eh bien, il s’avère qu’il y a un paramètre de float() et il s’appelle x, et vous n’êtes pas autorisé à utiliser le nom du paramètre lorsque vous l’appelez. Lorsque vous utilisez float(), vous êtes autorisé à spécifier des arguments uniquement par position, et non par un mot-clé. Laissez-moi vous montrer ce que je veux dire. Donc, encore une fois, remarquez la barre oblique (/) ici. En appuyant sur q pour sortir de help(). Donc, si vous essayez float() à nouveau et dites x="3.8"-une chaîne de texte-vous verrez ici que ça dit float() takes no keyword arguments, seulement cet argument positionnel.

00:53Vous ne pouvez pas utiliser un mot-clé lorsque vous spécifiez l’argument. Avant Python 3.8, il n’y avait pas de moyen facile de spécifier que les arguments devaient être uniquement positionnels dans vos propres fonctions. Donc, si vous deviez définir quelque chose comme cette fonction – nous l’appellerons incr() (incrément).

01:10Lorsque vous appelez incr(), et disons que vous lui donnez un float, vous pourriez utiliser l’une ou l’autre méthode, et c’est normal pour un argument régulier. Et c’est là que le changement intervient dans Python 3.8.

01:24Vous pourriez réécrire la fonction d’incrémentation incr() pour accepter des arguments uniquement positionnels. Cela ressemblerait plus à ceci, avec une virgule (,) puis une barre oblique (/), et le reste est identique.

01:40Donc, lorsque vous appelez incr(), cela fonctionne bien. Mais si vous deviez maintenant utiliser le mot-clé, quelque chose de nouveau se produit. Il est dit ici incr() got some positional-only arguments passed as keyword arguments.

01:55So cela va lever une exception et vous donner un TypeError. Vous pouvez utiliser cela presque comme un séparateur entre vos arguments positionnels seulement et les arguments réguliers. Laissez-moi vous faire essayer cela avec un autre exemple.

02:07Définissez une nouvelle fonction nommée greet(). greet() va prendre un name comme argument positionnel seulement, puis vous allez mettre cette barre oblique (/) pour pouvoir combiner des arguments positionnels seulement avec des arguments réguliers. Donc voici un argument régulier d’un greeting.

02:23Ici vous allez retourner une chaîne f avec le greeting. Si vous n’avez pas encore travaillé avec des chaînes f, j’inclurai un lien dans le texte ci-dessous vers des articles et des cours sur le sujet.

02:31Comma, espace, le name. Donc, quand vous appelez greet() – encore une fois, le greeting par défaut sera "Hello".

02:37Vous allez entrer le name ici comme un positionnel-seulement.

02:43Génial. Vous pourriez aussi appeler greet()

02:49et lui donner un greeting.

02:55Mais ce que vous ne pouvez pas faire – ou ce qui vous donnera une erreur – c’est que si vous tapez name,

03:08ici vous aurez une exception d’un TypeError. Encore une fois, tout comme sur le précédent pour incr(), greet() a obtenu quelques arguments positionnels seulement passés comme arguments de mots-clés, spécifiquement name. À première vue, les arguments positionnels peuvent sembler un peu limitatifs et contraires au mantra de Python sur l’importance de la lisibilité.

03:26Vous trouverez probablement qu’il n’y a pas beaucoup d’occasions où les arguments positionnels seuls améliorent votre code. Cependant, dans les bonnes circonstances, cela peut vous donner une certaine flexibilité lorsque vous concevez des fonctions.

03:35Premièrement, les arguments positionnels seuls ont du sens lorsque vous avez des arguments qui ont un ordre naturel mais auxquels il est difficile de donner de bons noms descriptifs. Un autre avantage de l’utilisation des arguments positionnels seulement est que vous pouvez plus facilement refactorer vos fonctions – en particulier, vous pouvez changer le nom de vos paramètres sans vous inquiéter que d’autres codes dépendent de ces noms.

03:57Pour répéter cette information, comment spécifier les arguments positionnels seulement ? Vous utilisez la barre oblique (/) pour indiquer que les arguments qui la précèdent doivent être spécifiés par position. Pour en savoir plus sur la notation slash, le PEP 457 fournit une discussion approfondie à ce sujet. Le PEP 570 plonge beaucoup plus profondément dans les paramètres Python de type positionnel uniquement. Les liens vers les deux sont dans le texte sous cette vidéo.

04:20Le complément aux arguments positionnels uniquement serait les arguments à mots-clés uniquement, et ceux-ci sont disponibles dans n’importe quelle version de Python 3. Vous pouvez spécifier que vous voulez des arguments à mots-clés seulement en utilisant un astérisque (*).

04:31Tous les arguments après ce * doivent être spécifiés en utilisant un mot-clé. Voici un exemple de conversion en Fahrenheit, et vous pouvez voir ici qu’il a un argument à mot-clé seul de celsius.

04:46Laissez-moi vous faire essayer cette fonction. Donc ici, pour spécifier mot-clé-seulement, vous mettez un * et ensuite vous mettez l’argument mot-clé après – dans ce cas, celsius. Et dans ce cas, return

05:0232 + celsius * 9 / 5. Donc ici, si vous deviez appeler to_fahrenheit() et juste lui donner une valeur, disons 40 degrés Celsius, il est dit ici qu’il takes 0 positional arguments but 1 was given.

05:16Donc il a fallu que vous ayez un mot-clé là pour l’appeler correctement. Et aussi, selon les circonstances, vous pouvez vouloir combiner les arguments positionnels seulement, réguliers et les mots-clés seulement. Pour ce faire, vous les spécifieriez en les séparant par cette barre oblique (/) et l’astérisque (*).

05:35C’est donc quelque chose comme ça. Ici, un positionnel-only de text, la barre oblique (/). Ici, l’argument standard.

05:46Et maintenant, après le border, en utilisant le *, l’argument mot-clé-seulement de width, qui a une valeur par défaut de 50.

05:54Vous retournez une chaîne f avec un espace devant la valeur de l’argument text et ensuite un autre espace. Et puis vous utilisez la méthode de chaîne de texte de .center() avec deux paramètres que vous prenez de ces arguments, width et border.

06:08Le seul qui est positionnel est text. Vous pourriez commencer avec headline() et dire "Positional-only".

06:18Ici, vous pouvez voir la valeur par défaut qui sera ce type de bordure avec un width de 50, ressemblant à quelque chose comme ça. Encore une fois, puisque c’est positionnel seulement, si vous deviez lui donner text,

06:35cela soulèverait une erreur, un TypeError. Pour border, c’est un argument régulier. Donc dans ce cas, vous pourriez dire juste une valeur, disons comme, le signe égal ("=") à la place.

06:49Ou vous pourriez en fait spécifier que border est égal, disons, à un deux-points (:). Il acceptera l’un ou l’autre style. Mais le width doit être spécifié en utilisant un mot-clé si vous allez l’entrer…

07:07en remplaçant la valeur par défaut par une valeur de 38.

07:15Si vous deviez lui donner juste la valeur de 38, cela soulèverait à nouveau une exception, en obtenant un TypeError: headline() takes 1 to 2 positional arguments but 3 were given. Donc, encore une fois, celui-là doit être un argument de mot-clé.

07:29Donc, comme vous pouvez le voir, les arguments positionnels seulement peuvent compléter joliment les arguments réguliers et les arguments de mot-clé seulement. Dans la prochaine vidéo, vous apprendrez comment Python 3.8 améliore la vérification des types en utilisant des types plus précis.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.