Что означают 1_000 и 100_000?

Поскольку я изучал Python, я иногда видел примеры начинающих, которые выглядят так:

sum_sq = [None] * 1_000

Я купил три книги Python, и никто не упомянул, что означает 1_000 и 100_000 что я вижу в этих примерах.

Мой вопрос: 1_000 же, как 1000? И если да, то почему они пишут его как 1_000? Есть ли у него специальная функция, которой нет в 1000? Вещи как:

if __name__ == __main__ 

имеют разумные причины для использования подчеркивания, и я не вижу причины, по которой используется 1_000.

Ответ 1

Они разрешены с Python 3.6, см. PEP 515 - Подчеркивание в числовых литералах. Как указано в PEP

Символы подчеркивания не имеют смыслового значения, а литералы анализируются так, как если бы подчеркивания отсутствовали.

Таким образом, они доступны только для чтения для больших чисел, бинарных литералов, шестнадцатеричных адресов и т.д. Некоторые примеры из PEP:

>>> assert 10_000_000 == 10000000

>>> assert 0xCAFE_F00D == 0xCAFEF00D

>>> assert 0b_0011_1111_0100_1110 == 0b0011111101001110

Ответ 2

Да, это так же, как без подчеркивания. У них есть подчеркивания, чтобы действовать как тысяча отторговцев, которые для более длинных чисел могут облегчить их чтение.

Это похоже на то, как в письменном виде мы разделяем тысячи запятыми (или точками в зависимости от вашего региона):

1,000,000 # A million

Из-за того, что это могло бы помешать созданию кортежа, хотя:

n = 1,000,000
print(type(n))

<class 'tuple'> 

Python использует символы подчеркивания вместо запятых.