
関数定義の記述は独立したプログラムであるらしく、
関数定義の内部と外部で扱いが異なるそうです。
実験してみます!
# coding:utf-8
#グローバル変数
g=123
print('関数外での変数gの値(ftest実行前:',g)
#テスト用関数
def ftest():
g=456
print('関数内での変数gの値(ftest実行中):',g)
ftest()
print('関数外での変数gの値(ftest実行後):',g)
実行すると
関数外での変数gの値(ftest実行前: 123
関数内での変数Gの値(ftest実行中): 456
関数外での変数gの値(ftest実行後): 123
最後が123に。。なんででしょうか。
これはdefで指定した変数は「違う世界」の変数だからだそうです。
外と内では同じ変数名でも違うものとして扱われるようです。
理由は納得ですが、今の所は概念的な感じがしますね。
慣れていけば当たり前になるのでしょうか?
ここで外のものも関数内で使えるようにする記述があるようなので
付け加えてみます。
# coding:utf-8
#グローバル変数
g=123
print('関数外での変数gの値(ftest実行前:',g)
#テスト用関数
def ftest():
global g
g=456
print('関数内での変数Gの値(ftest実行中):',g)
ftest()
print('関数外での変数gの値(ftest実行後):',g)
関数内にglobal gを追加してみました。
global gは「外で使っている変数を関数内でも使いますよ」という宣言のようでこれで外部のものを使えるようです。
実行してみましょう。
関数外での変数gの値(ftest実行前: 123
関数内での変数Gの値(ftest実行中): 456
関数外での変数gの値(ftest実行後): 456
おおお!できました。外の変数を関数内でも使えるようになりました。
global宣言をするとどこででもアクセスできるようです。