回答編集履歴
5
修正
test
CHANGED
@@ -82,7 +82,7 @@
|
|
82
82
|
|
83
83
|
|
84
84
|
|
85
|
-
そして、プロパティ位置に置かれた識別値や数値は、**引用符で囲まなくても、自動的に文字列として解釈**されるようです。
|
85
|
+
そして、プロパティ位置に置かれた識別値や数値は、**引用符で囲まなくても、自動的に文字列として解釈**されるようです。(※「1st_key」のように先頭が数字になっているものや途中に空白があるもの等は引用符を省略できません)
|
86
86
|
|
87
87
|
つまり{v: 3} と書くと {"v": 3} と書いたものとして解釈されます。
|
88
88
|
|
4
追記
test
CHANGED
@@ -30,7 +30,7 @@
|
|
30
30
|
|
31
31
|
ただ、pythonでも、can110さんが結果を書いているように
|
32
32
|
|
33
|
-
```
|
33
|
+
```lang-python
|
34
34
|
|
35
35
|
v = "keystr" # <=文字列なら何でもいいです。
|
36
36
|
|
@@ -62,11 +62,11 @@
|
|
62
62
|
|
63
63
|
### javascript:「オブジェクト」との関係、ラクに速くスクリプトを書けること
|
64
64
|
|
65
|
-
javascriptにおけるa = {v: 3}というのは、
|
65
|
+
javascriptにおけるa = {v: 3}というのは、オブジェクトに対するプロパティの定義です。
|
66
66
|
|
67
67
|
これは
|
68
68
|
|
69
|
-
```
|
69
|
+
```lang-javascript
|
70
70
|
|
71
71
|
var a = new Object();
|
72
72
|
|
@@ -82,7 +82,7 @@
|
|
82
82
|
|
83
83
|
|
84
84
|
|
85
|
-
そして、
|
85
|
+
そして、プロパティ位置に置かれた識別値や数値は、**引用符で囲まなくても、自動的に文字列として解釈**されるようです。
|
86
86
|
|
87
87
|
つまり{v: 3} と書くと {"v": 3} と書いたものとして解釈されます。
|
88
88
|
|
@@ -96,7 +96,7 @@
|
|
96
96
|
|
97
97
|
|
98
98
|
|
99
|
-
javascriptでは、わざわざ引用符を書かなくてもプロパティ位置に指定されたものを文字列として扱うことで、引用符を
|
99
|
+
javascriptでは、わざわざ引用符を書かなくてもプロパティ位置に指定されたものを文字列として扱うことで、引用符を書く手間をなくしている(と私は推測しています)
|
100
100
|
|
101
101
|
|
102
102
|
|
@@ -104,23 +104,39 @@
|
|
104
104
|
|
105
105
|
引用符のペアをそろえていないとエラーになりますし、
|
106
106
|
|
107
|
+
```lang-javascript
|
108
|
+
|
107
109
|
var myBox = new Object;
|
108
110
|
|
109
|
-
myBox = {front:{color:{type:'high', 'code':'#ffffff'}}};
|
111
|
+
myBox = {front: {color: {type: 'high', 'code': '#ffffff'}}};
|
112
|
+
|
113
|
+
```
|
110
114
|
|
111
115
|
というように、プロパティを引用符なしで定義でき、
|
112
116
|
|
117
|
+
```lang-javascript
|
118
|
+
|
113
119
|
c = myBox.front.color.code;
|
114
120
|
|
121
|
+
```
|
122
|
+
|
115
123
|
と引用符なしでプロパティにアクセスできるのは便利です。
|
116
124
|
|
117
125
|
|
118
126
|
|
119
|
-
(
|
127
|
+
(pythonで外部ライブラリを使わず普通に辞書を使うとなると
|
120
|
-
|
128
|
+
|
121
|
-
|
129
|
+
```lang-python
|
122
|
-
|
130
|
+
|
123
|
-
|
131
|
+
myBox = {"front": {"color": {"type": "high", "code": "#ffffff"}}}
|
132
|
+
|
133
|
+
c = myBox["front"]["color"]["code"]
|
134
|
+
|
135
|
+
```
|
136
|
+
|
137
|
+
とする必要があります)
|
138
|
+
|
139
|
+
|
124
140
|
|
125
141
|
|
126
142
|
|
@@ -136,7 +152,7 @@
|
|
136
152
|
|
137
153
|
そのかわり、javascriptと異なり、未定義の変数に該当する文字列を文字列としてのキーに指定する場合は必ず引用符で囲まなければなりません。(でなければ上記のようにNamedErrorが出てしまいます)
|
138
154
|
|
139
|
-
pythonはjavascript
|
155
|
+
pythonの辞書はjavascriptのオブジェクトに比べると、記述に手間がかかる・・・?
|
140
156
|
|
141
157
|
|
142
158
|
|
@@ -148,7 +164,7 @@
|
|
148
164
|
|
149
165
|
javascriptの例のように
|
150
166
|
|
151
|
-
var v = "keystr" としたあとで
|
167
|
+
var v = "keystr" としたあとで a={v:3}としたら
|
152
168
|
|
153
169
|
aは{"keystr":3} ではなく、 {"v":3}‘となってしまうのは、直感に反するような気がしませんか?
|
154
170
|
|
@@ -156,7 +172,7 @@
|
|
156
172
|
|
157
173
|
辞書のキーに(hashableなものに限りますが)変数を指定できるからこそ
|
158
174
|
|
159
|
-
```
|
175
|
+
```lang-python
|
160
176
|
|
161
177
|
if 64 < i < 64 + 26 + 1:
|
162
178
|
|
@@ -170,7 +186,7 @@
|
|
170
186
|
|
171
187
|
とか
|
172
188
|
|
173
|
-
```
|
189
|
+
```lang-python
|
174
190
|
|
175
191
|
s = {chr(i): i for i in range(65, 65 + 26)}
|
176
192
|
|
@@ -186,7 +202,23 @@
|
|
186
202
|
|
187
203
|
|
188
204
|
|
205
|
+
※もちろんjavascriptでも、
|
206
|
+
|
207
|
+
```lang-javascript
|
208
|
+
|
209
|
+
var a = new Object();
|
210
|
+
|
211
|
+
var k = 'DUMMY';
|
212
|
+
|
213
|
+
a[k] = 0; //a['DUMMY'] = 0; または a.DUMMY = 0; と同じ
|
214
|
+
|
215
|
+
```
|
216
|
+
|
189
|
-
|
217
|
+
というように、連想配列を使うことで同じようなことはできます。
|
218
|
+
|
219
|
+
|
220
|
+
|
221
|
+
pythonでも、[attrdict](https://pypi.org/project/attrdict/)という外部ライブラリを使うことで、辞書をドットでアクセスすることは可能です。
|
190
222
|
|
191
223
|
|
192
224
|
|
3
javascriptのオブジェクトに関する修正
test
CHANGED
@@ -1,27 +1,25 @@
|
|
1
|
+
まず前提として、javascriptにおけるa = { v: 3 } というのはjavascriptのオブジェクトに関係している一方、
|
2
|
+
|
3
|
+
pythonにおける a = { v: 3 } というのはpythonの辞書に関係しており、書き方は似ていますが別物です。
|
4
|
+
|
5
|
+
|
6
|
+
|
1
|
-
質問者さんの問題を整理すると、
|
7
|
+
そのうえで質問者さんの問題を整理すると、
|
2
8
|
|
3
9
|
1. javascriptでは、**初出の文字v**に関して
|
4
10
|
|
5
|
-
|
6
|
-
|
7
|
-
var a = { v: 3 }
|
11
|
+
var a = { v: 3 };
|
8
|
-
|
9
|
-
|
10
12
|
|
11
13
|
を実行しても特にエラーが出ませんが、
|
12
14
|
|
15
|
+
|
16
|
+
|
13
17
|
2. pythonでは**未定義の変数v**に対して
|
14
18
|
|
15
|
-
|
16
|
-
|
17
19
|
a = {v: 3}
|
18
20
|
|
19
|
-
|
20
|
-
|
21
21
|
を実行すると、
|
22
22
|
|
23
|
-
|
24
|
-
|
25
23
|
NameError: name 'v' is not defined
|
26
24
|
|
27
25
|
|
@@ -62,15 +60,29 @@
|
|
62
60
|
|
63
61
|
|
64
62
|
|
65
|
-
### javascript
|
63
|
+
### javascript:「オブジェクト」との関係、ラクに速くスクリプトを書けること
|
64
|
+
|
66
|
-
|
65
|
+
javascriptにおけるa = {v: 3}というのは、「オブジェクト」の作成です。
|
66
|
+
|
67
|
-
|
67
|
+
これは
|
68
|
+
|
68
|
-
|
69
|
+
```
|
70
|
+
|
71
|
+
var a = new Object();
|
72
|
+
|
73
|
+
a.v = 3;
|
74
|
+
|
75
|
+
```
|
76
|
+
|
77
|
+
というように、オブジェクトを作ってから、vというプロパティに値を代入する形でも書けます。
|
78
|
+
|
79
|
+
|
80
|
+
|
69
|
-
javascriptでオブジェクトの
|
81
|
+
javascriptでオブジェクトのプロパティに使用できるのは、一定の条件に該当する識別値か、引用符で囲まれた文字列、もしくは数値に限られるようです。(間違っていたらすみません)
|
70
|
-
|
71
|
-
|
72
|
-
|
82
|
+
|
83
|
+
|
84
|
+
|
73
|
-
そして、キー位置に置かれた識別値は、**引用符で囲まなくても、自動的に文字列として解釈**されるようです。
|
85
|
+
そして、キー位置に置かれた識別値や数値は、**引用符で囲まなくても、自動的に文字列として解釈**されるようです。
|
74
86
|
|
75
87
|
つまり{v: 3} と書くと {"v": 3} と書いたものとして解釈されます。
|
76
88
|
|
@@ -78,21 +90,33 @@
|
|
78
90
|
|
79
91
|
としたあとで
|
80
92
|
|
81
|
-
var a = {v:3}としても
|
93
|
+
var a = {v:3};としても
|
82
94
|
|
83
95
|
aは{"keystr": 3} ではなく、 {"v": 3} になります。
|
84
96
|
|
85
97
|
|
86
98
|
|
87
|
-
javascriptでは、わざわざ引用符を書かなくても
|
99
|
+
javascriptでは、わざわざ引用符を書かなくてもプロパティ位置に指定されたものを文字列として扱うことで、引用符を描く手間をなくしている(と私は推測しています)
|
88
|
-
|
89
|
-
|
90
|
-
|
100
|
+
|
101
|
+
|
102
|
+
|
91
|
-
たった「"」2回といえど、何行も書くとなると結構時間の無駄になりますよね?
|
103
|
+
たった「"」2回といえど、何行も書くとなると結構時間の無駄になりますよね?
|
104
|
+
|
92
|
-
|
105
|
+
引用符のペアをそろえていないとエラーになりますし、
|
106
|
+
|
93
|
-
|
107
|
+
var myBox = new Object;
|
108
|
+
|
94
|
-
|
109
|
+
myBox = {front:{color:{type:'high', 'code':'#ffffff'}}};
|
110
|
+
|
111
|
+
というように、プロパティを引用符なしで定義でき、
|
112
|
+
|
113
|
+
c = myBox.front.color.code;
|
114
|
+
|
115
|
+
と引用符なしでプロパティにアクセスできるのは便利です。
|
116
|
+
|
117
|
+
|
118
|
+
|
95
|
-
(なお、変数として使えない文字列は、引用符なしで
|
119
|
+
(なお、変数として使えない文字列は、引用符なしでプロパティとして書くことはできないようです。
|
96
120
|
|
97
121
|
例えば{1a:"abc”}や{This is a pen:"my_pen"} はエラーになります。
|
98
122
|
|
@@ -104,7 +128,7 @@
|
|
104
128
|
|
105
129
|
|
106
130
|
|
107
|
-
上の例では、pythonでは一度定義した変数であれば、任意にキーとして指定できるように見えます。
|
131
|
+
上の例では、pythonでは一度定義した変数であれば、任意に辞書のキーとして指定できるように見えます。
|
108
132
|
|
109
133
|
(繰り返しますが「hashableなものしかキーにできない」という制約はあります)
|
110
134
|
|
@@ -116,7 +140,7 @@
|
|
116
140
|
|
117
141
|
|
118
142
|
|
119
|
-
でも、この「変数をキーとして指定できる」という仕様は、メリットもあると思います。
|
143
|
+
でも、この「変数を辞書のキーとして指定できる」という仕様は、メリットもあると思います。
|
120
144
|
|
121
145
|
|
122
146
|
|
@@ -130,7 +154,7 @@
|
|
130
154
|
|
131
155
|
|
132
156
|
|
133
|
-
キーに(hashableなものに限りますが)変数を指定できるからこそ
|
157
|
+
辞書のキーに(hashableなものに限りますが)変数を指定できるからこそ
|
134
158
|
|
135
159
|
```
|
136
160
|
|
@@ -162,7 +186,7 @@
|
|
162
186
|
|
163
187
|
|
164
188
|
|
165
|
-
※もちろんjavascriptでも、
|
189
|
+
※もちろんjavascriptでも、dict[変数]の形式の連想配列を使うことで同じようなことはできます。
|
166
190
|
|
167
191
|
|
168
192
|
|
@@ -172,6 +196,8 @@
|
|
172
196
|
|
173
197
|
参考にしたもの:
|
174
198
|
|
199
|
+
[MDN オブジェクトでの作業](https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Working_with_Objects)
|
200
|
+
|
175
201
|
[Python における hashable](https://qiita.com/yoichi22/items/ebf6ab3c6de26ddcc09a)
|
176
202
|
|
177
203
|
[連想配列を使ったプロパティへの値の代入と参照](https://www.javadrive.jp/javascript/object/index4.html)
|
2
修正
test
CHANGED
@@ -70,7 +70,7 @@
|
|
70
70
|
|
71
71
|
|
72
72
|
|
73
|
-
そして、キー位置に置かれた識別値は、引用符で囲まなくても、自動的に文字列として解釈され
|
73
|
+
そして、キー位置に置かれた識別値は、**引用符で囲まなくても、自動的に文字列として解釈**されるようです。
|
74
74
|
|
75
75
|
つまり{v: 3} と書くと {"v": 3} と書いたものとして解釈されます。
|
76
76
|
|
1
修正
test
CHANGED
@@ -110,7 +110,7 @@
|
|
110
110
|
|
111
111
|
|
112
112
|
|
113
|
-
そのかわり、javascriptと異なり、未定義の変数に該当する文字列をキーに指定する場合は必ず引用符で囲まなければなりません。(でなければ上記のようにNamedErrorが出てしまいます)
|
113
|
+
そのかわり、javascriptと異なり、未定義の変数に該当する文字列を文字列としてのキーに指定する場合は必ず引用符で囲まなければなりません。(でなければ上記のようにNamedErrorが出てしまいます)
|
114
114
|
|
115
115
|
pythonはjavascriptよりも辞書の記述に手間がかかる・・・
|
116
116
|
|
@@ -120,7 +120,7 @@
|
|
120
120
|
|
121
121
|
|
122
122
|
|
123
|
-
|
123
|
+
プログラミングをやっている立場からすれば、引用符で囲まれていないものは、中身が必ずしも文字列とは限らないというのは日常茶飯事です。
|
124
124
|
|
125
125
|
javascriptの例のように
|
126
126
|
|
@@ -134,7 +134,7 @@
|
|
134
134
|
|
135
135
|
```
|
136
136
|
|
137
|
-
if 64 < i < 64 + 26:
|
137
|
+
if 64 < i < 64 + 26 + 1:
|
138
138
|
|
139
139
|
a = {chr(i): i}
|
140
140
|
|