Все случаи, когда идентификатор не связан с переменнойPython

Программы на Python
Anonymous
Все случаи, когда идентификатор не связан с переменной

Сообщение Anonymous »

Люди часто говорят, что термины «идентификатор» (или «имя») и «переменная» в Python являются синонимами (например, в https://nedbatchelder.com/text/names.html: «Имена — это переменные Python: они относятся к значениям, и эти значения могут меняться (варьироваться) в ходе вашей программы».) Но я просто вижу, что в официальной ссылке на Python говорится, что идентификатор — это конкретный токен, который описан здесь. И под термином «переменная» я понимаю именованную ссылку, т.е. как пару «идентификатор, ссылка на obj», где obj — это некоторый объект Python (так что фразы «переменная a, которая относится к obj", "пара, состоящая из идентификатора a и ссылки на obj", "идентификатор a, привязанный к obj" все эквивалентно).
Итак, я вижу как минимум 2 случая, когда идентификатор не связан с переменной.
  • Перед процессом имени привязки у нас есть только идентификаторы, но не переменные. Действительно, результатом токенизации является просто поток токенов. Это когда идентификаторы появляются, но ссылок и переменных здесь нет.
  • После процесса привязки имени некоторые идентификаторы не привязываются к объектам. По крайней мере, ключевые слова не привязаны к объектам (у них нет типа и значения). В документах говорится, что ключевые слова — это специальные идентификаторы, которые «нельзя использовать в качестве обычных идентификаторов». Однако они по-прежнему являются идентификаторами — по крайней мере, токенизатор Python присваивает им категорию «ИМЯ»: если мы создадим файл script.py со следующим кодом:

    Код: Выделить всё

     if True:
    a = 3
    
    тогда результат команды python -m tokenize script.py будет следующим (обратите внимание, что токены if, True и a получил ту же категорию «NAME», хотя только токен a является «обычным идентификатором», который позже будет привязан к переменной a, токенам if и True — ключевые слова):

    Код: Выделить всё

     1,0-1,2:        NAME    'if'
    1,3-1,7:        NAME    'True'
    1,7-1,8:        OP      ':'
    1,9-1,10:       NAME    'a'
    1,11-1,12:      OP      '='
    1,13-1,14:      NUMBER  '3'
    1,14-1,15:      NEWLINE '\n'
    2,0-2,0:        ENDMARKER       ''
    
Есть ли другие случаи, когда идентификатор не связан с переменной?

Подробнее здесь: https://stackoverflow.com/questions/790 ... a-variable

Вернуться в «Python»