ãã®è¨äºã¯ 2024 TSG Advent Calendar åæ¥ã®è¨äºã§ãã
â¦â¦â¦â¦ð¤â
Python ã®æ°å¤æååå¤å®ãã¸ãã¯ãæ¢ã
str.isnumeric() ã¡ã½ããã¨ã¯ï¼
Python ã® str.isnumeric()
ã¡ã½ããã¯ãæååå
ã®ãã¹ã¦ã®æåãæ°å¤ã表ããã®ã§ããã° True ããããã§ãªããã° False ãè¿ãã¾ãã*1 ã¾ãããã®ã¡ã½ããã®åºæ¬çãªåä½ãè¦ã¦ã¿ã¾ãããã
# Python ã® isnumeric() ã®åä½ä¾ print("123".isnumeric()) # True; 1, 2, 3 ã¯æ°å print("123a".isnumeric()) # False; a ã¯æ°åã§ã¯ãªã print("äºåä¸".isnumeric()) # True; äºãåãä¸ ã¯æ°å¤
æ¼¢æ°åã«ã対å¿ãã¦ãããä¸è¦ããããã«è¦ãã¾ããã¨ãããâ¦â¦
print("å ".isnumeric()) # True print("å".isnumeric()) # False
ãå ãã¨ãåãã¯ã©ã¡ããæ¼¢æ°åã«ä½¿ãããæåãªã®ã«ããªã Python ã® str.isnumeric() ã¯ç°ãªãçµæãè¿ãã®ã§ããããï¼
Python 㨠Unicode æåãã¼ã¿ãã¼ã¹
Python ã®æååã¡ã½ãã str.isnumeric()
ã¯ãå
é¨çã« Unicode ã®æ
å ±ãæ´»ç¨ãã¦ãã¾ããUnicode ã¨ã¯ãä¸çä¸ã®æåãä¸å
管çããããã®å½éçãªè¦æ ¼ã§ãããããã®æåãã©ããªæ§è³ªãæã¤ã®ãããUnicode æåãã¼ã¿ãã¼ã¹ (UCD)ã1 ã¨ããå½¢ã§è¨é²ãã¦ãã¾ãããã¼ã¿ãã¼ã¹ã«ã¯ãçµµæåãã©ãã (Emoji)ããã大æåãã©ãã (Uppercase)ãã¨ãã£ãå±æ§ãæåãã¨ã«è¨é²ããã¦ãã¾ãã
ãã®ä¸ã§ããã®è¨äºã§éµã«ãªãæ
å ±ã¯ Numeric_Type ãããã㣠ã§ãããã®ããããã£ã¯ãæåããæ°å¤ãã¨ãã¦æ±ããããã示ãããã®ã§ãPython ã® str.isnumeric()
ããã®æ
å ±ãå
ã«å¤æãè¡ã£ã¦ãã¾ãã
Numeric_Type ããããã£ã«ã¯ä»¥ä¸ã® 4 種é¡ãããã¾ããstr.isnumeric()
ã®æ£å¼ãªä»æ§2 ã«ã¯ãæåããã®ãã¡ Decimal, Digit, Numeric ã®ããããã§ããå ´åã« True ãè¿ããã¨ãããµãã«å®ãã¦ããã¾ãã
Numeric_Type | 説æ | ä¾ |
---|---|---|
Decimal | åé²æ³ (0ï½9) ã§ä½¿ãããåºæ¬çãªæ°å | U+0030ï½U+0039ï¼ã¢ã©ãã¢æ°å "0"ï½"9"ï¼ U+0660ï½U+0669ï¼ã¢ã©ãã¢èªã®æ°åï¼ |
Digit | æ°åã¨ãã¦æ©è½ããããåé²æ³ã®æ¡ã¨ãã¦ç´æ¥ä½¿ç¨ãããªãç¹æ®ãªæ°å | U+2070ï¼ä¸ä»ãã¼ã "â°"ï¼ U+2460ï¼ä¸¸ä»ãæ°å "â "ï¼ |
Numeric | ãã以å¤ã®æ°å¤ã表ãæåãæ´æ°ãåæ°ãè² ã®æ°ãªã©å¹ åºãæ°å¤ãå«ã¾ãã | U+2155ï¼1/5ã®åæ° "â
"ï¼ U+4E00ï¼æ¼¢æ°å "ä¸"ï¼ |
None | ä¸è¨ã«è©²å½ããªãæå | U+0041ï¼ã©ãã³æå "A"ï¼ U+3042ï¼ã²ãã㪠"ã"ï¼ |
å®éã«æ°è©ã® Numeric_Type ãè¦ã¦ã¿ã
ã§ã¯ãããããµã¾ãã¦ããå ããåããå«ãæ¥æ¬èªã®æ°è©ã® Numeric_Type ãã¾ã¨ãã¦ãã¼ã¿ãã¼ã¹3 ã§ç¢ºèªãã¦ã¿ã¾ãããã
æå | Unicode | Numeric_Type | str.isnumeric() |
---|---|---|---|
ä¸ | U+4E07 | Numeric | True |
å | U+5104 | Numeric | True |
å | U+5146 | Numeric | True |
京 | U+4EAC | Numeric | True |
å | U+5793 | None | False |
𥱠| U+25771 | None | False |
ç©£ | U+7A63 | None | False |
æº | U+6E9D | None | False |
æ¾ | U+6F97 | None | False |
æ£ | U+6B63 | None | False |
è¼ | U+8F09 | None | False |
極 | U+6975 | None | False |
ããã¨ç¢ºãã«ããå ã㯠Numeric_Type=Numeric ã«åé¡ããã¦ããä¸æ¹ããåãã¯åé¡ããã¦ããªããã¨ããããã¾ããããããPython ã® str.isnumeric() ã¡ã½ããããå ãã¨ãåãã§ç°ãªãçµæãè¿ããã¨ã¸ã®ç´æ¥çãªçç±ã§ãï¼
â¦â¦ããããªãããä¸ã®è¡¨ãè¦ã¦ããã¨ãæ°ãã«ä¸ã¤ã®çåã沸ãä¸ãã£ã¦ãã¾ãããªããUnicode ã¯ãåã以ä¸ã®æ°è©ã« Numeric_Type ãå²ãå½ã¦ã¦ããªãã®ã§ããããï¼ãã®è¬ã解ããããUnicode ã®æ°è©ã®æ±ãã«ã¤ãã¦ããå°ãæãä¸ãã¦ããã¾ãã
ã京ãã¨ãåããåãã Unicode ã®å¤æãæ¢ã
ç¾è¡ã® Unicode ã¯ã京ãã¾ã§ã®æ°è©ã« Numeric_Type ãä»ä¸ãã¦ããã®ã«ãé¢ãããããåã以ä¸ã®æ°è©ã«ã¯ä»ä¸ãã¦ãã¾ããããã®ç·å¼ãã¯ãã©ã®ãããªåºæºã§æ±ºã¾ã£ãã®ã§ããããï¼ ãããç¥ãããã«ããã¾ã㯠Unicode ã«ãããæ¼¢å㨠Numeric_Type ã®é¢ä¿ãç¥ã£ã¦ããå¿ è¦ãããã¾ãã
æ¼¢åã® Numeric_Type ã決ããä»çµã¿
Unicode ã®æ¼¢åï¼CJK çµ±åæ¼¢åï¼ã«é¢ããæ å ±ã¯ãUCD ã¨ã¯å¥ã® Unicode Han Database (Unihan)5 ã¨ãããã¼ã¿ãã¼ã¹ã«åé²ããã¦ãã¾ãããã®ãã¼ã¿ãã¼ã¹ã«ã¯ãåæ¼¢åã®èªã¿ãæå³ãé¨é¦ã ãã§ãªããæ°å¤ã«é¢ããæ å ±ãæ ¼ç´ããã¦ãã¾ãã
Unihan ã«ã¯ kPrimaryNumeric ã¨ããé ç®ããããããã«ã¯ãã®æ¼¢åã表ãæ°å¤ï¼ãã¨ãã°ãä¸ãã¯104ï¼ãå®ç¾©ããã¦ãã¾ãã ããæ¼¢åã« kPrimaryNumeric ãä»ä¸ãããã¨ãããã«å¯¾å¿ã㦠UCD 㧠Numeric_Type=Numeric ãè¨å®ããããã¤ã¾ããã®æ¼¢åã ãæ°ã表ãæåãã¨ãã¦æ±ãããä»çµã¿ã«ãªã£ã¦ãã¾ãã
ã京ãã¨ãåãã®å¢çç·ï¼L2/22-223 ææ¡ã¨ Unicode æè¡å§å¡ä¼ã®å¤æ
ã¤ãæè¿ã® Unicode 15.0ï¼2022 å¹´ 9 æå¶å®ï¼ã¾ã§ããä¸ããåããå ãã¾ã§ã Numeric_Type ãæã¤æ°è©ã¨ãã¦æ±ãããã京ããåã以éã®æ°è©ã¯ Numeric_Type ãä»ä¸ããã¦ãã¾ããã§ããã
ããã§ã¿ã¼ãã³ã°ãã¤ã³ãã¨ãªãã®ãã2022 å¹´ 10 æã« Unicode æè¡å§å¡ä¼ (UTC) ã«æåºããã L2/22-2236 ã¨ããææ¡ã§ããL2/22-223 ã¯ãUnihan ã®æ°å¤ãã£ã¼ã«ãã«é¢ããæ§ã ãªä¿®æ£ãææ¡ãã¦ãã¾ãã
ç¹ã«ãã®ä¸ã§ãã京ã以ä¸ã®æ°è©ï¼äº¬ãåãð¥±ãç©£ãæºãæ¾ï¼ãªã©ã®æå ã«ãæ¥æ¬èªã§æ°å¤ã¨ãã¦ã®ç¨ä¾ããããã¨ãããkPrimaryNumeric ããããã£ã追å ãããããªãã¡æ°ãã« Numeric_Type ãä»ä¸ãããã¨ãææ¡ãã¦ããã®ã§ãï¼ ä¸ã®è¡¨ã®å¤ªåã¯ãå®éã« L2/22-223 ã§è¿½å ãææ¡ããã kPrimaryNumeric ã®å¤ã§ãã
æå | Unicode | kPrimaryNumericï¼ææ¡ã¯å¤ªåï¼ |
---|---|---|
å | U+5146 | 1012, 106 *2 |
京 | U+4EAC | 1016 |
å | U+5793 | 1020 |
𥱠| U+25771 | 1024 |
ç©£ | U+7A63 | 1028 |
æº | U+6E9D | 1032 |
æ¾ | U+6F97 | 1036 |
ããã¦ããã® L2/22-223 ææ¡ãã¨ãã¾ã¨ãã UTC ã® CJK & Unihan ä½æ¥é¨ä¼ããUTC ã«å¯¾ãã¦ä¸è¡¨ã®ãã¹ã¦ãåãå ¥ããããå§åãã¾ãã7ã
ããããªãããæçµç㪠UTC ã§ã®è°è«ã®çµæ8ããå ãã® 106 ã¨ã京ãã® 1016 ã®ã¿ã Unicode 15.1 ã«è¿½å ãããä»ã®æ°è©ã¸ã® kPrimaryNumeric ä»ä¸ã¯è¦éããããã¨ã¨ãªãã¾ããããã®æ±ºå®ã«ãããã京ã(U+4EAC) ãæ°å¤ã¨ãã¦æ±ãããæå¾ã®æåã¨ãã¦èªãããããã以ä¸ã®æ°è©ï¼åãð¥±ãªã©ï¼ã¯å¯¾è±¡å¤ã¨ãªã£ã¦ãã¾ãã¾ããã
[173-A45] Action Item for John Jenkins, CJK: Apply the adjustments to the kAccountingNumeric, kOtherNumeric, and kPrimaryNumeric properties, based on document L2/22-223, as amended in Section 11 of document L2/22-247, and excluding any property values greater than that for U+4EAC, for Unicode Version 15.1.
çµå±ããªãã京ãã ãã追å ãããã®ãï¼
ã京ãã¾ã§ãæ¡ç¨ãããé¡æ«ã«ã¤ãã¦ãå ¬éè³æããèªã¿åããã®ã¯ããã¾ã§ã§ãããããããããã®è¨é²ãèªãã§ããå ·ä½çã«ããªããåã以éãé¤å¤ãããã®ãï¼ãã¨ããçç±ã¯è¨ããã¦ãã¾ããã
ããã§ããã®çåã解æ¶ããããã«ãUnicode ã®å°é家ã§ãããå ã»ã©ã®å§åãè¡ã£ã CJK & Unihan ä½æ¥é¨ä¼ã®è°é·ã§ããã Ken Lunde å士ã«ç´æ¥åãåãããè¡ãã¾ãããæ°ã®è¿ä¿¡ã«ããã°ãã京ã(10000000000000000) ããä¸ã®æ°è©ãé¤å¤ãããçç±ã¯ããªã¼ãã¼ããã¼ã®æ¸å¿µã«ããã¨ã®ãã¨ã§ãã以ä¸ã¯å士ããã®è¿ä¿¡ã®å¼ç¨ã§ãï¼
See Consensus 173-C11 from #UTC173, along with the associated action items, specifically 173-A45. Summary: Any value over 10000000000000000 was explicitly excluded due to overflow concerns. https://t.co/4mlIljLhhl
— Ken Lunde å°æå£ (@ken_lunde) 2024å¹´11æ16æ¥
ãã®ãããªå¤æãè¡ãããèæ¯ã«ã¯ãUnicode ãå¹ åºãã·ã¹ãã ãç°å¢ã§æ¡ç¨ããã¦ãããã¨ãå½±é¿ãã¦ãã¾ãããªã¼ãã¼ããã¼ã®ãªã¹ã¯ãæ±ããå¤ã Numeric_Type ã«å«ããã¨ãæ°å¤å¦çãè¡ãå¤ãã®å®è£ ã«å½±é¿ãåã¼ãå¯è½æ§ããããã¨ããå¤æããªãããã¨èãããã¨ãã§ãã¾ãã
å®éã64 bit 符å·ãªãæ´æ°åã表ç¾ã§ãã 0ï½264 -1ï¼ããã 1.8Ã1019ï¼ã®ä¸çã¯ã京ã(1016) ã¨ãåã(1020) ã®éã«ä½ç½®ãã¾ããããã«ãä¸é¨ã®ã·ã¹ãã ã§ã¯æ°å¤ãå精度浮åå°æ°ç¹æ°åã§è¡¨ç¾ãã¾ããããã®åã§å®å ¨ã«æ´æ°ã表ç¾ã§ããä¸é *3 ã¯ç´ 9Ã1015 ã§ãããã®ç¯å²ãè¶ ããã京ã(1016) ã Numeric_Type ãæã¤ã®ã¯ããã®å¶ç´ãç´æ¥åæ ãããã®ã§ã¯ãªãããããã¾ããããããã§ãæ¯è¼çå°ããªå¤ã¨ãã¦è¨±å®¹ãããå¯è½æ§ã¯ããã¾ãã
ããã¾ã§æ¨æ¸¬ã§ããã128 bit æ´æ°ãä»»æ精度æ¼ç®ãä¸è¬çã«ãªããããªç°å¢ãæ®åããã°ããåã以éã®æ°è©ã«ã Numeric_Type ãä»ä¸ãããå¯è½æ§ãããããããã¾ããããã¨ãã°ã128 bit 符å·ãªãæ´æ°ã使ãã°ãããã 3.4Ã1038 ã¾ã§ã®å¤ãå®å
¨ã«è¡¨ç¾ã§ãã¾ãããã®ç¯å²ãªããæ¾ã(1036) ãå«ãããã¨ãã§ãã¾ããUnicode ã«ãããæ°è©ã®æ±ããå¤ãã£ã¦ããã«ã¯ãããªãã¡ Python ã® str.isnumeric()
ããåã以éã®æ°è©ãæ°å¤ã¨ãã¦æ±ãããã«ãªãã«ã¯ããããªãè¨ç®æ©ç°å¢ã®é²åãå¾
ã¤å¿
è¦ãããããããã¾ããã
ã¾ã¨ã
Python ã® str.isnumeric()
ã¡ã½ããã¯ãæååå
ã®ãã¹ã¦ã®æåããæ°ã表ãæåãã§ããããå¤å®ãã¾ããã"å
"
ã«ã¯ Trueã"å"
ã«ã¯ False ãè¿ãã¾ãããã®çç±ã¯ãUnicode ã® Numeric_Type ããããã£ããåã以ä¸ã®æ°è©ã«ã¯ä»ä¸ããã¦ããªããã¨ã«ããã¾ããã
ããã«ãã®çç±ãæ¢ãã¨ããåãï½ãæ¾ãã«å¯¾ãã Unicode ã®æ°å¤ãã£ã¼ã«ãä¿®æ£ã®ææ¡ããã£ããã®ã®ããªã¼ãã¼ããã¼ã®ãªã¹ã¯ãæ¸å¿µãã¦ã京ãã¾ã§ã®æ°è©ã®ã¿ãæ¡ç¨ããããã¨ããããã¾ããã
Unicode ã®ããããã£è¨å®ã«ã¯æåã®æå³ä»¥ä¸ã«ãæè¡çå¶ç´ãªã©å¤æ§ãªè¦³ç¹ããä»æ§ãæ¤è¨ããã¦ããã®ã§ãã
è¬è¾
æ¬è¨äºã®å·çã«ããããKen Lunde å士ããè²´éãªæ å ±æä¾ãããã ãã¾ãããç¹ã«ãUnicode ã®æ°å¤æ±ãã«é¢ããæè¡çãªèæ¯ã«ã¤ãã¦ã®ç解ãæ·±ãããã¨ãã§ãã¾ãããã¨ã«æè¬ãã¦ãã¾ããã¾ããUnicode è°äºé²ã®ãµã¼ãã¤ãªã©ã«ãå¹ åºãå©åãã¦ããã ãã hakatashi æ°ã«ãããã«è¬æã表ãã¾ãã
â¶ãã¾ã
ã´ããã¨ã³ã¼ãã¼
æ°è»½ã«èªããè¨äºãç®æãã¦ããã®ã«ããããã¾ãããªå 容ã«ãªã£ã¦ãã¾ã£ãã®ã§ãã´ããã¨*4 ã³ã¼ãã¼ã§ä¸åãããã¨æãã¾ãã
- ãåãä»¥ä¸ ââ
- Numeric_Type ãããã㣠ââ
ä»ã«è¦ã¤ããããã²æãã¦ãã ããã
2024 å¹´ 12 æ 8 æ¥è¿½è¨
èªè ããä»ã®ã´ããã¨ãæãã¦ããã ãã¾ããããããã¨ããããã¾ãï¼
- ãåã以é
- ããã¾ã§ã§ã
- hakatashi æ°
- "å".isnumeric()
- "京".isnumeric()
- 表ãæ°å¤
- with theï¼è±èªã´ããã¨ï¼
- excluded dueï¼è±èªã´ããã¨ï¼
- ã¾ãããªå 容
- Unicode® Standard Annex #44 - Unicode Character Databaseãåç §æ¥: 2024-11-17↩
- Python documentation - Built-in Typesãåç §æ¥: 2024-11-17↩
- Unicode Character Database - Numeric_Typeãåç §æ¥: 2024-11-17↩
- What's New in Python 3.13 - unicodedataãåç §æ¥: 2024-11-17↩
- Unicode® Standard Annex #38 - Unicode Han Database (Unihan)ãåç §æ¥: 2024-11-17↩
- L2/22-223: Proposed Updates and Expansions of Unihan Numeric Fieldsãåç §æ¥: 2024-11-17↩
- L2/22-247: CJK & Unihan Group Recommendations for UTC #173 Meetingãåç §æ¥: 2024-11-17↩
- UTC #173 Minutesãåç §æ¥: 2024-11-17↩
*1:ã¤ã¾ããæååå ¨ä½ãæ°ã®è¡¨ç¾ã¨ãã¦æ£ãããã¨ã¯ç¡é¢ä¿ã§ãããã¨ãã°ã"123.45".isnumeric() 㯠Falseã"å å ".isnumeric() 㯠True ãè¿ãã¾ãã
*2:ä¸å½ããããã 㧠106 ããå ãã¨æ¸ãæ £ç¿ããããç¾å¨ã§ãä¸å½æ¬å㧠SI æ¥é è¾ 106 ã表ãæåã¨ãã¦ãå ãã使ãããã§ãã
*3:JavaScript ã® Number.MAX_SAFE_INTEGER ã®ãã¨ã ã¨æã£ã¦ãã ããã
*4:ããåèªã®æ«å°¾ã¨ãããã«å¾ç¶ããåèªã®å é ã®çºé³ãä¸è´ãããããªåèªã®ä¸¦ã³ã®ãã¨ã