回答編集履歴

3

追記

2018/07/25 04:15

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -31,3 +31,71 @@
31
31
 
32
32
 
33
33
  idが変わってしまうのは、オブジェクトを作り直す以上仕方のないことです。
34
+
35
+
36
+
37
+ ---
38
+
39
+ > モジュール空間の汚染を避けるためにスコープを切る
40
+
41
+
42
+
43
+ Pythonのif文はスコープを作りませんので、確かに空間を汚染します。
44
+
45
+ [Qiita - if _name_ == '_main_' の下にコードをダラダラと書く人、挙手しなさい](https://qiita.com/pashango2/items/57d8a08e53a4548fb5ad)
46
+
47
+
48
+
49
+ 他言語と比較してみるとこんな感じです。
50
+
51
+ ```Python
52
+
53
+ if True:
54
+
55
+ answer = 42
56
+
57
+
58
+
59
+ print(answer)
60
+
61
+ ```
62
+
63
+
64
+
65
+ このPythonコードはエラーにならないです。[Wandbox](https://wandbox.org/permlink/k7aZXhHmqNmWJ7vt)
66
+
67
+
68
+
69
+ ```C
70
+
71
+ #include <stdbool.h>
72
+
73
+ #include <stdio.h>
74
+
75
+
76
+
77
+ int main(void) {
78
+
79
+ if(true) {
80
+
81
+ int answer = 42;
82
+
83
+ }
84
+
85
+
86
+
87
+ printf("%d\n", answer);
88
+
89
+
90
+
91
+ return 0;
92
+
93
+ }
94
+
95
+ ```
96
+
97
+
98
+
99
+ 一方、このCコードはエラーが出ます。[Wandbox](https://wandbox.org/permlink/EsQTbiax4BRETWmD)
100
+
101
+ C言語のifブロックはスコープを作るからです。

2

追記

2018/07/25 04:15

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -14,6 +14,8 @@
14
14
 
15
15
  Data = []
16
16
 
17
+ print(id(Data))
18
+
17
19
  Data = add(Data)
18
20
 
19
21
  print(id(Data))

1

追記

2018/07/25 04:08

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -1,14 +1,12 @@
1
1
  変数をグローバルに取り扱う方法もある分にはあります。
2
2
 
3
- しかし、デバッグが非常に面倒になるので普通は引数としてやり取りします。
3
+ しかし、デバッグが非常に面倒になるので普通は引数及び返り値としてやり取りします。
4
4
 
5
5
  ```Python
6
6
 
7
7
  def add(arg):
8
8
 
9
- a = [1,2,3] # このコードは無意味
10
-
11
- print(id(arg))
9
+ return [1, 2, 3]
12
10
 
13
11
 
14
12
 
@@ -16,7 +14,7 @@
16
14
 
17
15
  Data = []
18
16
 
19
- add(Data)
17
+ Data = add(Data)
20
18
 
21
19
  print(id(Data))
22
20
 
@@ -27,3 +25,7 @@
27
25
  main()
28
26
 
29
27
  ```
28
+
29
+
30
+
31
+ idが変わってしまうのは、オブジェクトを作り直す以上仕方のないことです。