2012-03-13 13 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?" 

コメントの下の行が最初に行うことは、関数divideを呼び出すことです。私は好奇心が強い、なぜそれはそれをするのですか?それはPythonが実際に操作の順序を理解しているか、この行にあるチェーン構造のためですか?このようなコードがこのように動作するのはなぜですか?

答えて

2

考えてみてください。 subtract()の結果がわからないときは、どのようにadd()に電話しますか? multiply()の結果がわからない場合は、subtract()にどのように電話しますか?最後に、divide()の結果がわからない場合は、multiply()とはどのように電話しますか?

代数表記と同様に、カッコ内の演算が最初に行われます。カッコ内に括弧がある場合、最も内側の操作が最初に実行されます。他の方法では動作しません。

3

関数を呼び出す前に、Pythonはその関数に渡されたパラメータを評価しなければなりません。

この原則を再帰的に適用するのは、最初にdivide()を呼び出すことだけです。これより前に、他にはない引数を指定してください(これは他の選択肢ではありません)。関数が知られている。

0

Python(および関数を持つ任意の言語)は、関数呼び出しの操作の順序を理解しています。

あなたは、いくつかの関数f()、G()、およびH()、G()を呼び出すために、時間()の結果をニーズ

f(g(h())) 

のような文、および結果を持っている場合f()を呼び出す前にg(h())の値が必要です。

1

答えは簡単です。すべての関数は、呼び出す前に評価する必要があります。が機能しています。この場合

:あなたはheightの値を計算する必要がありsubtract(...)の値を計算するにはage

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

の値を計算する必要がありadd(...)の値を計算するに

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

multiply(weight, divide(iq, 2)) 

など。