Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
importを理解したかった
Search
tera
February 20, 2017
0
650
importを理解したかった
平成29年2月18日(土): 第四回 帰ってきたhojiroLT にて話しました未完のスライドです
tera
February 20, 2017
Tweet
Share
More Decks by tera
See All by tera
ピッてやるとシュッてなるやつを作った話
tera
0
260
Pythonを読む
tera
0
220
RustでShell作ろう
tera
0
930
HTTPをしゃべろう~Firefoxになるために~
tera
0
230
Featured
See All Featured
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
111
20k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
6k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
131
19k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
139
34k
Thoughts on Productivity
jonyablonski
70
4.8k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.5k
Optimising Largest Contentful Paint
csswizardry
37
3.4k
Testing 201, or: Great Expectations
jmmastey
45
7.6k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
580
Side Projects
sachag
455
43k
Designing for humans not robots
tammielis
253
25k
The Language of Interfaces
destraynor
161
25k
Transcript
importを 理解できなかった話 @tera_3939
自己紹介 • Twitter:@tera_3939 • 手書きレポート・正弦波学科 • 許さねえぞ
アジェンダ • 謝罪 • importについて • __import__()が行う処理 • hook
アジェンダ • 謝罪 • importについて • __import__()が行う処理 • hook
スライドができませんでした
理由:怠惰
importとは • あるモジュールのコードから他のモジュールのコードをイン ポートすること • import math • from math
import pi • 他の言語だとuseとかusingとか
importの方法 • import文を使う • importlib.import_module()を使う • __import__()を使う(非推奨)
importの方法 • import文を使う ← これにちょっかいする • importlib.import_module()を使う • __import__()を使う(非推奨)
import文の処理 • 指定されたモジュール名を検索する • 適切な引数で__import__()を呼び出す • 見つかったら指定された名前にそのモジュールを束縛する • import math
-> mathという名前にmathを束縛 • import math as m -> mという名前にmathを束縛
import文の処理 • 指定されたモジュール名を検索する • 適切な引数で__import__()を呼び出す • 見つかったら指定された名前にそのモジュールを束縛する • import math
-> mathという名前にmathを束縛 • import math as m -> mという名前にmathを束縛
__import__()の処理 • sys.modulesを検索する • すでに読み込まれているモジュールのキャッシュ • 見つからなければimport機構が起動する • 有る場合はそのモジュールのmodule specを返す
• module specはモジュールのロードに使われるオブジェクト • 無い場合はImportErrorになる
import機構 • ファインダー, ローダーと呼ばれるオブジェクトが使用される • ファインダー • モジュールが見つかった場合module specを返す •
ローダー • モジュールをロードする • module specのloader属性に詰め込まれる
importをhookする • sys.meta_pathに自作ファインダーを加える • sys.path_hooksに自作ファインダーを加える • sys.path内のパスを処理する際に使用される
sys.meta_path • メタパス・ファインダー・オブジェクトのリスト • このオブジェクトが持つメソッドfind_spec()を順に呼び出す • モジュールが見つかればmodule specを返す • 見つからなければNoneを返す
おしまい • ごめんなさい…… • そのうちブログにまとめます……