成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Python 數(shù)值中的下劃線(xiàn)是怎么回事?

開(kāi)發(fā) 后端
Python 中下劃線(xiàn)的用法令人嘆為觀止,相信你已在各種文章或教程中見(jiàn)識(shí)過(guò)了。在 2016 年的 3.6 版本之后,Python 還引入了一種新的語(yǔ)法,使得下劃線(xiàn)也可以出現(xiàn)在數(shù)值中。這篇翻譯的文檔,將帶你重溫這個(gè)特性的引入過(guò)程。

[[414507]]

花下貓語(yǔ):Python 中下劃線(xiàn)的用法令人嘆為觀止,相信你已在各種文章或教程中見(jiàn)識(shí)過(guò)了。在 2016 年的 3.6 版本之后,Python 還引入了一種新的語(yǔ)法,使得下劃線(xiàn)也可以出現(xiàn)在數(shù)值中。這篇翻譯的文檔,將帶你重溫這個(gè)特性的引入過(guò)程。

概要和原理

本 PEP 提議擴(kuò)展 Python 的語(yǔ)法,使得在“字符串變成數(shù)”(number-from-string)構(gòu)造器中,下劃線(xiàn)可以作為視覺(jué)分隔符,對(duì)整數(shù)、浮點(diǎn)和復(fù)數(shù)字面量的數(shù)字進(jìn)行分組。

(Python貓注:關(guān)于 Python 的數(shù)值類(lèi)型,可以查看 PEP-3141)

這是其它現(xiàn)代語(yǔ)言的一個(gè)常見(jiàn)特性,有助于理解長(zhǎng)的或者值應(yīng)該被直觀地分成幾部分的字面量,如十六進(jìn)制表示法中的字節(jié)或單詞。

例子:

  1. grouping decimal numbers by thousands 
  2. amount = 10_000_000.0 
  3.  
  4. grouping hexadecimal addresses by words 
  5. addr = 0xCAFE_F00D 
  6.  
  7. grouping bits into nibbles in a binary literal 
  8. flags = 0b_0011_1111_0100_1110 
  9.  
  10. # same, for string conversions 
  11. flags = int('0b_1111_0000', 2) 

規(guī)范

目前的提議是在數(shù)字之間和在數(shù)字字面量的基本標(biāo)識(shí)符之后,允許有一個(gè)下劃線(xiàn)。下劃線(xiàn)沒(méi)有語(yǔ)義上的意義,數(shù)字字面量會(huì)被解析得就像沒(méi)有下劃線(xiàn)一樣。

字面量語(yǔ)法

因此,整型字面量的表示法看起來(lái)像這樣:

  1. integer: decinteger | bininteger | octinteger | hexinteger 
  2. decinteger: nonzerodigit (["_"] digit)* | "0" (["_""0")* 
  3. bininteger: "0" ("b" | "B") (["_"] bindigit)+ 
  4. octinteger: "0" ("o" | "O") (["_"] octdigit)+ 
  5. hexinteger: "0" ("x" | "X") (["_"] hexdigit)+ 
  6. nonzerodigit: "1"..."9" 
  7. digit: "0"..."9" 
  8. bindigit: "0" | "1" 
  9. octdigit: "0"..."7" 
  10. hexdigit: digit | "a"..."f" | "A"..."F" 

浮點(diǎn)數(shù)和復(fù)數(shù)的字面量:

  1. floatnumber: pointfloat | exponentfloat 
  2. pointfloat: [digitpart] fraction | digitpart "." 
  3. exponentfloat: (digitpart | pointfloat) exponent 
  4. digitpart: digit (["_"] digit)* 
  5. fraction: "." digitpart 
  6. exponent: ("e" | "E") ["+" | "-"] digitpart 
  7. imagnumber: (floatnumber | digitpart) ("j" | "J"

構(gòu)造函數(shù)

遵循相同的放置規(guī)則,下劃線(xiàn)可以在以下構(gòu)造函數(shù)中使用:

  • int()(任意進(jìn)制)
  • float()
  • complex()
  • Decimal()

進(jìn)一步的變更

新式的數(shù)字轉(zhuǎn)字符串(number-to-string)格式化語(yǔ)法將被擴(kuò)展,允許 _ 作為千位分隔符。這可以用更具可讀性的字面量來(lái)輕松地生成代碼。[11]

The syntax would be the same as for the comma, e.g. {:10_} for a width of 10 with _ separator.(這句沒(méi)看懂...不譯)

對(duì)于 b、x 和 o 格式符,_ 也將支持,并按 4 位數(shù)分組。

現(xiàn)有的技術(shù)

那些允許下劃線(xiàn)分組的語(yǔ)言,實(shí)現(xiàn)了大量放置下劃線(xiàn)的規(guī)則。在語(yǔ)言規(guī)范與實(shí)際行為相矛盾的情況下,以下會(huì)列出實(shí)際的行為。(“單個(gè)”或“多個(gè)”指的是允許多少連續(xù)的下劃線(xiàn)。)

  • Ada:?jiǎn)蝹€(gè),僅在數(shù)字間 [8]
  • C# (7.0 版本的提案):多個(gè),僅在數(shù)字間[6]
  • C++14:?jiǎn)蝹€(gè),在數(shù)字之間(選了其它分隔符)[1]
  • D:多個(gè),任意位置,包括末尾 [2]
  • Java:多個(gè),僅在數(shù)字間 [7]
  • Julia:?jiǎn)蝹€(gè),僅在數(shù)字間(但不含浮點(diǎn)指數(shù)部分) [9]
  • Perl 5:多個(gè),基本是任意位置,盡管文檔說(shuō)數(shù)字間限制 1 個(gè)下劃線(xiàn) [3]
  • Ruby:?jiǎn)蝹€(gè),僅在數(shù)字間(盡管文檔說(shuō)“任意位置”)[10]
  • Rust:多個(gè),任意位置,除了指數(shù)“e”與數(shù)字間[4]
  • Swift:多個(gè),數(shù)字之間和末尾(盡管文檔說(shuō)僅在“數(shù)字之間”) [5]

被否決的語(yǔ)法

(Python貓注:每個(gè) PEP 在初提出階段,都可能引起很多關(guān)于語(yǔ)法設(shè)計(jì)的討論,在正式采納的 PEP 中,一般會(huì)保留一些有代表性的被否決的方案,例如下面的兩項(xiàng))

1、下劃線(xiàn)的放置規(guī)則

減少下劃線(xiàn)的使用限制,而不是上面聲明的相對(duì)嚴(yán)格的規(guī)則。在其它語(yǔ)言中,常見(jiàn)的規(guī)則包括:

  • 只允許一個(gè)連續(xù)的下劃線(xiàn),并且只能在數(shù)字之間。
  • 允許多個(gè)連續(xù)的下劃線(xiàn),但只能在數(shù)字之間。
  • 允許多個(gè)連續(xù)的下劃線(xiàn),在大多數(shù)位置,除了字面量的開(kāi)頭,或特殊的位置(例如小數(shù)點(diǎn)后)。

本 PEP 中的語(yǔ)法最終被選中,因?yàn)樗w了常見(jiàn)的用例,并且不會(huì)出現(xiàn)被 Python 風(fēng)格指南所不鼓勵(lì)使用的語(yǔ)法。

一個(gè)不太常見(jiàn)的規(guī)則是只允許每 N 位數(shù)字有下劃線(xiàn)(其中 N 可能是 3 個(gè)十進(jìn)制字面量,或 4 個(gè)十六進(jìn)制字面量)。這是不必要的限制,特別是考慮到這些分隔符位置在不同的文化中是不同的。(Python貓注:例如,我們國(guó)家習(xí)慣將 4 個(gè)數(shù)字分為一組,即 10000 是 1 萬(wàn),而不是英語(yǔ)文化中的 10 thousand)

2、其它的分隔符

還有一種建議是使用空格進(jìn)行分組。雖然字符串是一種結(jié)合相鄰字面量的先例,但這種行為可能會(huì)導(dǎo)致意外的效果,而下劃線(xiàn)則不會(huì)。而且,除了那些基本會(huì)忽略任何空格的語(yǔ)言外,沒(méi)有其它語(yǔ)言使用此規(guī)則。

c++ 14 引入了單引號(hào)來(lái)進(jìn)行分組(因?yàn)橄聞澗€(xiàn)會(huì)與用戶(hù)定義的字面量產(chǎn)生歧義),由于單引號(hào)已經(jīng)被 Python 的字符串字面量使用了,所以沒(méi)有考慮它。[1]

實(shí)現(xiàn)

實(shí)現(xiàn)上述規(guī)范的初步補(bǔ)丁已經(jīng)發(fā)布到問(wèn)題跟蹤器。[12]

參考內(nèi)容

[1] (1, 2) http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3499.html

[2] https://dlang.org/spec/lex.html#integerliteral

[3] https://perldoc.perl.org/perldata#Scalar-value-constructors

[4] https://web.archive.org/web/20160304121349/http://doc.rust-lang.org/reference.html#integer-literals

[5] https://docs.swift.org/swift-book/ReferenceManual/LexicalStructure.html

[6] https://github.com/dotnet/roslyn/issues/216

[7] https://docs.oracle.com/javase/7/docs/technotes/guides/language/underscores-literals.html

[8] http://archive.adaic.com/standards/83lrm/html/lrm-02-04.html#2.4

[9] https://web.archive.org/web/20160223175334/http://docs.julialang.org/en/release-0.4/manual/integers-and-floating-point-numbers/

[10] https://ruby-doc.org/core-2.3.0/doc/syntax/literals_rdoc.html#label-Numbers

[11] https://mail.python.org/pipermail/python-dev/2016-February/143283.html

[12] http://bugs.python.org/issue26331

版權(quán)

該文檔已放入公共領(lǐng)域。

 

源文件:https://github.com/python/peps/blob/master/pep-0515.txt

PEP原文:https://www.python.org/dev/peps/pep-0515

PEP標(biāo)題:PEP 515 -- Underscores in Numeric Literals

PEP作者:Guido van Rossum, Nick Coghlan

創(chuàng)建日期:Georg Brandl, Serhiy Storchaka

合入版本:3.6

譯者:豌豆花下貓@Python貓

PEP翻譯計(jì)劃:https://github.com/chinesehuazhou/peps-cn

本文轉(zhuǎn)載自微信公眾號(hào)「Python貓」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系Python貓公眾號(hào)。

 

責(zé)任編輯:武曉燕 來(lái)源: Python貓
相關(guān)推薦

2023-11-29 18:11:17

Python代碼

2021-08-08 22:27:13

Python下劃線(xiàn)方法

2010-03-04 10:35:51

Python下劃線(xiàn)

2021-06-04 11:10:04

JavaScript開(kāi)發(fā)代碼

2022-04-15 08:54:39

PythonAsync代碼

2023-03-29 08:24:30

2025-06-05 02:43:00

2023-11-09 08:55:17

Python雙下劃線(xiàn)

2021-12-26 22:55:26

Python下劃線(xiàn)編程

2020-09-22 09:41:48

Python下劃線(xiàn)開(kāi)發(fā)

2020-02-18 11:19:36

物聯(lián)網(wǎng)病毒物聯(lián)網(wǎng)IOT

2024-08-16 22:00:38

2024-08-20 16:32:37

python接口自動(dòng)化

2024-01-08 08:35:28

閉包陷阱ReactHooks

2013-04-18 09:56:05

2023-03-05 15:41:58

MySQL日志暴漲

2021-05-11 11:51:15

飛機(jī)Wi-Fi通信

2016-11-22 19:54:56

點(diǎn)擊率預(yù)估推薦算法廣告

2023-10-12 08:54:20

Spring事務(wù)設(shè)置

2013-07-24 19:27:45

iOS開(kāi)發(fā)學(xué)習(xí)自定義帶下劃線(xiàn)文本UI
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产麻豆一区二区三区 | 日韩在线免费视频 | 九色在线视频 | 国产高清在线精品一区二区三区 | 天堂精品 | 国产农村一级国产农村 | 天天干天天色 | 在线午夜 | 日韩欧美三级电影在线观看 | 欧美激情一区二区三区 | 国产精品视频中文字幕 | 国产精品成人一区二区三区 | 国产在线麻豆精品入口 | a国产视频 | 九九热国产视频 | 青青草网| 精品一区二区在线观看 | 亚洲欧美国产毛片在线 | 国产精品嫩草影院精东 | 日韩精品视频在线 | h视频免费观看 | 亚洲国产一区二区三区 | 在线观看中文字幕dvd播放 | 一区二区三区四区在线视频 | 亚洲导航深夜福利涩涩屋 | 一本一道久久a久久精品综合蜜臀 | 日韩精品在线免费 | 成人免费视频一区二区 | 羞羞视频免费观看 | 午夜精品久久久久久久99黑人 | 狠狠爱免费视频 | 午夜影院免费体验区 | 国产精品成人在线 | 午夜在线| 在线免费观看日本视频 | 操久久| 国产精品一区二区三区在线 | 久久久久国产成人精品亚洲午夜 | 亚洲精品电影在线观看 | 一级特黄a大片 | 日韩aⅴ视频|