回答編集履歴

4

変更!

2018/01/18 11:35

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -122,6 +122,8 @@
122
122
 
123
123
  ```
124
124
 
125
+
126
+
125
127
  bbb.py
126
128
 
127
129
  ```Python
@@ -130,6 +132,8 @@
130
132
 
131
133
  ```
132
134
 
135
+
136
+
133
137
  循環importを行いたい時はimportで行いたい処理を切り出し、新規にccc.pyを作成してimportしてくださいな。
134
138
 
135
139
  aaa.py

3

コードタグを修正

2018/01/18 11:35

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -120,13 +120,15 @@
120
120
 
121
121
  import bbb
122
122
 
123
+ ```
124
+
123
125
  bbb.py
124
126
 
125
127
  ```Python
126
128
 
127
129
  import aaa
128
130
 
129
-
131
+ ```
130
132
 
131
133
  循環importを行いたい時はimportで行いたい処理を切り出し、新規にccc.pyを作成してimportしてくださいな。
132
134
 

2

calculationにprint文を追記

2018/01/18 11:30

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -20,178 +20,182 @@
20
20
 
21
21
  # -*- coding: UTF-8 -*
22
22
 
23
+ print(__name__)
24
+
25
+ print('aaa.py caller')
26
+
27
+
28
+
29
+
30
+
31
+ def calculation(n):
32
+
33
+ print('calculation')
34
+
35
+ return 2**n
36
+
37
+
38
+
39
+ ```
40
+
41
+ bbb.py
42
+
43
+ ```Python
44
+
23
45
  # -*- coding: UTF-8 -*
24
46
 
47
+ import aaa
48
+
25
49
  print(__name__)
26
50
 
27
- print('aaa caller')
51
+ print('bbb.py caller')
52
+
53
+
54
+
28
-
55
+ print(aaa.calculation(2))
56
+
57
+
58
+
29
-
59
+ ```
60
+
61
+
62
+
30
-
63
+ python bbb.py
64
+
31
-
65
+ ```Python
66
+
67
+ #出力結果
68
+
69
+ aaa
70
+
71
+ aaa.py caller
72
+
73
+ __main__
74
+
75
+ bbb.py caller
76
+
77
+ calculation
78
+
79
+ 4
80
+
81
+ ```
82
+
83
+ ---
84
+
85
+
86
+
87
+ importで呼び出されたかのかそうでないかは[__name__](https://docs.python.jp/3/library/__main__.html)で判断できます。
88
+
89
+ よって、どちらで呼び出されたのかを意識してソースコードを記述する必要があります。
90
+
91
+
92
+
93
+
94
+
95
+ ■モジュール分割するときのポイント
96
+
97
+ 1,まず各ファイル(モジュール)で行う事を決めてください。
98
+
99
+ できるだけ単一の処理内容になっていることがふさわしいです。
100
+
101
+
102
+
103
+ 2,画面の入力/表示(View)とデータ(Model)を分ける。
104
+
105
+ 画面からの入力された内容に対して、if文で判断していますが
106
+
107
+ a,画面から入力した内容をデータをlistまたはdictに格納する。
108
+
109
+ b,引数で渡されたlist/dictに対して処理を行う。
110
+
111
+ この2つの関数に分けると処理の結合度が低くなります。
112
+
113
+
114
+
115
+ 3,循環するimportは避ける。下記のようなimportです。
116
+
117
+ aaa.py
118
+
119
+ ```Python
120
+
121
+ import bbb
122
+
123
+ bbb.py
124
+
125
+ ```Python
126
+
127
+ import aaa
128
+
129
+
130
+
131
+ 循環importを行いたい時はimportで行いたい処理を切り出し、新規にccc.pyを作成してimportしてくださいな。
132
+
133
+ aaa.py
134
+
135
+ ```Python
136
+
137
+ import ccc
138
+
139
+ ```
140
+
141
+ bbb.py
142
+
143
+ ```Python
144
+
145
+ import ccc
146
+
147
+ ```
148
+
149
+
150
+
151
+ 5,ソースの構成は以下のような形にする。
152
+
153
+ 質問文のコードだとこうなります。
154
+
155
+ ```Python
156
+
157
+ # 1,組み込みライブラリのimport文
158
+
159
+ import os
160
+
161
+ import random
162
+
163
+ from datetime import datetime
164
+
165
+ from tkinter import ttk
166
+
167
+ from tkinter import *
168
+
169
+ # 2,pipでインストールした import文
170
+
171
+ import cv2
172
+
173
+ import pandas as pd
174
+
175
+ import pyautogui
176
+
177
+ #自作したライブラリのimport文
178
+
179
+ #from classfy02 import input_data
180
+
181
+
182
+
183
+ #1,2,3のこの順番でimportすることにより間違ったimportによる名前空間の汚染が防げる事が多いです。
184
+
185
+
186
+
187
+ # 他のモジュールからimport時に公開したい処理
188
+
189
+ # import時はmainメソッドは呼び出されないことに注意すること。
190
+
191
+ # よってmainメソッドの内容に依存する処理は記述してはダメです。
192
+
193
+ # 例)calculationを公開
32
194
 
33
195
  def calculation(n):
34
196
 
35
197
  return 2**n
36
198
 
37
-
38
-
39
- ```
40
-
41
- bbb.py
42
-
43
- ```Python
44
-
45
- # -*- coding: UTF-8 -*
46
-
47
- import aaa
48
-
49
- print(__name__)
50
-
51
- print('bbb caller')
52
-
53
-
54
-
55
- print(aaa.calculation(2))
56
-
57
- ```
58
-
59
-
60
-
61
- python bbb.py
62
-
63
- ```Python
64
-
65
- #出力結果
66
-
67
- aaa
68
-
69
- aaa caller
70
-
71
- __main__
72
-
73
- bbb caller
74
-
75
- 4
76
-
77
- ```
78
-
79
- ---
80
-
81
-
82
-
83
- importで呼び出されたかのかそうでないかは[__name__](https://docs.python.jp/3/library/__main__.html)で判断できます。
84
-
85
- よって、どちらで呼び出されたのかを意識してソースコードを記述する必要があります。
86
-
87
-
88
-
89
-
90
-
91
- ■モジュール分割するときのポイント
92
-
93
- 1,まず各ファイル(モジュール)で行う事を決めてください。
94
-
95
- できるだけ単一の処理内容になっていることがふさわしいです。
96
-
97
-
98
-
99
- 2,画面の入力/表示(View)とデータ(Model)を分ける。
100
-
101
- 画面からの入力された内容に対して、if文で判断していますが
102
-
103
- a,画面から入力した内容をデータをlistまたはdictに格納する。
104
-
105
- b,引数で渡されたlist/dictに対して処理を行う。
106
-
107
- この2つの関数に分けると処理の結合度が低くなります。
108
-
109
-
110
-
111
- 3,循環するimportは避ける。下記のようなimportです。
112
-
113
- aaa.py
114
-
115
- ```Python
116
-
117
- import bbb
118
-
119
- bbb.py
120
-
121
- ```Python
122
-
123
- import aaa
124
-
125
-
126
-
127
- 循環importを行いたい時はimportで行いたい処理を切り出し、新規にccc.pyを作成してimportしてくださいな。
128
-
129
- aaa.py
130
-
131
- ```Python
132
-
133
- import ccc
134
-
135
- ```
136
-
137
- bbb.py
138
-
139
- ```Python
140
-
141
- import ccc
142
-
143
- ```
144
-
145
-
146
-
147
- 5,ソースの構成は以下のような形にする。
148
-
149
- 質問文のコードだとこうなります。
150
-
151
- ```Python
152
-
153
- # 1,組み込みライブラリのimport文
154
-
155
- import os
156
-
157
- import random
158
-
159
- from datetime import datetime
160
-
161
- from tkinter import ttk
162
-
163
- from tkinter import *
164
-
165
- # 2,pipでインストールした import文
166
-
167
- import cv2
168
-
169
- import pandas as pd
170
-
171
- import pyautogui
172
-
173
- #自作したライブラリのimport文
174
-
175
- #from classfy02 import input_data
176
-
177
-
178
-
179
- #1,2,3のこの順番でimportすることにより間違ったimportによる名前空間の汚染が防げる事が多いです。
180
-
181
-
182
-
183
- # 他のモジュールからimport時に公開したい処理
184
-
185
- # import時はmainメソッドは呼び出されないことに注意すること。
186
-
187
- # よってmainメソッドの内容に依存する処理は記述してはダメです。
188
-
189
- # 例)calculationを公開
190
-
191
- def calculation(n):
192
-
193
- return 2**n
194
-
195
199
  # Python ファイル名.pyを実行時に行いたい処理
196
200
 
197
201
  def main():

1

追記

2018/01/18 11:26

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -58,12 +58,10 @@
58
58
 
59
59
 
60
60
 
61
- ```Python
62
-
63
- #実行
64
-
65
61
  python bbb.py
66
62
 
63
+ ```Python
64
+
67
65
  #出力結果
68
66
 
69
67
  aaa