Indexation des arguments de mots clés à l'aide d'une chaîne en Python
-
26-12-2019 - |
Question
Je suis confus avec la déclaration " print(kw,":",mots-clés[kw])" dans le programme suivant, en python.
def cheeseshop(kind,*arguments,**keywords):
print("--Do you have any",kind,"?")
print("--I'm sorry, we're all out of",kind)
for arg in arguments:
print(arg)
print("-"*40)
print(keywords)
keys=sorted(keywords)
print(keys)
for kw in keys:
print(kw,":",keywords[kw])
cheeseshop("Limburger", "It's very runny, sir.",
"It's really very, VERY runny, sir.",
shopkeeper="Michael Palin",
client="John Cleese",
sketch="Cheese Shop Sketch")
Le résultat est ci-dessous :
--Do you have any Limburger ?
--I'm sorry, we're all out of Limburger
It's very runny, sir.
It's really very, VERY runny, sir.
----------------------------------------
{'client': 'John Cleese', 'sketch': 'Cheese Shop Sketch', 'shopkeeper': 'Michael Palin'}
['client', 'shopkeeper', 'sketch']
client : John Cleese
shopkeeper : Michael Palin
sketch : Cheese Shop Sketch
Dans mon idée, "kw" devrait être 'client', 'croquis' et 'commerçant', pas des nombres, alors comment "kw" peut-il être l'index des mots-clés dans la déclaration " print(kw,":",mots-clés[kw])"?
Pour vérifier mon idée, j'ai également essayé un autre programme :
letters=['a','b']
for kw in letters:
print(letters[kw])
Et une réponse raisonnable apparaît :
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
TypeError: list indices must be integers, not str
Cela me rend en outre confus quant au problème que j'ai rencontré dans le premier morceau de programme. Je pense que cela devrait me faire apparaître la même erreur.
La solution
Arguments de fonction précédés de **
sont appelés « arguments de mot-clé », qui prennent des paramètres nommés lors de l'appel de la fonction, par exemple : client="John Cleese"
dans votre exemple.Dans ce cas, « client » est le nom et « John Cleese » est la valeur.Les arguments transmis de cette façon sont placés dans un dict
, qui est un magasin de valeurs-clés plutôt qu'une liste, que vous connaissez peut-être sous la forme
x = {
"foo": "bar"
}
print x["foo"] # prints "bar"
Autres conseils
Il utilise les utilitaires de mots-clés, c'est une sorte de tableau avec un nom de clé.
Vous pouvez voir la description lib, dans la documentation Python ici
En fait, il existe une propriété particulière de ** arguments de mots-clés qui fournissent le droit de le faire.
ici est un didacticiel pour l'utiliser (et aussi pour la comprendre) et