2012-03-13 5 views
0
def add(a, b): 
    print "ADDING %d + %d" % (a, b) 
    return a + b 

def subtract(a, b): 
    print "SUBTRACTING %d - %d" % (a, b) 
    return a - b 

def multiply(a, b): 
    print "MULTIPLYING %d * %d" % (a, b) 
    return a * b 

def divide(a, b): 
    print "DIVIDING %d/%d" % (a, b) 
    return a/b 


print "Let's do some math with just functions!" 

age = add(30, 5) 
height = subtract(78, 4) 
weight = multiply(90, 2) 
iq = divide(100, 2) 

print "Age: %d, Height: %d, Weight: %d, IQ: %d" % (age, height, weight, iq) 



print "Here is a puzzle." 

# why does the line of code below work in this way? 
what = add(age, subtract(height, multiply(weight, divide(iq, 2)))) 

print "That becomes: ", what, "Can you do it by hand?" 

Первое, что делает строка под комментарием, - это вызов функции деления. Мне любопытно, почему это так? Это потому, что python действительно понимает порядок операций или это из-за структуры цепочки, которая имеет эта строка?Почему эта строка кода работает таким образом?

ответ

2

Подумайте об этом. Как вы бы назвали add(), когда вы не знаете, что является результатом subtract()? Как вы бы назвали subtract(), если вы не знаете, что является результатом multiply()? Наконец, как бы вы назвали multiply(), если вы не знаете, что такое результат divide()?

Как и в случае с алгебраическими обозначениями, операции внутри скобок выполняются первыми. Если в круглых скобках есть круглые скобки, сначала выполняются самые внутренние операции. Он не может работать иначе.

3

Перед вызовом функции Python должен оценить параметры, переданные этой функции. (Нет другого выбора - значения параметров могут быть переданы только в том случае, если они известны.)

Применяя этот принцип рекурсивно, единственный выбор - сначала позвонить divide() - до этого аргументы никому другому функции известны.

0

Python (и любой язык с функциями) понимает порядок операций вызовов функций.

Если у вас есть функции f(), г() и H() заявление, как

f(g(h())) 

Нуждается результат ч() для того, чтобы вызвать г(), и результат of g (h()), прежде чем он сможет называть f().

1

Ответ прост - все функции аргументы должны быть оценены перед вызовом.

В этом случае:

what = add(age, subtract(height, multiply(weight, divide(iq, 2)))) 

Для вычисления значения add(...) вы должны вычислить значение age и

subtract(height, multiply(weight, divide(iq, 2))) 

Для расчета стоимости subtract(...) вы должны вычислить значение height и

multiply(weight, divide(iq, 2)) 

и так далее.

Смежные вопросы