Как эта функция Python оценивает n-й номер Фибоначчи? [Дубликат]

Конечно, есть много таких подходов, как синхронный запрос, обещание, но из моего опыта я думаю, что вы должны использовать подход обратного вызова. Естественно, что асинхронное поведение Javascript. Итак, ваш фрагмент кода можно переписать немного иначе:

function foo() {
    var result;

    $.ajax({
        url: '...',
        success: function(response) {
            myCallback(response);
        }
    });

    return result;
}

function myCallback(response) {
    // Does something.
}
10
задан Ante 24 February 2014 в 16:40
поделиться

7 ответов

В a, b = b, a + b выражения с правой стороны вычисляются перед назначением левой стороне. Это эквивалентно:

c = a + b
a = b
b = c

Во втором примере значение a уже было изменено к моменту выполнения b = a + b. Следовательно, результат отличается.

27
ответ дан isedev 24 August 2018 в 01:10
поделиться

Надеюсь, что на вас не повлиял язык C, приоритет оператора присваивания = выше, чем у оператора Comma ,. Не думайте, что это (a), (b = b), (a + b). Это назначение кортежа, что означает (a, b) = (b, a + b).

0
ответ дан BallpointBen 24 August 2018 в 01:10
поделиться

Линия:

a, b = b, a + b

ближе к:

temp_a = a
a = b
b = temp_a + b

, где b использует старое значение для a до a было переназначено значение b.

Python сначала оценивает правое выражение и сохраняет результаты в стеке, затем берет эти два значения и назначает их a и b. Это означает, что a + b вычисляется до a.

См. Как происходит замена членов в кортежах python (a, b) = (b , а) работать внутри? для низкого уровня, как все это работает, на уровне байт-кода.

13
ответ дан Community 24 August 2018 в 01:10
поделиться

Предположим, что мы начинаем с a и b следующим образом:

a = 2
b = 3

Итак, когда вы делаете:

a, b = b, a + b

, что происходит, вы создаете (b, a + b) или (3, 5), а затем распакуйте его в a и b, поэтому a становится 3, а b становится 5.

Во втором примере:

a = b
# a is now 3
b = a + b
# b is 3 + 3, or 6.
7
ответ дан geoffspear 24 August 2018 в 01:10
поделиться

Давайте заглянем.

a, b = b, a + b

Это назначение кортежа, означает (a, b) = (b, a + b), как (a, b) = (b, a)

Начните с быстрого примера:

a, b = 0, 1
#equivalent to
(a, b) = (0, 1)
#implement as
a = 0
b = 1

Когда приходит к (a, b) = (b, a + b) EAFP, попробуйте прямо

a, b = 0, 1
a = b #a=b=1
b = a + b #b=1+1
#output
In [87]: a
Out[87]: 1
In [88]: b
Out[88]: 2

Однако

In [93]: a, b = b, a+b
In [94]: a
Out[94]: 3
In [95]: b
Out[95]: 5

Результат отличается от первой попытки.

Tha, потому что Python сначала оценивает правую a+b. Это эквивалентно:

old_a = a
old_b = b
c = old_a + old_b
a = old_b
b = c

Таким образом, a, b = b, a+b означает, что a обменивается, чтобы получить old_value из b, b, чтобы получить сумму старого значения a и старое значение b,

0
ответ дан JawSaw 24 August 2018 в 01:10
поделиться

a, b = b, a + b аналогичен a, b = 0, 1, одновременно присваивая значения обеим переменным a, b. Сначала назначьте a = b, а затем b = a + b.

0
ответ дан pacholik 24 August 2018 в 01:10
поделиться

Существуют различия между a, b = b, a + b и a = bb = a + b. Давайте рассмотрим следующие два примера: eg1:

a,b = 0,1
while a<10:
  print(a)
  a,b = b,a+b

#output:
0
1
1
2
3
5
8

eg2:

a,b = 0,1
while a<10:
  print(a)
  a=b
  b=a+b
#output:
0
1
2
4
8

Это связано с тем, что интерпретатор всегда сначала вычисляет цифры в правой части знака Equals. Результаты вычислений будут присваиваться переменным, которые слева, только если все вычисления выполнены с правой стороны.

0
ответ дан Shaun T 24 August 2018 в 01:10
поделиться
Другие вопросы по тегам:

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