Int - это не ключевое слово. Что произойдет, если мы будем использовать его как переменную? - PullRequest
0 голосов
/ 23 апреля 2020

Int не является ключевым словом в python и, следовательно, может использоваться как имя переменной. Я попытался присвоить имя имени, и оно сработало.

Я сделал это в IDLE Python3 .8.2

>>> a = int(4.5)
>>> print(a)
4
>>> int = 'abc'
>>> print(int)
abc
>>> b = int(5.7)
Traceback (most recent call last):
  File "<pyshell#4>", line 1, in <module>
    b = int(5.7)
TypeError: 'str' object is not callable
>>> print(b)

, код работает без последней части. ie из b = int (5.7)

Почему это происходит? и не должно ли int быть ключевым словом? как мы можем исправить это, сохранив существующий код без изменений, как если бы он работал в консоли?

Я попытался использовать ключевое слово del, и это сработало. но я не знаю почему.

>>> del int
>>> b = int(5.7)
>>> print(b)
5

Это работает.

Пожалуйста, объясните. :)

1 Ответ

4 голосов
/ 23 апреля 2020

Ни один из базовых c типов не является ключевыми словами, они являются объектами типов

>>> type(int)
<class 'type'>

и они создают экземпляры своего класса при использовании

>>> type(int('100'))
<class 'int'>

Они работают как классы, которые вы определите себя

>>> class Foo:
...     pass
... 
>>> type(Foo)
<class 'type'>
>>> type(Foo())
<class '__main__.Foo'>

Единственное отличие состоит в том, что они находятся в пространстве имен встроенных, но из-за правила области видимости python встроенные проверяются последними. Любая создаваемая вами переменная находится в пространстве имен, проверяемом перед встроенными функциями, поэтому затеняет само встроенное.

Что касается того, почему почти все в python является объектом первого класса, и все они следуют одним и тем же правилам. Не существует специального кода или каких-либо специальных правил для int (кроме его реализации) - он работает так же, как и любой другой класс.

Пространства имен являются иерархическими, в основном встроенными -> модуль -> локальное значение тот локальный модуль теней, который строит тени. del удаляет переменную из пространства имен, удаляя эту тень. Если вы создадите переменную с именем int, а затем del int, python больше не найдет ее в локальном пространстве имен и вернется к оригиналу.

Конечно, вы всегда можете испортить ситуацию на более постоянной основе, если вы будете sh:

>>> __builtins__.__dict__['int'] = float
>>> int(1)
1.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...