4

私はPythonを学んでいて、私がよく理解していない例を見つけました。公式チュートリアルでは、次のコードが与えられている:「デフォルト値を:Pythonのデフォルトパラメータの範囲

i = 5 

def f(arg=i): 
    print(arg) 

i = 6 
f() 

は、C++から来て、これは5を出力します。しかし、私はまた、技術的な説明を理解したいという私のために直感的に理にかなっています定義されたスコープ内の関数定義の点で評価されます。ここで定義されている範囲は何を意味していますか?

+2

* "定義範囲" *は、関数が定義されている範囲を意味します。すなわち、 'def ='行が実行される 'i = 5'を含むものです。参照:http://stackoverflow.com/q/1132941/3001761 – jonrsharpe

+0

"範囲の定義":Pythonでは、ローカルスコープの関数、つまり関数内の関数を持つことができます。 C++で最も近いのはラムダです。これはC++で新しくなっています(Pythonにはlambdaもあります)。 – cdarke

+0

短い答え:デフォルト値は 'f.func_defaults'にタプルとして格納され、その値はあなたのコードに'(5、) 'です。 – gdlmx

答えて

1
1. i = 5 
2. 
3. def f(arg=i): 
4.  print(arg) 
5. 
6. i = 6 
7. f() 

#1で、i = 5が評価され、変数とその値がスコープに追加されます。

3行目で、関数の宣言が評価されます。この時点で、すべてのデフォルト引数も評価されます。 iの値は5なので、argのデフォルト値は5(記号iではありません)です。

iの後に行6の値が変更された場合、argはすでに5になっているため変更されません。