float()
функция делает не изменить свой аргумент - он вычисляет требуется соответствующее число с плавающей точкой и возвращает его в качестве нового объекта, так что вы должны сохранить, что где-то, если вы хотите использовать его. Если вы хотите, вы можете объединить float()
вызов с шагом обновления, например:
dec += float(rain_amount)
Вы можете быть удивлены, почему Python работает так.
Как уже упоминалось в Python Data model docs
тип объекта определяет операции, которые объект поддерживает (например, «это имеет длину?»), А также определяет возможные значения для объектов, которые тип. Функция type()
возвращает тип объекта (который является самим объектом). Как и его идентификатор, объекта - также неизменный.
[Сноска] Это is возможно в некоторых случаях изменить тип объекта, при определенных условиях . Обычно это не очень хорошая идея, так как это может привести к очень странному поведению, если оно будет обработано неправильно.
Так что лучше всего думать о типе объекта как неизменяемом. Мы можем небрежно говорить о преобразовании строки в float, но это действительно просто небрежный способ сказать, что мы создаем объект с плавающей точкой с числовым значением, соответствующим содержимому строкового объекта.
Вы не только не можете изменить тип объекта, но и для многих базовых типов объектов Python вы даже не можете изменить их значение! Такие объекты называются неизменяемыми; общие неизменяемые типы включают все числовые типы, строки и кортежи. Помимо кортежей, большинство встроенных типов контейнеров (списки, словари и наборы (но не frozensets)) являются изменяемыми, то есть может изменить их содержимое.
Так что, если вы
s = 'Sam'
s += 'my'
Вы фактически не изменяя объект строки s
: вы не можете, потому что это неизменное. Вместо этого создается новый строковый объект, который содержит 'Sammy'
, что новый объект привязан к имени s
, а старый объект, содержащий 'Sam'
, отбрасывается.
Точно так же, если вы
a = 1
a += 1
новый целочисленный объект создается, что имеет значение a+1
и что новый объект связан с именем a
.
Для получения дополнительной информации по этой теме, пожалуйста, см. Facts and myths about Python names and values от SO veteran Ned Batchelder.
+1 для: * «но это действительно просто небрежный способ сказать, что мы создаем объект с плавающей точкой с числовым значением, соответствующим содержимому строкового объекта» * –