Я все еще новичок в Python и пытаюсь привыкнуть к его динамической типизации. Иногда у меня есть функция или класс, который ожидает параметр определенного типа, но может получить значение другого типа, которое к нему может быть приведено. Например, он может ожидать float
, но вместо этого получит int или десятичное число. Или он может ожидать строку, но вместо этого получает объект, который определяет специальный метод __str__
.
Каков наилучший способ приведения аргумента к правильному типу (и причину этого)? Я делаю это в функции / классе или в вызывающей программе? Если в звонилке, тоже в функции проверять? Например.
Альтернатива 1:
def myfunc(takes_float):
myval = float(takes_float)
myfunc(5)
Альтернатива 2:
def myfunc(takes_float):
myval = takes_float
myfunc(float(5))
Альтернатива 3:
def myfunc(takes_float):
assert isinstance(takes_float, float)
myval = takes_float
myfunc(float(5))
Я уже прочитал этот ответ и этот, и они говорят, что проверка типов в Python "плохо", но я не хочу тратить время на отслеживание очень простых ошибок, которые могут быть мгновенно обнаружены компилятором на статически типизированном языке.
assert
так. Утверждения предназначены для документирования условий, которые не могут произойти во время выполнения, а не для проверки ввода. - person Roberto Bonvallet   schedule 16.12.2009