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

回答編集履歴

2

元の回答の間違いについて追記

2018/08/31 03:47

投稿

KSwordOfHaste
KSwordOfHaste

スコア18404

answer CHANGED
@@ -46,4 +46,9 @@
46
46
  (2) 現状のコードではguiの要素はラベルです。変数名はguiではなくlabelsなどの方が自然に思えます。
47
47
  (3) 厳密にはpackはウィジェットを「表示する」のではなく「配置する」機能です。
48
48
  (配置した結果として表示されるようになるので間違いとまでは言いませんが)
49
- (4) 元のコードではコメントを表すのに全角の`#`を使っておられます。「半角の#を使うとteratailのマークダウンの仕様で見出しになってしまう」という意識が働いて(?)あえて全角にしたのかも知れませんが、コード用のマークダウンの内側ではそのような心配はありませんのでPythonの仕様に従い半角`#`で記述してください。そうしないと閲覧者がコピペする際に非常に面倒です。いちいち全角の`#`を半角の`#`に書き換えないと文法エラーになってしまいますので・・・
49
+ (4) 元のコードではコメントを表すのに全角の`#`を使っておられます。「半角の#を使うとteratailのマークダウンの仕様で見出しになってしまう」という意識が働いて(?)あえて全角にしたのかも知れませんが、コード用のマークダウンの内側ではそのような心配はありませんのでPythonの仕様に従い半角`#`で記述してください。そうしないと閲覧者がコピペする際に非常に面倒です。いちいち全角の`#`を半角の`#`に書き換えないと文法エラーになってしまいますので・・・
50
+
51
+ ---
52
+ 追記:hayataka2049さん回答でのコメント欄のやりとりで自分の回答の不備に気づきました。
53
+ ローカル変数の動的生成は`locals()[変数名] = 値`では行えません。
54
+ ただしグローバルなスコープにおいて`locals()`を用いるとその結果はグローバル変数の名前空間を表すdictオブジェクトを返し(そしてグローバス変数の名前空間はこのdictオブジェクトそのものが担うため)グローバル変数の動的生成は可能ではあります。が、そもそもその目的でなら`locals()[変数名] = 値`を使うべきではなく`globals()[変数名] = 値`を使うべきであろうと思います。いずれにせよ「変数の動的生成」を使う必然性は本件ではなさそうという点では最初の回答でコメントしたとおりであります。

1

誤り訂正(ローカル変数の動的生成はできない)

2018/08/31 03:47

投稿

KSwordOfHaste
KSwordOfHaste

スコア18404

answer CHANGED
@@ -19,8 +19,8 @@
19
19
 
20
20
  と書かないと意味が変わってしまいます。実際のコードではループでiを変化させながら代入しているので(A)のようにはかけず(B)と書く必要があります。
21
21
 
22
- # 個人的意見(localsによるローカル変数の動的アクセス)
22
+ # 個人的意見(localsによる~~ローカル~~変数の動的アクセス)
23
- 複数のLabelのインスタンスを「i番目のラベル」のようにアクセスしたいからこそlistとして扱うわけでして、そのようなものをt_0, t_1, ...のようなローカル変数へわざわざlocals()を通じて代入したり参照したりすることに意味を感じません。単に次のようなコードで十分であると思います。
23
+ 複数のLabelのインスタンスを「i番目のラベル」のようにアクセスしたいからこそlistとして扱うわけでして、そのようなものをt_0, t_1, ...のような~~ローカル~~変数へわざわざlocals()を通じて代入したり参照したりすることに意味を感じません。単に次のようなコードで十分であると思います。
24
24
 
25
25
  ```python
26
26
  from tkinter import Tk, ttk, PhotoImage