La compréhension de repr( ) fonction en Python
repr()
: evaluatable représentation sous forme de chaîne d'un objet ("eval()"
c'est à dire qu'il est une représentation de chaîne qui donne un Python
objet)
En d'autres termes:
>>> x = 'foo'
>>> repr(x)
"'foo'"
Questions:
- Pourquoi dois-je obtenir les guillemets quand je fais
repr(x)
? (Je n'arrive pas à les obtenir
quand je faisstr(x)
) - Pourquoi puis-je obtenir
'foo'
quand je faiseval("'foo'")
et pas de x qui est la
objet?
- vous offrir un très bel exemple de la réelle/le comportement attendu pour 1, mais vous n'avez pas de 3. qu'est-ce que la façon dont vous serais "comme de le voir?"
- S'il vous plaît, des précisions sur la 3d de la question. C'est une bonne idée de donner quelques exemples. Maintenant, il n'est pas clair ce que vous voulez atteindre.
- J'ai posté une nouvelle question nouveau sujet. Ne sais pas pourquoi mais je ne pouvais pas éditer ce post pour entrer dans le code. Merci pour m'avoir aidé.
- J'ai enlevé la 3ème question et une nouvelle marque qui inclut le code aussi.
- Lien?
Vous devez vous connecter pour publier un commentaire.
De sorte que le nom
x
est attaché à'foo'
chaîne. Lorsque vous appelez par exemplerepr(x)
l'interprète met'foo'
au lieu dex
et appelle ensuiterepr('foo')
.repr
appelle en fait une méthode magique__repr__
dex
, ce qui donne à la chaîne contenant la représentation de la valeur'foo'
attribué àx
. On en revient donc'foo'
à l'intérieur de la chaîne de""
résultant dans"'foo'"
. L'idée derepr
est de donner une chaîne de caractères qui contient une série de symboles qui nous taper dans l'interprète et obtenir la même valeur qui a été envoyé comme un argument derepr
.Lorsque nous appelons
eval("'foo'")
, c'est la même chose que nous type'foo'
dans l'interpréteur. C'est comme nous taper directement le contenu de l'extérieur, chaîne de""
dans l'interpréteur.Si nous appelons
eval('foo')
, c'est la même chose que nous typefoo
dans l'interpréteur. Mais il n'y a pas defoo
variable disponible et une exception est levée.str
est juste la représentation de chaîne de l'objet (rappelez-vous,x
variable se réfère à'foo'
), de sorte que cette fonction retourne la chaîne.Représentation de chaîne de caractères entier
5
est'5'
.Et représentation de chaîne de caractères chaîne de
'foo'
est la même chaîne'foo'
.La rétroaction que vous obtenez sur le interactives interprète utilise
repr
trop. Lorsque vous tapez une expression (que ce soitexpr
), l'interprète ne faitresult = expr; if result is not None: print repr(result)
. La seconde ligne dans votre exemple est le formatage de la chaînefoo
dans la représentation que vous voulez ('foo'
). Et puis l'interprète crée larepr
esentation de que, vous laissant avec des guillemets doubles.Je ne suis pas sûr de ce que vous demandez ici. Le texte
single ' and double " quotes
, lorsqu'il est exécuté parrepr
, comprend échappe pour une sorte de citation. Bien sûr, il n', sinon cela ne serait pas la validité d'une chaîne littérale par Python règles. C'est précisément ce que vous avez demandé en appelantrepr
.Également de noter que la
eval(repr(x)) == x
analogie n'est pas littérale. C'est une estimation qui est vrai pour la plupart (tous?) types intégrés, mais la chose principale est que vous obtenez une assez bonne idée du type et de la logique de la "valeur" de la recherche à la larepr
de sortie.repr
devrait être quelque chose qui peut être transmis àeval
(ou de le copier et le coller dans votre code source) pour produire une valeur égale, ou quelque chose qui va soulever une SyntaxError si vous essayez, (généralement le<…>
style produit parobject.__repr__
). Qui a été progressivement atténué au fil des ans, et de 2,7 et 3.x c'est seulement vrai "pour de nombreux types", et il y a des exceptions, même dans la stdlib e.g,, unnamedtuple
type créé comme un local vous donnera unrepr
vous ne pouvez paseval
), mais c'était l'idée originale.1) Le résultat de
repr('foo')
est le chaîne'foo'
. Dans votre interface Python, le résultat de l'expression est exprimé comme une représentation trop, de sorte que vous êtes essentiellement de voirrepr(repr('foo'))
.2)
eval
calcule le résultat d'une expression. Le résultat est toujours une valeur (comme un nombre, une chaîne ou un objet). Plusieurs variables peuvent se référer à la même valeur, comme dans:x et y se réfère maintenant à la même valeur.
3) je n'ai aucune idée de ce que vous voulez dire ici. Pouvez-vous poster un exemple, et ce que vous aimeriez voir?
Quand vous dites
vous n'êtes pas en passant
foo
à labaz
fonction.foo
est juste un nom utilisé pour représenter une valeur, dans ce cas'bar'
, et que la valeur est passée à labaz
fonction.str() est utilisé pour la création de la sortie pour l'utilisateur final tout en repr() est utilisée pour debuggin développement.Et c'est de représenter les officiels de l'objet.
Exemple:
De sortie, nous voyons que repr() montre la représentation officielle de l'objet date.