10
5

目次

はじめに

今回はPython PEP8に書かれているimportについての記事になります。

きっかけ

コードレビューをしていただいた際に、PEP8に沿ったコードを書くことを指摘されたからです。
ドキュメントに沿ってコードを書いていくため
理解をし、知識を落とし込むための記事になります。

コードは書くよりも読まれることの方が多い

PEP8とは

Python の標準ライブラリに含まれているPythonコードのコーディング規約
https://pep8-ja.readthedocs.io/ja/latest/#

例えば、コメントアウトは 『#』 で行う、関数の宣言は 『def』 であるなど
基本的なこと可読性を上げる ために必要なことなどが記されています。

import 記述方法1

import文は、通常は行を分けてかくべき

# Correct:
import os
import sys
# Wrong:
import sys, os
# Correct:
from subprocess import Popen, PIPE

こちらは subprocessモジュールからコンポーネントやクラス、定数、関数などを呼び出しているためOK:ok_hand_tone2:

import 記述方法2

import文 は次の順番でグループ化すべき

標準ライブラリ
サードパーティに関連するもの
ローカルな アプリケーション/ライブラリ に特有のもの

上のグループそれぞれの間には、1行空白を置くべき

標準ライブラリ

  • 組み込み関数や定数のこと
# 例1
import datetime
now = datetime.datetime.now()

# 例2
print("Hello world")

サードパーティに関連するもの

  • 標準ライブラリに含まれていないもの
  • インストールが必要なもの
例1
pip install pandas
import pandas as pd
df = pd.DataFrame()

ローカルな アプリケーション/ライブラリ に特有のもの

  • 自らが作成したモジュール
project/
├── packages/
│   ├── send_mail.py
│   └── get_datas.py
├── main.py
└── README.md
main.py
import send_mail

import 記述方法3

絶対import を推奨します。なぜなら、絶対import の方が通常は読みやすく、importシステムが正しく設定されなかった(たとえばパッケージ内部のディレクトリが sys.path で終わっていた) 場合でも、より良い振る舞いをする(または少なくともより良いエラーメッセージを出す)からです:

import mypkg.sibling
from mypkg import sibling
from mypkg.sibling import example

しかしながら、明示的に相対importを使うことが許される場合があります。特に絶対importを使うと不必要に冗長になる複雑なパッケージレイアウトを扱う場合です。

from . import sibling
from .sibling import example

推奨していることもありますが、
きっかけにも書いた通り、コードはたくさんの方に読まれるため、
常に絶対importで書くほうが良いと思います。

import 記述方法4

クラスを含んだモジュールからクラスをimportする場合

from myclass import MyClass
from foo.bar.yourclass import YourClass

上記のやり方で名前の衝突が起きるらしい。
その場合下記のimport宣言する

import myclass
import foo.bar.yourclass

使用する際、"myclass.MyClass" や "foo.bar.yourclass.YourClass"
と記述する

import 記述方法5

ワイルドカードを使った import (from import *) は避けるべきです。なぜなら、どの名前が名前空間に存在しているかをわかりにくくし、コードの読み手や多くのツールを混乱させるからです。ワイルドカードを使った import を正当化できるユースケースがひとつあります。内部インターフェイスを公開APIとして再公開する場合 (たとえば、Pure Python の実装をオプションの高速化モジュールの内容で上書きし、どの定義が上書きされるかがあらかじめわからない場合) です。

こちらも可読性の向上の観点からみると、そだね。と感じた。

終わりに

今までコード作成に必死で可読性など意識したことがなかった。
PEP8を読んで、意識変えていこうと思います!

間違った認識があれば、ご指摘お願い致します。

10
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
5