用語比較
importとfrom〜importの違い|名前空間に入る名前・as・*をPython3エンジニア認定基礎試験で判断する
import fiboはモジュール名 fibo だけを現在の名前空間に追加し、from fibo import fib, fib2はモジュール内の指定した名前を直接取り込みます。前者は fibo.fib(1000)、後者は fib(500) のように呼び出します。
from 〜 import で取り込まれるのは指定した名前だけで、モジュール名fiboは定義されません。そのため fibo.fib のようには書けません。
この記事の目次
この記事の根拠と出典
各セクションの見出しの下に、公式資料で確認した内容か編集部の整理かをラベルで示しています。 試験日・料金・申込条件・試験方式は変わることがあるため、申込前に公式サイトで確認してください。
import モジュール名とfrom モジュール名 import 名前の要点
import モジュール名
モジュール名だけを現在の名前空間に追加する。中の関数や変数は「モジュール名.名前」で参照する。
from モジュール名 import 名前
モジュール内の指定した名前を現在の名前空間に直接取り込む。モジュール名そのものは定義されない。
違いを表で確認
| 比較軸 | import モジュール名 | from モジュール名 import 名前 |
|---|---|---|
| 現在の名前空間に追加される名前 | モジュール名(fibo) | 指定した名前(fib, fib2) |
| 関数の呼び出し方 | fibo.fib(1000) | fib(500) |
| モジュール名fiboの扱い | 定義される | 定義されない |
| asによる別名 | import fibo as fib でモジュールをfibという名前で扱える | from fibo import fib as fibonacci でも同じ効果が得られる |
| すべての名前を取り込む書き方 | 該当なし | from fibo import * はアンダースコア(_)で始まるもの以外のすべての名前を取り込む |
Python3エンジニア認定基礎試験の学習に使う書籍(Amazon)
PRどこで迷っているかを切り分ける
importの後にモジュール内の関数名をそのまま呼べると思っている初学者
import fibo が名前空間に追加するのはモジュール名fiboだけです。fib(1000) ではなく fibo.fib(1000) と書きます。
from fibo import fib の後で fibo.fib と書いてしまう人
from 〜 import はモジュール名をローカルな名前空間に取り入れないため、この書き方ではfiboは定義されません。取り込んだ名前fibをそのまま使います。
from 〜 import * を便利な書き方として覚えている再受験者
公式チュートリアルは、* による import は未知の名前が読み込まれ定義済みの名前を上書きする可能性があるため、殆どの場面で使われないと説明しています。対話セッションでキータイプの量を減らすために使うのは構わないともしています。
問題文から答えを選ぶ手順
- 1
import文の形を確認する
import モジュール名 の形ならモジュール名だけが追加されます。from モジュール名 import 名前 の形なら、指定した名前が直接追加されます。
- 2
呼び出し側の書き方と照らし合わせる
fibo.fib(1000) と書けるのはモジュール名fiboが定義されている場合、fib(500) と書けるのは名前fibが取り込まれている場合です。
- 3
asがあれば別名に読み替える
import fibo as fib ならモジュールがfibという名前で、from fibo import fib as fibonacci なら関数がfibonacciという名前で使えます。
- 4
* の場合は取り込まれる名前を確認する
モジュールに対する from fibo import * は、アンダースコアで始まる名前を除いて取り込みます。パッケージに対する from package import * は、__init__.pyに定義された__all__のリストが使われます。
試験での見分け方
- 1import fibo は、モジュール名fiboだけを現在の名前空間に追加する。
- 2from fibo import fib は、名前fibを直接取り込み、fiboは定義しない。
- 3asを付けると、as の後ろの名前でモジュールや関数を扱える。from付きでも同じ効果になる。
- 4from fibo import * は、アンダースコアで始まるもの以外のすべての名前を取り込む。
- 5パッケージの__init__.pyに__all__があれば、from package import * はそのリストのモジュール名を取り込む。
誤答しやすい選択肢
import fibo の後で fib(1000) と呼び出す
修正: import fibo で追加されるのはモジュール名だけです。fibo.fib(1000) のようにモジュール名を付けて呼び出します。
from fibo import fib の後で fibo.fib と書く
修正: from 〜 import ではモジュール名fiboは定義されません。取り込んだ fib をそのまま使います。
from 〜 import * がアンダースコアで始まる名前まで取り込むと考える
修正: from fibo import * はアンダースコア(_)で始まるものを除いてすべての名前をインポートします。
__all__が無くても from package import * でサブモジュールがすべて取り込まれると考える
修正: 公式チュートリアルは、__all__が定義されていなければ、from package import * はサブモジュールを現在の名前空間へimportせず、パッケージで定義されている名前をimportするだけだと説明しています。
確認問題
Q1import fibo を実行した後、fiboのfib関数を呼び出す正しい書き方はどれ?
答え: fibo.fib(1000)
import fibo はモジュール名fiboだけを名前空間に追加するため、関数にはモジュール名を使ってアクセスします。
Q2from fibo import fib, fib2 を実行した後、名前fiboは定義されている?
答え: 定義されていない
from 〜 import はimportの対象となるモジュール名をローカルな名前空間に取り入れません。定義されるのはfibとfib2です。
Q3from fibo import fib as fibonacci を実行した後、fibの関数を呼び出す名前はどれ?
答え: fibonacci
as の後ろに書いた名前で、モジュールや関数を呼び出せるようになります。公式チュートリアルは、import fibo as fib と同じくfrom付きでも同じ効果が得られると説明しています。
到達チェック
- import fibo で名前空間に追加される名前を説明できる
- from fibo import fib の後でfiboが定義されない理由を説明できる
- asによる別名をimportとfrom〜importの両方で書ける
- from fibo import * で取り込まれない名前を挙げられる
- パッケージの__all__とfrom package import *の関係を説明できる
関連ページで確認する
- import 文を個別に確認import fibo で追加されるのがモジュール名だけである点を確認する。
- from 〜 import を個別に確認名前を直接取り込む変型と、モジュール名が定義されない点を確認する。
- モジュールの章を読む第6章モジュールの収録問題の解説で、import文と名前空間の扱いを確認する。
- del文とpop()の違い第5章データ構造から、返り値の有無で選び分ける判断も確認する。
- 位置専用引数とキーワード専用引数の違い同じPython 3 エンジニア認定基礎試験の公式チュートリアルから、関数の引数の指定方法の判断も確認する。
- Python3エンジニア認定基礎試験問題モジュールの問題を横断して演習する。
同じ資格で次に知りたいこと
- リストとタプルの違い|要素を変更できるかどうかをPython3エンジニア認定基礎試験で判断する
リストとタプルの違いを、公式チュートリアルの記述、要素の変更可否、単一要素タプルの書き方、辞書のキーに使えるかどうか、Python 3 エンジニア認定基礎試験での判断手順と確認問題まで解説します。
- isと==の違い|オブジェクトの同一性と値の等価性をPython3エンジニア認定基礎試験で判断する
isと==の違いを、オブジェクトの同一性と値の等価性という調べる対象の違い、リストでの実例、Python 3 エンジニア認定基礎試験での判断手順と確認問題まで解説します。
- ミュータブルとイミュータブルの違い|リスト・タプル・文字列の変更と代入をPython3エンジニア認定基礎試験で判断する
ミュータブル(変更できる)とイミュータブル(変更できない)の違いを、リスト・タプル・文字列の公式チュートリアルの記述、代入で参照が共有される動き、スライスによる浅いコピー、確認問題つきで整理します。
よくある質問
Qimportとfrom〜importはどちらを使えばいい?
モジュール名を付けて呼び出す書き方にしたいならimport、指定した名前だけをそのまま使いたいならfrom〜importを使います。どちらで書いたかによって、呼び出し側で使える名前が変わります。
Qfrom fibo import fib の後で fibo.fib() と書ける?
書けません。from 〜 import はモジュール名をローカルな名前空間に取り入れないため、fiboは定義されません。
Qfrom 〜 import * は使ってよい?
公式チュートリアルは、定義済みの名前を上書きする可能性があるため殆どの場面で使われないとしています。対話セッションでキータイプの量を減らすために使うのは構わないとしています。
Qfrom . import echo のような書き方は何?
明示的な相対importです。公式チュートリアルは、先頭のドットで現在のパッケージや親パッケージを指定すると説明し、メインモジュールとして使うモジュールでは絶対importを使うべきだとしています。
次に見る比較
- G検定・DS検定・統計検定2級で重なる用語10語の比較
同じ名前の用語の定義と収録章を、資格ごとに並べます。
- ベイズの定理と条件付き確率の違い(統計検定2級の式と計算例)
求める確率の向きの違いと、陽性になる確率の計算例を確かめます。
- 紛らわしい用語ペア早見表
混同しやすい用語の違いと判定の手掛かりを、資格別の一覧で確かめます。
執筆: AI資格ドリル編集部(運営者情報を見る)
