Как происходит преобразование числа в число в Python?

Имеется списковое включение, преобразующее все элементы списка (в котором есть ТОЛЬКО числа и числа в строковом типе данных) в числа. Так вот, подскажите пожалуйста, как происходит преобразование числа в число? То-есть int(1), к примеру. Не лучше ли делать проверку на тип данных, перед преобразованием, чтобы не потерять в производительности при преобразовании числа в число или производительность не теряется?


Ответы (2 шт):

Автор решения: extrn

Конструктор int сам делает проверку типа аргумента, и если это int, возвращает его без изменений, так что быстрее будет просто использовать int без дополнительных проверок. По крайней мере в CPython.

>>> x = 123123123123
>>> int(x) is x
True

https://github.com/python/cpython/blob/master/Objects/longobject.c#L4946

https://github.com/python/cpython/blob/master/Objects/abstract.c#L1371

https://docs.python.org/3/c-api/number.html#c.PyNumber_Long

https://docs.python.org/3/c-api/long.html#c.PyLong_CheckExact

→ Ссылка
Автор решения: vp_arth

К коллайдеру!

from timeit import timeit

print(timeit('x = 1212345678901234567890; int(x)', number=int(1e8)))
print(timeit('x = 1212345678901234567890; int(x) if type(x) is not int else x', number=int(1e8)))

"""
5.075638975016773
6.453564461087808
"""

Наличие условного оператора гораздо больше влияет на время исполнения, чем то, что мы хотим оптимизировать =)

→ Ссылка