$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
importを理解したかった
Search
tera
February 20, 2017
0
660
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
240
Featured
See All Featured
RailsConf 2023
tenderlove
30
1.3k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
22k
Principles of Awesome APIs and How to Build Them.
keavy
127
17k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.8k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
359
30k
Bash Introduction
62gerente
615
210k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.3k
A Tale of Four Properties
chriscoyier
162
23k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
9
1k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
710
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
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を返す
おしまい • ごめんなさい…… • そのうちブログにまとめます……