Plus tôt aujourd'hui, j'ai demandé à un question de transmettre des valeurs de dictionnaire à une fonction. Bien que je comprenne maintenant comment accomplir ce que j'essayais d'accomplir, la question pourquoi (qui n'a pas été posée) n'a jamais été résolue. Donc, mon suivi est pourquoi je ne peuxPourquoi ne puis-je pas transmettre une référence directe à une valeur de dictionnaire à une fonction?
def myFunction(newDict['bubba']):
some code to process the parameter
Est-ce simplement parce que les règles de l'analyseur ne permettent pas? J'ai recherché sur Google + Python + fonction + "paramètres permis" et n'ai rien trouvé d'utile donc j'apprécierais n'importe quelle information.
Je simplifie à l'excès ce qui se passe. J'ai un dictionnaire qui est structuré comme
myDict={outerkey1:(innerkey1:value,innerkey2:value,. . .innerkeyn:value),outerkey2:(innerkey1:value,innerkey2:value,. . .innerkeyn:value),. . .}
Comme je l'ai dit, je sais comment faire ce que je voulais-je obtenu une réponse très utile. Mais je commençais à me demander pourquoi
def myFunction(outerkey,myDict[outerkey]):
donne une erreur de syntaxe qui finement me est apparu que ce doit être un problème d'analyse syntaxique.
Merci, cela donnera une lecture intéressante plus tard. – PyNEwbie
newDict ['bubba'] n'est pas un identifiant valide Je suppose que l'apprentissage de la lecture de la grammaire aidera à comprendre cela. Quand j'ai commencé cette ligne, j'ai décidé que ça devrait marcher parce que quand la fonction est appelée, newDict ['bubba'] fait référence à la chose sur laquelle je voulais que la fonction agisse. La solution était d'utiliser ** devant la référence dans l'appel et d'utiliser ** devant un nom dans la définition comme d'autres l'ont décrit mais je n'ai pas compris (et je ne fais maintenant que superficiellement) jusqu'à ce que répondre. J'espère que quand je m'ennuierai et que je lirai la grammaire, j'apprendrai encore plus merci – PyNEwbie
En Python, les identifiants (noms d'objets) ne peuvent contenir que des lettres, des chiffres et des traits de soulignement. Si la grammaire devait permettre 'newDict ['bubba']' comme un symbole qui nomme un objet, il aurait du mal à faire la différence entre les symboles qui nomment les objets et l'opération d'indice sur les listes/dictionnaires. De plus, si vous pouviez utiliser 'newDict ['bubba']' comme identificateur, cela créerait de la confusion, car 'newDict' n'est pas un identifiant valide, même s'il semble que vous puissiez y indexer quelque chose. – cdleary