回答編集履歴
4
追記
answer
CHANGED
@@ -18,4 +18,25 @@
|
|
18
18
|
|
19
19
|
としてインポートすることができるということです。
|
20
20
|
|
21
|
-
循環参照にならないように気をつけなければいけないことと、対話環境などでは`__main__`は見つからずにエラーになることなどが注意点です。
|
21
|
+
~~循環参照にならないように気をつけなければいけない~~循環参照を意識する必要があることと、対話環境などでは`__main__`は見つからずにエラーになることなどが注意点です。
|
22
|
+
|
23
|
+
----
|
24
|
+
|
25
|
+
意図的に循環参照したコードの例
|
26
|
+
|
27
|
+
a.py
|
28
|
+
```python
|
29
|
+
import b
|
30
|
+
|
31
|
+
def x():
|
32
|
+
return 0
|
33
|
+
```
|
34
|
+
|
35
|
+
b.py
|
36
|
+
```python
|
37
|
+
import __main__
|
38
|
+
|
39
|
+
# この時点でxは未定義なのでエラーになる
|
40
|
+
# __main__に含まれる関数を探してもそこにxはない
|
41
|
+
print(__main__.x())
|
42
|
+
```
|
3
蛇足な気がしたので消しました
answer
CHANGED
@@ -8,7 +8,7 @@
|
|
8
8
|
[https://docs.python.org/ja/3/library/__main__.html#module-__main__](https://docs.python.org/ja/3/library/__main__.html#module-__main__)
|
9
9
|
|
10
10
|
----
|
11
|
-
追記
|
11
|
+
追記
|
12
12
|
|
13
13
|
したがってそれ以外のモジュールからは常に
|
14
14
|
|
@@ -18,29 +18,4 @@
|
|
18
18
|
|
19
19
|
としてインポートすることができるということです。
|
20
20
|
|
21
|
-
循環参照にならないように気をつけなければいけないことと、対話環境などでは`__main__`は見つからずにエラーになることなどが注意点です。
|
21
|
+
循環参照にならないように気をつけなければいけないことと、対話環境などでは`__main__`は見つからずにエラーになることなどが注意点です。
|
22
|
-
|
23
|
-
----
|
24
|
-
追記2
|
25
|
-
|
26
|
-
a.py
|
27
|
-
```python
|
28
|
-
import b
|
29
|
-
```
|
30
|
-
|
31
|
-
b.py
|
32
|
-
```python
|
33
|
-
import a
|
34
|
-
|
35
|
-
import __main__
|
36
|
-
|
37
|
-
print(a)
|
38
|
-
print(__main__)
|
39
|
-
|
40
|
-
print(a.__file__)
|
41
|
-
print(__main__.__file__)
|
42
|
-
```
|
43
|
-
|
44
|
-
と書いて`a.py`を実行した時、b.pyで`import __main__`で名前`__main__`に束縛されるモジュールと`import a`で名前`a`に束縛されるモジュールは、**別のモジュール**ですが**同じa.py**です。
|
45
|
-
注意してください。
|
46
|
-
(このあたりもあって質問の"実行ファイルのモジュールを取得する"は意味が曖昧です)
|
2
コード追加
answer
CHANGED
@@ -30,8 +30,15 @@
|
|
30
30
|
|
31
31
|
b.py
|
32
32
|
```python
|
33
|
+
import a
|
34
|
+
|
33
35
|
import __main__
|
36
|
+
|
34
|
-
|
37
|
+
print(a)
|
38
|
+
print(__main__)
|
39
|
+
|
40
|
+
print(a.__file__)
|
41
|
+
print(__main__.__file__)
|
35
42
|
```
|
36
43
|
|
37
44
|
と書いて`a.py`を実行した時、b.pyで`import __main__`で名前`__main__`に束縛されるモジュールと`import a`で名前`a`に束縛されるモジュールは、**別のモジュール**ですが**同じa.py**です。
|
1
追記
answer
CHANGED
@@ -5,4 +5,35 @@
|
|
5
5
|
|
6
6
|
というイディオムを知っていれば分かっているはずですが、実行ファイルのモジュールは常に名前が`__main__`です。
|
7
7
|
|
8
|
-
[https://docs.python.org/ja/3/library/__main__.html#module-__main__](https://docs.python.org/ja/3/library/__main__.html#module-__main__)
|
8
|
+
[https://docs.python.org/ja/3/library/__main__.html#module-__main__](https://docs.python.org/ja/3/library/__main__.html#module-__main__)
|
9
|
+
|
10
|
+
----
|
11
|
+
追記1
|
12
|
+
|
13
|
+
したがってそれ以外のモジュールからは常に
|
14
|
+
|
15
|
+
```python
|
16
|
+
import __main__
|
17
|
+
```
|
18
|
+
|
19
|
+
としてインポートすることができるということです。
|
20
|
+
|
21
|
+
循環参照にならないように気をつけなければいけないことと、対話環境などでは`__main__`は見つからずにエラーになることなどが注意点です。
|
22
|
+
|
23
|
+
----
|
24
|
+
追記2
|
25
|
+
|
26
|
+
a.py
|
27
|
+
```python
|
28
|
+
import b
|
29
|
+
```
|
30
|
+
|
31
|
+
b.py
|
32
|
+
```python
|
33
|
+
import __main__
|
34
|
+
import a
|
35
|
+
```
|
36
|
+
|
37
|
+
と書いて`a.py`を実行した時、b.pyで`import __main__`で名前`__main__`に束縛されるモジュールと`import a`で名前`a`に束縛されるモジュールは、**別のモジュール**ですが**同じa.py**です。
|
38
|
+
注意してください。
|
39
|
+
(このあたりもあって質問の"実行ファイルのモジュールを取得する"は意味が曖昧です)
|