2010-12-12 7 views
2

Lorsque vous utilisez l'initialisation dict style kwarg:Y a-t-il des kwargs réservés pour le constructeur dict de python?

In [3]: dict(a=1, b=2, c=3) 
Out[3]: {'a': 1, 'b': 2, 'c': 3} 

pour une raison quelconque, la définition de la clé « de » soulève une erreur de syntaxe:

In [4]: dict(to=0, from=1) 
------------------------------------------------------------ 
    File "<ipython console>", line 1 
    dict(to=0, from=1) 
       ^
SyntaxError: invalid syntax 

Quelle est la particularité de la clé « de »? Y a-t-il d'autres clés réservées pour l'initialisation de style kwarg? Je utilise Python 2.6.

Répondre

5

from est utilisé dans les importations.

Python Language Reference, §2.3.1, "Keywords"

Notez que vous pouvez toujours utiliser l'expansion de kwarg pour traverser bien.

+2

Depuis "explicite est mieux que implicite";) Vous pouvez appeler une fonction qui accepte kwargs, et passer un kwarg avec une clé de ''de' ', comme ceci:' the_function (** {' from ':' un très endroit idiot '}) '. –

1

vous ne pouvez pas utiliser des mots-clés de python tels que from dans kwargs

2

de est un mot-clé:

from threading import Thread 

Python n'a pas des mots-clés contextuels: Un nom est soit un mot-clé, ou peut être utilisé comme identifiant. Il y avait une exception: "as" était spécial dans les instructions d'importation quand il a été introduit, mais a depuis été promu en "mot-clé complet".

Les mots clés sensibles au contexte seraient une fonctionnalité discutable. Par exemple. devrait

print=3 

travail ou l'échec (il pourrait être une déclaration d'impression syntaxiquement incorrecte ou une affectation à une variable d'impression du nom). Ou, qu'en est-il

def print(x): 
    print x 
print(3) 

Est-ce que cela devrait définir une fonction d'impression? Si oui, la dernière ligne est-elle un appel?

+0

Je réalise que 'from' est un mot-clé. Je suis surpris qu'il soit interprété comme tel dans une expression kwarg. Vous pourriez penser que l'analyseur serait assez intelligent pour connaître la différence dans ce contexte. – awesomo

+1

@awesomo, mot-clé signifie _always_ un mot-clé quel que soit le contexte –

+0

Voir mon edit: il y a une bonne raison pour que les mots-clés ne soient pas sensibles au contexte. –

3

from, comme une poignée d'autres jetons, sont des mots-clés/mots réservés en Python (from spécifiquement est utilisé lors de l'importation de quelques objets cueillies à la main à partir d'un module dans l'espace de noms en cours). Vous ne pouvez pas les utiliser comme identifiants ou quoi que ce soit (en fin de compte, kwargs sont des identifiants). Il est tout simplement interdit, même si en théorie, il peut être désambiguïsé, pour garder l'analyseur simple et les personnes qui écrivent l'analyseur sain d'esprit;)