为什么Python sys.version\u info缺少要转换为dict的asdict()方法?
sys.version\u info是否有一些独特之处,即它没有返回正确的名称双倍,并且没有为什么Python sys.version\u info缺少要转换为dict的asdict()方法?,python,python-typing,Python,Python Typing,sys.version\u info是否有一些独特之处,即它没有返回正确的名称双倍,并且没有\u asdict功能 sss = sys.version_info._asdict AttributeError: 'sys.version_info' object has no attribute '_asdict' [Finished in 0.7s with exit code 1] 很有趣,所以我实际上挖得更深。正如评论中提到的,sys.version\u info是一个定制的元组子类,不要
\u asdict
功能
sss = sys.version_info._asdict
AttributeError: 'sys.version_info' object has no attribute '_asdict'
[Finished in 0.7s with exit code 1]
很有趣,所以我实际上挖得更深。正如评论中提到的,
sys.version\u info
是一个定制的元组子类,不要被docstring
混淆,有趣的是,它实际上表示它是一个命名元组,尽管它们可能指的是print
字符串格式
print(sys.version_info.__doc__)
sys.version_info
Version information as a named tuple.
您还将意识到,如果您运行返回其方法的dir(sys.version\u info)
,\u asdict
或dict
不是它的一部分,因此在没有\u asdict
作为属性的情况下返回错误
根据文件本身
包含版本号的五个组件的元组:major,
次要、微量、释放级和系列。除releaselevel之外的所有值
是整数;发布级别为“alpha”、“beta”、“候选者”或
“决赛”。对应于Python版本的version\u info值
2.0是(2,0,0,'最终',0)。组件也可以通过名称访问,因此sys.version\u info[0]相当于sys.version\u info.major
等等
由于组件是静态的,并且如文档中所述,因此始终可以通过名称或其固定索引访问组件
如果你真的想要一本字典:
comp = 'major minor micro releaselevel serial'.split()
svi_dic ={k:v for (k,v) in zip(comp,sys.version_info)}
svi_dic
{'major': 3, 'minor': 6, 'micro': 6, 'releaselevel': 'final', 'serial': 0}
它似乎是多余的,因为您也可以轻松地执行
sys.version\u info.major
等操作。希望这有助于您理解。很有趣,所以我实际上更深入了。正如评论中提到的,sys.version\u info
是一个定制的元组子类,不要被docstring
混淆,有趣的是,它实际上表示它是一个命名元组,尽管它们可能指的是print
字符串格式
print(sys.version_info.__doc__)
sys.version_info
Version information as a named tuple.
您还将意识到,如果您运行返回其方法的dir(sys.version\u info)
,\u asdict
或dict
不是它的一部分,因此在没有\u asdict
作为属性的情况下返回错误
根据文件本身
包含版本号的五个组件的元组:major,
次要、微量、释放级和系列。除releaselevel之外的所有值
是整数;发布级别为“alpha”、“beta”、“候选者”或
“决赛”。对应于Python版本的version\u info值
2.0是(2,0,0,'最终',0)。组件也可以通过名称访问,因此sys.version\u info[0]相当于sys.version\u info.major
等等
由于组件是静态的,并且如文档中所述,因此始终可以通过名称或其固定索引访问组件
如果你真的想要一本字典:
comp = 'major minor micro releaselevel serial'.split()
svi_dic ={k:v for (k,v) in zip(comp,sys.version_info)}
svi_dic
{'major': 3, 'minor': 6, 'micro': 6, 'releaselevel': 'final', 'serial': 0}
它似乎是多余的,因为您也可以轻松地执行
sys.version\u info.major
等操作。希望这能帮助您理解。版本信息
不是很好的命名倍数(尽管有docstring)
(下面假设cpython实现细节,它可能适用于也可能不适用于替代实现,例如pypy
/jython
)
它是用C语言实现的,C语言是一种StructSequence
。从:
从文件中可以看出:
namedtuple()对象的C等价物,即其项也可以通过属性访问的序列。要创建结构序列,首先必须创建特定的结构序列类型
也就是说,它类似于名为tuple的,但不同。值得注意的是,它似乎缺少了\u replace
,\u asdict
,\u fields
,以及\u fields\u defaults
API。版本信息
并不是一个很好的命名倍数
(尽管有docstring)
(下面假设cpython实现细节,它可能适用于也可能不适用于替代实现,例如pypy
/jython
)
它是用C语言实现的,C语言是一种StructSequence
。从:
从文件中可以看出:
namedtuple()对象的C等价物,即其项也可以通过属性访问的序列。要创建结构序列,首先必须创建特定的结构序列类型
也就是说,它类似于名为tuple的,但不同。值得注意的是,它似乎缺少了\u replace
,\u asdict
,\u fields
,以及\u fields\u defaults
API。@juanpa.arrivillaga哇!很抱歉,它不是名为tuple的,您是否尝试检查类型(sys.version\u info)
?无论如何,它是一个定制的tuple
子类,不是使用namedtuple
类工厂生成的。@juanpa.arrivillaga哇!很抱歉,它不是名为tuple的,您是否尝试检查类型(sys.version\u info)
?无论如何,它是一个定制的tuple
子类,不是使用namedtuple
类工厂生成的。