2012-03-13 14 views
0

私はこれをPythonでやりたいと思っています。私たちが実際にやっていることを取り出し、それを本当に決して終わらないこのばかげた例に置き換えました。 < ==> bが有限であると仮定してください。私たちのコードにはサイクルを終了するロジックがあります。python 2.7プロトタイプ/前方参照

前bでbを呼び出すときにエラーが発生すると心配です。しかし、前にdef bを実行する呼び出しをしない限り、問題はないはずです。本当の答えは何ですか?そして、何のpythonはそれを作るために舞台裏でやっているではないライン2上の出口(B())

def a(): 
    b() 

def b(): 
    a() 

b() 
+0

なぜこれを試してみませんか?あなたのローカルマシンでこれを扱うという面倒を本当に望んでいなければ、http://ideone.comで試してみてください。 – Marcin

+0

私はそれを試してみました。私は明らかになぜそれが動作するのかについての部分を追加することを忘れていた。私はそれを編集した。 – Jake

+0

@ジェイク:私はあなたの編集の最後の文を取得しません。なぜスクリプトは2行目で終了するのですか? –

答えて

3

本当の答えはaの定義の中bbの定義内aについても同様にモジュールスコープで見上げるとされるということです。両方の定義が処理された後にabが両方ともモジュールスコープに存在するため、相互再帰が機能します。

(名前abは、関数定義内で、シャドウが、私はあなたがそれを避けるために管理しますと仮定されている場合には動作を停止します。)

参照this question Pythonのスコープ規則の概要について。

+0

素晴らしい。両方とも、それがうまくいく理由と理由を説明します。 – Jake

1

これは1000回の呼び出しの再帰の深件まで、正常に動作します。それが問題なのかどうかは、それをどのように使っているのかによって異なります。

詳細を見つけるために再帰関数の検索を行うチェックが...

+1

これは答えではありません。 – Marcin

+0

答えは事実です。 「それはうまくいく」という問いに答えます。 – Jake

+0

@Marcin - それは答えです。コードがうまくいくかどうか質問します。 – fraxel

関連する問題