当前位置: 首页 > 后端技术 > Python

Python值中的下划线是怎么回事?_0

时间:2023-03-26 16:50:43 Python

花猫语:Python中下划线的使用很神奇,相信大家在各种文章或者教程中都看到过。在2016年3.6版本之后,Python还引入了一种新的语法,允许下划线也出现在数值中。这份翻译文档将带您回顾该功能的介绍过程。PEP原文:https://www.python.org/dev/peps/pep-0515PEP标题:PEP515--数字文字中的下划线PEP作者:GuidovanRossum、NickCoghlan创建日期:GeorgBrandl、SerhiyStorchaka合并版本:3.6译者:PeaFlowerUndertheCat@Python猫PEP翻译计划:https://github.com/chinesehuazhou/peps-cn总结与原则本PEP提出扩展Python的语法,使得“字符串变成数字”时(数字-from-string)构造函数,下划线可以用作视觉分隔符来对整数、浮点数和复杂的文字数字进行分组。(Python猫注:对于Python的数值类型,可以查看PEP-3141)这是其他现代语言的共同特征,有助于理解长字面量或本应直观分成几部分的值,例如十六进制字节示例:#按千位分组十进制数=10_000_000.0#按单词分组十六进制地址addr=0xCAFE_F00D#将位分组为二进制文字中的半字节flags=0b_0011_1111_0100_1110#同样,对于字符串转换flags=int('0b_1111_2000',)规范目标前的建议数字文字中的数字之间和基本标识符之后允许使用下划线。下划线没有语义意义,并??且数字文字被解析为好像没有下划线一样。文字语法因此,整数文字的表示法如下所示:integer:decinteger|二进制整数|八进制|hexintegerdecinteger:nonzerodigit(["_"]数字)*|"0"(["_"]"0")*bininteger:"0"("b"|"B")(["_"]bindigit)+octinteger:"0"("o"|"O")(["_"]octdigit)+hexinteger:"0"("x"|"X")(["_"]hexdigit)+nonzerodigit:"1"..."9"digit:"0"..."9"二进制数:"0"|"1"octdigit:"0"..."7"hexdigit:digit|"a"..."f"|"A"..."F"浮点数和复数文字:floatnumber:pointfloat|exponentfloatpointfloat:[digitpart]分数|digitpart"."exponentfloat:(digitpart|pointfloat)exponentdigitpart:digit(["_"]digit)*fraction:"."digitpartexponent:("e"|"E")["+"|"-"]digitpartimagnumber:(floatnumber|digitpart)("j"|"J")构造函数遵循相同的放置规则,下划线可以用在以下构造函数中:int()(anybase)float()complex()更进一步更改为Decimal()较新的数字到字符串格式化语法将被扩展以允许_作为千位分隔符。这允许使用更易读的文字更轻松地生成代码。[11]语法与逗号相同,例如{:10_}表示宽度为10,带有_分隔符。也将支持并按4位数字分组。允许对下划线进行分组的现有语言实现了大量放置下划线的规则。在语言规范与实际行为相矛盾的情况下,下面列出了实际行为。(“单个”或“多个”是指允许有多少个连续的下划线。)Ada:单个,仅在数字之间[[8]](https://www.python.org/dev/pe...C#(7.0版提案):多个,仅在数字之间[[6]](https://www.python.org/dev/pe...C++14:单个,数字之间(选择其他分隔符)[[1]](https://www.python.org/dev/pe...D:多个,任何地方,包括结尾[[2]](https://www.python.org/dev/pe...Java:多个,仅在数字[[7]](https://www.python.org/dev/pe...Julia:单个,仅在数字之间(但不是浮点指数部分)[[9]](https://www.python.org/dev/pe...Perl5:多个,基本上在任何地方,尽管文档说在数字之间限制1个下划线[[3]](https://www.python.org/dev/pe...Ruby:单个,仅在数字之间(尽管文档说"anywhere")[[10]](https://www.python.org/dev/pe...Rust:多个,除了指数“e”之外的任何地方,数字在[[4]](https://www.python.org/dev/pe...Swift:多个,数字之间和末尾(尽管文档只说“数字”之间)[[5]](https://www.python.org/dev/pe...Deprecatedsyntax(PythonCat注:每个PEP在proposal初期可能会引起很多关于语法设计的讨论,在正式采用的PEP中,一般会保留一些有代表性的被拒绝的方案,比如如以下两项)1.下划线放置规则减少了对下划线使用的限制,而不是上面说的相对严格的规则。在其他语言中,常见的规则包括:只允许有一个连续的下划线,并且只能在数字之间。允许有多个连续的下划线,但只能在数字之间。允许有多个连续的下划线,并且在大多数位置,除了在文字的开头,或者在特殊位置(例如小数点之后)。最终选择此PEP中的语法是因为它涵盖了常见的用例,并且没有Python风格指南不鼓励使用的语法。一个非常普遍的规则是只允许每N个数字使用下划线(其中N可能是3个十进制文字,或4个十六进制文字)。这是不必要的限制,特别是考虑到这些分隔符位置在不同文化中是不同的。(蟒猫注:比如我们国家习惯对4个数字进行分组,即10000就是10000,不是英文文化中的10000)2、其他分隔符的另一个建议是使用空格进行分组。虽然字符串是组合相邻文字的先例,但这种行为可能会导致下划线不会产生的意外效果。此外,除了那些基本上忽略任何空格的语言外,没有其他语言使用此规则。c++14引入了单引号用于分组(因为下划线与用户定义的文字会产生歧义),由于单引号已经被Python的字符串文字使用,因此不予考虑。[1]实施上述规范的初步补丁已发布到问题跟踪器。[[12]](https://www.python.org/dev/pe...参考内容[1](1,2)http://www.open-std.org/jtc1/...[2]https://dlang.org/spec/lex.ht...[3]https://perldoc.perl.org/perl...[4]https://web.archive.org/web/2...[5]https://docs.swift.org/swift-...[6]https://github.com/dotnet/ros...[7]https://docs.oracle。com/javas...[8]http://archive.adaic.com/stan...[9]https://web.archive.org/web/2...[10]https://ruby-doc.org/core-2.3...[11]https://mail.python.org/piper...[12]http://bugs.python.org/issue2...版权进入公有领域.源文件:https://github.com/python/pep...