importとfrom〜importについてもうすこし
モジュールのインポートについては以前学びましたがいまいち理解が追いついていなかったのでもっかいおさらい。
importで読み込んだものがなんなのか、typeで調べてみます。
helloworld関数を持つtest.pyを用意します。
# -- test.py -- def helloworld(): print("Hello World!")
# -- main.py -- import test print(type(test))
$ py main.py <class 'module'>
moduleですね。
次にfooというディレクトリを置いてそれをimportしてみます。
import foo print(type(foo))
$ py main.py <class 'module'>
これもmoduleですね。importに指定できるのはファイルやディレクトリのみでそれらはmoduleとして扱われます。
importに指定できるのはこのmoduleのみです。それ以外は例外となります。
import test.helloworld
$ py main.py Traceback (most recent call last): File "main.py", line 4, in <module> import test.helloworld ModuleNotFoundError: No module named 'test.helloworld'; 'test' is not a package
helloworldは関数なので例外になる感じですね。
次はfrom〜importですが、コレも基本的にはimportと同じです。
違う点はfromに指定できるのがmoduleでimportには関数やmodule等何でも指定できるといったかんじですか。
from test import helloworld helloworld()
$ py main.py Hello World!
まとめとして
- importの場合、moduleのみ指定できる
- from〜importの場合、fromにはmoduleのみ指定、importには関数やmodule等何でも指定できる
ってかんじですかね。これだけ覚えておけば今後迷うことはないかなと。