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

回答編集履歴

1

書きかけの回答を完成

2018/04/17 11:06

投稿

KSwordOfHaste
KSwordOfHaste

スコア18404

answer CHANGED
@@ -1,3 +1,28 @@
1
1
  importの動作についての素朴な話と受け取ってコメントをしてみます。
2
2
 
3
- > 呼び出しがない場合は一番上の行のname = 'blogspider'から読み込まれて実行をするというルールがあるのですか?
3
+ > 呼び出しがない場合は一番上の行のname = 'blogspider'から読み込まれて実行をするというルールがあるのですか?
4
+
5
+ Pythonでimportするということはimport先のスクリプトに書いてあることを「書いてある通りに実行すること」なのです。試しに
6
+
7
+ my.py
8
+ ```python
9
+ print('loading my.py')
10
+
11
+ def foo(): pass
12
+ ```
13
+
14
+ main.py
15
+ ```python
16
+ import my
17
+
18
+ print(my.foo)
19
+ ```
20
+
21
+ を同じディレクトリーに置きmain.pyを動かしてみてください。
22
+
23
+ loading my.py
24
+ <class 'function'>
25
+
26
+ と表示されると思います。
27
+
28
+ importは`def`や`class`の定義をロードする機能と考えがちです。それはそれで間違ってないのですがPythonにおけるロードって要するに指定したモジュールのソースに書いてある文を実行することに当たります。宣言とか定義に見える構文も「全て実行される文」なんですね。例えば`def foo():...`と書いてある文はそこに書いてある定義の関数を`foo`という名前に結び付ける実行文です。`class`や代入文なんかも全部そうです。上の例のようにprintの呼び出しを書けばそれも同じように実行されます。