加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

使用十六进制,八进制或二进制整数作为Python的str.format()方法

发布时间:2020-12-16 21:47:12 所属栏目:Python 来源:网络整理
导读:简单使用Python的str.format()方法: '{0}'.format('zero')'zero' 十六进制,八进制和二进制文字不起作用: '{0x0}'.format('zero')KeyError: '0x0' '{0o0}'.format('zero')KeyError: '0o0' '{0b0}'.format('zero')KeyError: '0b0' 但是,根据replacement fiel

简单使用Python的str.format()方法:

>>> '{0}'.format('zero')
'zero'

十六进制,八进制和二进制文字不起作用:

>>> '{0x0}'.format('zero')
KeyError: '0x0'
>>> '{0o0}'.format('zero')
KeyError: '0o0'
>>> '{0b0}'.format('zero')
KeyError: '0b0'

但是,根据replacement field grammar,他们应该:

06002

integer grammar如下:

06003

我是否误解了文档,或者Python的行为不像宣传的那样? (我使用的是Python 2.7.)

最佳答案
这看起来像语法中的错误.文本没有什么可澄清的;它只是将其描述为“一个数字或一个标识符”,并讨论如何解释一个数字.

测试它,该字段显然不被视为整数:

>>> '{08}'.format(*range(10)) # should be SyntaxError
'8'
>>> '{010}'.format(*range(10)) # should be '8'
'10'
>>> '{-1}'.format(*range(10)) # should be '9',but looked up as a string
KeyError: '-1'
>>> '{1 }'.format(*range(10)) # should be '1',but looked up as a string
KeyError: '1 '
>>> '{10000000000000000000}'.format(1) # should be IndexError
ValueError: Too many decimal digits in format string

查看代码,它不会从Python解析器借用来解析格式字符串;它使用自定义解析,并且将arg_spec解释为数字的代码使用get_integer函数,该函数仅转换每个数字并移位和添加,直到字段结束或我们得到PY_SSIZE_T_MAX的数字.

PEP 3101表明这是故意的:

Simple field names are either names or numbers. If numbers,they must be valid base-10 integers?…

它没有具体说它不能太接近最大指数值,也不能说不能使用负指数.但是大多数其他怪癖可以通过使用“有效的基数10整数”描述而不仅仅是“整数”来解释.事实上,只是将其描述为数字而不是整数将解决所有的怪癖.

element_index的解析方式与arg_name完全相同. #8985故意说element_index“…对整数索引使用最窄的可能定义,以便将所有其他字符串传递给映射.”对于arg_name是否也是故意的,或者是否是使用相同代码的意外后果,我不确定.

文档在3.4中保持不变,并且代码在current trunk中实际上没有变化.

我建议搜索bug tracker和python-dev档案,看看之前是否已经提出过.如果没有,请确定您是否认为应该更改文档或代码,提交错误,并理想地提交补丁.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读