回答編集履歴
1
書きかけの回答を完成
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の呼び出しを書けばそれも同じように実行されます。
|