19日に更新してた

アフィリエイトはないよ

python3.8 で int("1_234") は 1234 だが、int("1,234") はエラー

数字を表記するとき何桁かでアンダーバーを入れると見やすいのですが、format 文で可能な3桁だと桁計算がはかどらないので4桁で入れようとするとテキスト処理することになります。そうなると色々と面倒そうなので、アンダーバーを入れたテキストそのまま数字の戻せるのかとやってみたら、できるんですね。*1

int("1_234")    #1234
float("4_5_6.7_8_9")    #456.789

カンマだと Value Error がでます。

int("1,234")

# ValueError: invalid literal for int() with base 10: '1,234'

アンダーバーもカンマも format 文だと表記されるのですが、読み込みはアンダーバーだけのようです。

2進数、8進数、16進数などですと、int への直入力ではアンダーバーは問題ないみたいです。テキスト入力はオプションが必要。

int(0b_1_0_0)    #4
int(0o_1_1)    #9
int(0x_f_f)    #255

int("0b_1_0_0",2)    #4
int("0o_1_1",8)    #9
int("0x_f_f",16)    #255

これも知らなかったのですけれど、

bin(3)
#'0b10'
oct(9)
#'0o11'
hex(17)
#'0x11'

type(bin(3))
#str
type(oct(9))
#str
type(hex(17))
#str

出力を見ればわかるのですが、bin、oct、hex は文字列で出力されるのですね。

ちなみにバージョン

import sys
sys.version

>>3.8.13 | packaged by conda-forge | (default, Mar 25 2022, 05:59:45) [MSC v.1929 64 bit (AMD64)]

*1:float の場合はドットの前後にアンダーバーを入れるとエラーになるのですが、それ以外なら変換できるようです。