[解決済み】Pythonの`import x`と`from x import y`の文の正しいソート方法は何ですか?
質問
その Pythonスタイルガイド は、インポートをこのようにグループ化することを提案しています。
<ブロッククオートインポートは以下の順序でグループ化する。
- 標準ライブラリのインポート
- 関連するサードパーティのインポート
- ローカルアプリケーション/ライブラリ固有のインポート
しかし、この2つの異なる方法のインポートをどのようにレイアウトすべきかについては、何も言及していません。
from foo import bar
import foo
並べ替えの方法は複数あります(それらのインポートがすべて同じグループに属しているとします)。
-
最初
from..import
で、次にimport
from g import gg from x import xx import abc import def import x
-
最初
import
で、次にfrom..import
import abc import def import x from g import gg from x import xx
-
モジュール名のアルファベット順、インポートの種類は無視
import abc import def from g import gg import x from xx import xx
PEP8 はこの優先順位について言及していませんし、いくつかの IDE にある "cleanup imports" 機能も、おそらくその機能の開発者が望んだとおりにしているだけでしょう。
この点を明確にした別のPEPか、または関連するコメントやメールを BDFL (または他のPythonコア開発者)。 自分の好みを述べた主観的な回答は投稿しないでください。
解決方法は?
インポートは一般的にアルファベット順にソートされ、PEP 8 以外の様々な場所で説明されています。
アルファベット順に並べられたモジュールは、読みやすく、検索性に優れています。 . 結局のところ、Pythonは読みやすさがすべてなのです。 また、何かがインポートされているかどうかを確認するのも簡単で、重複したインポートを避けることができます。
PEP 8 では、ソートに関する利用可能なものはありません。ですから、何を使うかを選択することが重要です。
評判の良いサイトやリポジトリからのいくつかの文献によると、人気もあり、アルファベット順が主流だそうです。
例えばこんな感じです。
import httplib
import logging
import random
import StringIO
import time
import unittest
from nova.api import openstack
from nova.auth import users
from nova.endpoint import cloud
または
import a_standard
import b_standard
import a_third_party
import b_third_party
from a_soc import f
from a_soc import g
from b_soc import d
Redditの公式リポジトリでは、一般的にPEP-8のインポート順序を使用するようにと記載されています。しかし、いくつかの追加事項があり、各インポートグループのインポートの順番はこうあるべきです。
import <package>.<module> style lines in alphabetical order
from <package>.<module> import <symbol> style in alphabetical order
参考文献
- https://code.google.com/p/soc/wiki/PythonStyleGuide
- https://github.com/reddit/reddit/wiki/PythonImportGuidelines
- http://docs.openstack.org/developer/hacking/
- http://developer.plone.org/reference_manuals/external/plone.api/contribute/conventions.html#grouping-and-sorting
追記 アイソートユーティリティ は、インポートを自動的にソートします。
関連
-
PythonによるLeNetネットワークモデルの学習と予測
-
PicgoのイメージベッドツールをPythonで実装する
-
[解決済み] TypeError: 'DataFrame' オブジェクトは呼び出し可能ではない
-
[解決済み] Pythonで型をチェックする標準的な方法は何ですか?
-
[解決済み] Pythonでパスから拡張子なしでファイル名を取得する方法は?
-
[解決済み] リストとタプルの違いは何ですか?
-
[解決済み] Pythonでホームディレクトリを取得するための正しいクロスプラットフォームな方法は何ですか?
-
[解決済み] PythonモジュールとPythonパッケージの違いは何ですか?
-
[解決済み] JavaScriptで数値を文字列に変換するのに最適な方法は何ですか?
-
[解決済み] import文は常にモジュールの先頭にあるべきですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
PythonによるLeNetネットワークモデルの学習と予測
-
Python カメの描画コマンドとその例
-
python implement mysql add delete check change サンプルコード
-
Python百行で韓服サークルの画像クロールを実現する
-
pyCaret効率化乗算器 オープンソース ローコード Python機械学習ツール
-
Python入門 openを使ったファイルの読み書きの方法
-
[解決済み】Python regex AttributeError: 'NoneType' オブジェクトに 'group' 属性がない。
-
[解決済み】OSError: [WinError 193] %1 は有効な Win32 アプリケーションではありません。
-
[解決済み】ValueError: pickleプロトコルがサポートされていません。3、python2 pickleはpython3 pickleでダンプしたファイルを読み込むことができない?
-
[解決済み】NameError: 名前 'self' が定義されていません。