Деление Python

«Это» - все о сфере видимости. Каждая функция имеет свою собственную область действия, и поскольку все в JS является объектом, даже функция может хранить некоторые значения в себе, используя «это». ООП 101 учит, что «это» применимо только к экземплярам объекта. Поэтому каждый раз, когда выполняет функция, новый «экземпляр» этой функции имеет новое значение «this».

Большинство людей путаются, когда пытаются использовать «это» внутри анонимных функций закрытия например:

(function(value) {
    this.value = value;
    $('.some-elements').each(function(elt){
        elt.innerHTML = this.value;        // uh oh!! possibly undefined
    });
})(2);

Итак, внутри each (), «this» не содержит «значение», которое вы ожидаете от него (от

this.value = value;
над ним). Итак, чтобы справиться с этой проблемой (без каламбуры), разработчик мог:

(function(value) {
    var self = this;            // small change
    self.value = value;
    $('.some-elements').each(function(elt){
        elt.innerHTML = self.value;        // phew!! == 2 
    });
})(2);

попробовать; вам понравится эта схема программирования

128
задан Peter Mortensen 22 February 2017 в 02:50
поделиться

6 ответов

Вы используете Python 2.x, где целочисленные деления будут усекаться, а не превращаться в число с плавающей точкой.

>>> 1 / 2
0

Вы должны сделать одно из них float:

>>> float(10 - 20) / (100 - 10)
-0.1111111111111111

или from __future__ import division, что заставит / принять поведение Python 3.x, который всегда возвращает float.

>>> from __future__ import division
>>> (10 - 20) / (100 - 10)
-0.1111111111111111
242
ответ дан 24 November 2019 в 00:30
поделиться

В любом случае, это целочисленное деление. 10/90 = 0. Во втором случае вы просто преобразуете 0 в число с плавающей точкой.

Попробуйте преобразовать один из операндов "/" в тип float:

float(20-10) / (100-10)
0
ответ дан 24 November 2019 в 00:30
поделиться

Вы вставляете целые числа, поэтому Python возвращает вам целое число обратно :

>>> 10 / 90
0

Если вы затем преобразуете это значение в число с плавающей запятой, округление будет уже выполнено, другими словами, 0 целое всегда будет 0 с плавающей точкой.

Если вы используете числа с плавающей запятой по обе стороны от деления, Python даст вам ожидаемый ответ.

>>> 10 / 90.0
0.1111111111111111

Итак, в вашем случае:

>>> float(20-10) / (100-10)
0.1111111111111111
>>> (20-10) / float(100-10)
0.1111111111111111
20
ответ дан 24 November 2019 в 00:30
поделиться

Вы преобразовываете в тип float после того, как деление уже произошло во втором примере. Попробуйте следующее:

float(20-10) / float(100-10)
0
ответ дан 24 November 2019 в 00:30
поделиться

Вам нужно изменить его на float ПЕРЕД делением. То есть:

float(20 - 10) / (100 - 10)
11
ответ дан 24 November 2019 в 00:30
поделиться

Сделайте хотя бы один из них float, тогда это будет float division, а не integer:

>>> (20.0-10) / (100-10)
0.1111111111111111

Приводить результат к float слишком поздно.

2
ответ дан 24 November 2019 в 00:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: