2017-02-19 22 views
0

私は少し疲れていたので、文字列は不変だった場合、私はちょうどテストを中心に遊んでいた:Dこの再帰呼び出しと変数の代入・エラー[Pythonの]

def x(string = "a", y = 0): 
    if y == 5: 
     return 
    else: 
     string += "x" 
     print(string) 
     x(string, y = y + 1) 
     print(string) 
x() 

を作り、これはしかし

作品、なぜ私は単に疑問に思って
def x(string = "a", y = 0): 
    if y == 5: 
     return 
    else: 
     string += "x" 
     print(string) 
     x(string, y += 1) 
     print(string) 
x() 

機能しません(再帰呼び出しでのy変数の割り当ての違い)。なぜそれは構文エラーですか、彼らは単に同じことをやっているのですか?

+0

構文エラーは、pythonがこの入力をその文法で受け入れることができないことを意味します。 – gzc

+0

これは、構文エラーを生成するための多くのコードです。可能な限り小さなコードで同じエラーを生成し、再帰と文字列を忘れてください。 –

+0

'x()'の再帰呼び出しの後に 'y'を印刷してみてください。変更されていないことがわかります。 'x()'関数呼び出しで 'y'に代入されていないキーワードarg' y'を使用しています。 – AChampion

答えて

2

最初のバージョンでは、パラメータyが変数y、+1の値をとることを関数に伝えます。パラメータがzの場合、x(string, z=y+1)となります。

ご覧のとおり、y+=1は機能しません。変数を変更しようとしていますが、名前付きパラメータには機能しません。しかし+=は何も返さないので、構文は間違っています。

+0

しかしy = y + 1は何も返さない – user7404408

+0

この場合のyは、my_param = y + 1のようにパラメータ名であり、代入ではなく名前付きパラメータを関数に渡します。 –

関連する問題