スコープについて知りたいのです
以下のコードは
func関数内でグローバル空間のcを持ってきてprintで1を表示した後にグローバル空間cに100を代入を
試みる
しかしfunc内でグローバル空間の変数と同じ変数名を宣言しているためLEGBにのっとりグローバル空間へのcへの参照が行われなくてエラーになるね
というものを表すコードです
###コード例
c =1 def func(): print(c) c = 100
一見納得できそうなのですがいまいち引っかかります
言いたいことはわかるのですがprint(C)の時点ではC=100は宣言されてないので
global空間への参照が失われるのはおかしいような気がします。
funcが呼び出されたときにfunc内の処理を順番に処理せず
あらかじめ関数内で宣言している変数を先に探して処理をしているということであれば納得できるのですが、
実際実行処理する際はpythonはどのような順番で処理をしていっているのでしょうか?
---------------------追記-------------------------
質問の仕方が悪かったので変えさせていただきます!
以下が分かる方お願いします!
・print(c)がエラーが起こるのはグローバル空間への参照が失われてるから
・ではなぜ参照が失われているのか、それはcに代入することで新たに関数内でcという変数を宣言しているからすよね
・よってprint(c)は変数未定義でエラーとなる
ここで生じてくる疑問が1つあります
参照が失われる ということができるのは関数内で同じcという変数が宣言されていることがわからないとできないことですよね?
同じcという変数が宣言されていることが分かっているので参照が失われる
しかし変数が宣言されていることが分かっているのであれば変数未定義のエラーになるのはおかしいのでないか?
ということです
回答5件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/12/12 13:40