概要(from import は「必要な名前だけを直接使えるようにする」ための記法)
from import は、モジュール全体ではなく“特定の関数・クラス・定数”だけを取り出して、前置なしで直接使えるようにする構文です。呼び出しが短く書け、読みやすさが上がります。ただし「どのモジュール由来か」が行だけでは分かりにくくなるため、使いどころを見極めるのが大切です。
from math import sqrt, pi
print(sqrt(9)) # 3.0
print(pi) # 3.14159...
Python基本構文と振る舞い(ここが重要)
モジュールから特定の名前を取り出す
書式は「from モジュール import 名前」。複数ならカンマ区切りで並べます。取り出した名前は、その場で普通の関数や定数と同じように使えます。
from datetime import date, datetime
print(date.today())
print(datetime.now().isoformat())
Python別名(as)で読みやすく整える
名前が長い、衝突しそう、慣習的な短縮形にしたい場合は as で別名にできます。読み手が一目で意図を掴める別名を選びましょう。
from pathlib import Path as P
data = P("data") / "input.csv"
print(data)
Pythonモジュールごとの import との違い(名前空間前置の有無)
import math のような“モジュールごと”は「math.sqrt」のように名前空間を前置して使います。from import は前置不要で短い反面、どのモジュールの関数かがパッと見で分かりにくくなります。公共の API や大規模プロジェクトでは、バランスが重要です。
import math
from math import sqrt
print(math.sqrt(16)) # 名前空間つき
print(sqrt(16)) # 直接呼び出し
Pythonワイルドカードと all(取り込み過ぎの危険と制御)
from モジュール import * は基本的に避ける
「*」はモジュール内の公開名を丸ごと取り込みますが、衝突や上書き、出所不明で可読性低下などのデメリットが大きいです。学習用以外では使わないのが安全です。
# 非推奨
# from math import *
Pythonall で“公開名”を制御できる(モジュール側の話)
モジュール作者は all = [“name1”, “name2”] を定義すると、「import *」で取り込まれる名前を限定できます。利用側は基本的に明示的な from import を使い、公開範囲に依存しないのが無難です.
# mymod.py
__all__ = ["greet"]
def greet(): ...
def _internal(): ... # これは * で出ない
Python実務での使いどころと設計の勘所(深掘り)
「頻出で意味が一意」の名前だけを取り出す
sqrt、Path、Counter、datetime など、文脈が明確で衝突しにくい名前は from import の対象に向いています。一方、generic な名前(open、load、process など)は衝突しやすいので、モジュール前置の方が安全です。
from collections import Counter
from pathlib import Path
cnt = Counter(["tea", "coffee", "tea"])
cfg = Path("config.yaml")
Python競合や上書きを避けるための別名
同名関数が複数モジュールにある場合や、自分の関数名とぶつかる場合は as で明確に区別します。衝突は“静かに発生して静かに壊す”ので、初手で避ける姿勢が大事です。
from json import loads as json_loads
from yaml import safe_load as yaml_load
data1 = json_loads('{"a":1}')
data2 = yaml_load("a: 1")
Pythonimport の位置と副作用の管理
from import でも通常の import でも、モジュールのトップレベルコードは読み込み時に一度だけ実行されます。関数冒頭での“遅延 import”は循環依存の回避や起動時間短縮に有効ですが、基本はファイル先頭でまとめて書く方が読みやすく保守しやすいです。
# 循環依存の回避が必要なケースのみ
def handler():
from .service import run
return run()
Python相対/絶対インポートとパッケージ(階層での from import)
絶対インポートで“出所”を明確にする
パッケージ構造なら「from project.core.model import predict」のように絶対インポートが読みやすく、ツール補完も効きます。公開 API では絶対インポートが基本線です。
from myapp.core.model import predict
Python相対インポートは“内部関係”の簡潔化に使う
同一パッケージ内の参照なら相対インポートで簡潔に書けます。外部には公開されない内部依存を示すのに向いています。
# data/loader.py
from ..core.model import predict
Python例題で身につける(定番から一歩先まで)
例題1:from import で短く、読みやすく
from math import sqrt, pi
def circle_len(r: float) -> float:
return 2 * pi * r
print(sqrt(16), circle_len(3))
Python例題2:as で衝突を避ける
from json import dumps as to_json
from datetime import datetime as dt
payload = {"time": dt.now().isoformat(), "ok": True}
print(to_json(payload))
Python例題3:標準モジュールの組み合わせ
from pathlib import Path
from shutil import copyfile
src = Path("data/input.txt")
dst = Path("data/output.txt")
copyfile(src, dst)
Python例題4:パッケージ内の相対インポート
# pkg/data/loader.py
from ..core.reader import read_csv
def load_and_sum(path):
rows = read_csv(path)
return sum(int(r["qty"]) for r in rows)
Pythonまとめ
from import は「必要な名前だけを直接使える」便利な構文で、呼び出しを短くして読みやすさを高めます。頻出で意味が一意の名前に絞り、衝突しそうなら as で別名を付ける。ワイルドカードは避け、公開 API では出所が明確な絶対インポートを基本に。遅延 import は例外的な循環回避や起動最適化に限定し、普段は先頭でまとめて管理する。この線を守れば、初心者でも安全で見通しの良い import 設計ができます。
