Python Language Accéder aux attributs des littéraux int


Exemple

Vous avez peut-être entendu dire que tout en Python est un objet, même littéral. Cela signifie, par exemple, que 7 est également un objet, ce qui signifie qu'il possède des attributs. Par exemple, l'un de ces attributs est la bit_length . Il renvoie la quantité de bits nécessaire pour représenter la valeur sur laquelle il est appelé.

x = 7
x.bit_length()
# Out: 3

En voyant le code ci-dessus fonctionner, vous pourriez penser intuitivement que 7.bit_length() fonctionnerait aussi bien, seulement pour découvrir qu'il soulève une SyntaxError . Pourquoi? car l'interpréteur doit différencier un accès d'attribut et un nombre flottant (par exemple 7.2 ou 7.bit_length() ). Ce n'est pas possible, et c'est pourquoi une exception est soulevée.

Il y a plusieurs façons d'accéder aux attributs d'un littéral int :

# parenthesis
(7).bit_length()
# a space
7 .bit_length()

L'utilisation de deux points (comme ce 7..bit_length() ) ne fonctionne pas dans ce cas, car cela crée un littéral float et les flottants n'ont pas la méthode bit_length() .

Ce problème n’existe pas lorsqu’on accède aux attributs des littéraux float car l’interperter est suffisamment «intelligent» pour savoir qu’un littéral float ne peut pas en contenir deux . , par exemple:

7.2.as_integer_ratio()
# Out: (8106479329266893, 1125899906842624)