Indexation des arguments de mots clés à l'aide d'une chaîne en Python

StackOverflow https://stackoverflow.com//questions/24056599

  •  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.

Était-ce utile?

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 ici est la question liée à Stackoverflow.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top