teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

参照追加

2021/12/19 11:17

投稿

ppaul
ppaul

スコア24672

answer CHANGED
@@ -1,6 +1,6 @@
1
1
  関数```mkhead```の中で定義したローカル変数```goukei```は、関数```dbdata```からは見えません。
2
2
 
3
- そこまじめに考えて方が良いでしょう。
3
+ そこを解決するにはまじめに考えて方が良いでしょう。
4
4
 
5
5
  手抜きで修正するなら、
6
6
 
@@ -16,4 +16,10 @@
16
16
  global goukei
17
17
  goukei = 0
18
18
  ```
19
- のように、global宣言を入れれば、```local variable referenced before assignment``` のエラーは出なくなります。
19
+ のように、global宣言を入れれば、```local variable referenced before assignment``` のエラーは出なくなります。
20
+
21
+ [公式ドキュメント 4. 実行モデル 4.2. 名前づけと束縛 (naming and binding)](https://docs.python.org/ja/3/reference/executionmodel.html#naming-and-binding)には以下のように書かれています。
22
+
23
+ ある名前がブロック内で束縛されているなら、 nonlocal や global として宣言されていない限り、それはそのブロックのローカル変数 (local variable) です。 ある名前がモジュールレベルで束縛されているなら、その名前はグローバル変数 (global variable) です。 (モジュールコードブロックの変数は、ローカル変数でも、グローバル変数でもあります。) ある変数があるコードブロック内で使われていて、そのブロックで定義はされていないなら、それは自由変数 (free variable) です。
24
+
25
+ これをよく読むとわかるのですが、最初は難しいかもしれません。