1. ホーム
  2. python

[解決済み] Pythonモジュールのインポート。単一行と複数行の比較

2023-06-16 06:49:52

質問

Pythonでモジュールをインポートする場合、この違いは何でしょうか。

from module import a, b, c, d

そして、この

from module import a
from module import b
from module import c
from module import d

私にとっては、コードを凝縮して最初の例を使うのが常に理にかなっているのですが、世の中には2番目の例を使っているコードサンプルも見受けられます。何か違いがあるのでしょうか、それともプログラマーの好みの問題なのでしょうか?

どのように解決するのですか?

全く違いはありません。どちらも機能はまったく同じです。

しかし、スタイル的な観点からは、どちらかの方が好ましいかもしれません。その点では インポートのための PEP-8 を圧縮すべきであると言っています。 from module import name1, name2 を一行に圧縮し import module1 を複数行に残す。

Yes: import os
     import sys

No:  import sys, os

Ok: from subprocess import Popen, PIPE

@teewuane さんのコメントに対して(コメントが削除されることを想定してここで繰り返します)。

@inspectorG4dget 1つのモジュールから複数の関数をインポートする必要がある場合、その行が80文字より長くなってしまったらどうしますか? その結果、その行が80文字より長くなってしまったら?私が知っているのは 80文字というのは、コードがより読みやすくなる場合であることは分かっています。 もっと整然としたやり方があるのではないかと思っています。そして、私は そして、私は基本的にすべてをインポートしているにもかかわらず、from foo import *を実行したくありません。 とはしたくないのです。

ここで問題なのは、以下のようなことをすると、80文字の制限を超える可能性があることです。

from module import func1, func2, func3, func4, func5

これに対して、私は2つの回答を持っています(PEP8がこれに関して過度に明確であるとは思えません)。

それを 2 つのインポートに分割する :

from module import func1, func2, func3
from module import func4, func5

この場合、もし module がコードベースから削除されるか、さもなければリファクタリングされた場合、両方のimport行を削除する必要がある、という欠点があります。これは手痛いことになる可能性があります。

行を分割する :

上記の懸念を軽減するために、以下のようにするのが賢明かもしれません。

from module import func1, func2, func3, \
     func4, func5

この場合、2 行目も一緒に削除しないとエラーになりますが、それでも単文の import 文は維持されます。