Соглашение об именах Python – namedtuples

Я новичок в Python, и я читал как онлайн-документацию, так и (пытается) следовать PEP 0008, чтобы иметь хороший стиль кода Python. Мне интересен сегмент кода, который я нашел в официальных документах Python, изучая библиотеку re:

import collections Token = collections.namedtuple('Token', ['typ', 'value', 'line', 'column']) 

Я не могу понять, почему переменная Token называется с заглавной буквой; Я прочитал PEP 0008, и для него нет ссылок на то, что я видел. Разве это не token или TOKEN если бы он был постоянным (что для всех, кого я знаю, это не так)?

2 Solutions collect form web for “Соглашение об именах Python – namedtuples”

В сегменте кода, который вы указали, Token является именованным кортежем , определенно не константой. Он не соответствует стилю именования имен имен других переменных, чтобы подчеркнуть тот факт, что это фабричная функция класса . Не будет предупреждения от проверки стиля PEP 0008 (например, PyCharm ), если вы напишете его как token но я думаю, что это не очень хорошая практика, так как это не отличает его как заводское имя класса.

Таким образом, namedtuples подпадают под имена классов в PEP 0008. Слишком плохо не указано более явно. Помимо примера, который вы упомянули для написания токенизатора , это также можно увидеть в примерах collections.namedtuple docs :

 Point = namedtuple('Point', ['x', 'y']) Point3D = namedtuple('Point3D', Point._fields + ('z',)) Book = namedtuple('Book', ['id', 'title', 'authors']) 

Ключ здесь – collections.namedtuple . Как говорится в документации,

collections.namedtuple(typename, field_names, verbose=False, rename=False)

Возвращает новый tuple именем typename . Новый подкласс используется для создания объектов, похожих на tuple которые имеют поля, доступные для поиска атрибутов, а также индексируемые и повторяемые. Экземпляры подкласса также имеют полезную docstring (с именами typename и field_names) и полезный __repr__() который перечисляет содержимое кортежа в формате name=value .

Нарушений PEP 8 нет; Token – это определяемый пользователем класс, и его имя капитализируется так, как должно.

  • Использование unittest.mock для исправления ввода () в Python 3
  • Функция ввода даты Python 3.2
  • байты против bytearray в Python 2.6 и 3
  • Объект 'super' не имеет атрибута '__getattr__' в python3
  • Переключение между python 2.7 и python 3.5 в Mac OS X
  • socket ResourceWarning с использованием urllib в Python 3
  • поддерживает nolearn / lasagne python 3
  • Невозможно установить lxml на windows, фатальная ошибка C1083: Не удается открыть файл include: 'libxml / xmlversion.h'
  • Python - лучший язык программирования в мире.