2015-08-26 4 views
0

В Python 2.7.10, sys.version_info из sys модуля:Кортеж с именованными элементами

sys.version_info(major=2, minor=7, micro=10, releaselevel='final', serial=0) 

Какой питон это? Это, кажется, какой-то кортеж названными элементами, и вы можете обратиться либо к

sys.version_info[0] 

или

sys_version_info.major 

команда возвращает тип

<type 'sys.version_info'> 

что несколько бесполезен. Я знаю, что это не именованный кортеж, и это не простой кортеж, но что это? Как построить такой элемент?

+0

Pl легко разъяснить - вы уже знаете о коллекциях.Необходимо уже знать и знать, что такое sys.version_info, и как оно отличается от коллекций.namedtuple? – Hammerite

+0

Это [встроенный тип] (https://github.com/python/cpython/blob/9907203a7b805630b1fe69e770164449b5d53cff/Python/sysmodule.c#L1551), я не думаю, что вы можете создавать собственные экземпляры. – bereal

+0

Мне не удалось найти описание того, что этот объект находится в документации 2.7 для sys.version_info. Я был озадачен тем, как кортеж мог назвать элементы, и спрашивал, как сделать кортеж таким образом. Теперь я знаю, что это встроенный тип, есть ли название для такого рода вещей? – andro

ответ

4

sys.version_info - фактически объект структуры C, определенный в structseq.c. Как комментарий в верхней части этого кода указывает на то, что это в первую очередь предназначено в качестве инструмента реализации для модулей:

/* Implementation helper: a struct that looks like a tuple. See timemodule 
    and posixmodule for example uses. */ 

Если вы хотите подобный объект Python, это немного похоже на collections.namedtuple. На самом деле документ строка для sys.version_info использует «под названием» кортеж для описания объекта:

>>> print sys.version_info.__doc__ 
sys.version_info 

Version information as a named tuple. 

В качестве альтернативы, вы можете быть в состоянии использовать объект structseq непосредственно на уровне C с Python C API.

1

Согласно документации модуля SYS:

Статические объекты:

[...]

version_info - информация о версии в качестве имени кортежа

[. ..]

+0

Я упомянул 2.7 в своем посте. В документе 2.7 только: Изменено в версии 2.7: Добавлены атрибуты именованных компонентов Нет упоминания названных кортежей. – andro

Смежные вопросы