-1


基本的に、すべてのモジュールに標準ライブラリをインポートする方が、モジュールに一度標準モジュールをインポートして他のモジュールで再利用するよりも良い/悪いかどうかを知りたいです。つまり、次の2つのコードの間に速度/パフォーマンスの違いがあるかどうかを知りたいと思いました。

"""
One way - Just importing time module only once
"""
# /usr/bin/python
# mytime.py
import time

def get_time():
    return time.time()


# /usr/bin/python
# usingtime.py
import mytime

print (mytime.time() - mytime.time.time())



"""
Another way - importing time module as needed
"""
# /usr/bin/python
# mytime.py
import time

def get_time():
    return time.time()


# /usr/bin/python
# usingtime.py
import time
import mytime

print (mytime.time() - time.time())

どのコードが優れていますか?またはそれは本当に重要ですか?

4

2 に答える 2

2

2番目の例で再インポートtimeする理由はありません。これは事実上あなたがしていることです。エレガンスのために、モジュールを(直接)使用するのと同じモジュールにのみインポートする必要があります。

3レベルの深さのインポート(1つのモジュールが別のモジュールをインポートして別のモジュールをインポートする...)を持ち、最初の最上位モジュールでそれらすべてのインポートを追跡することを想像してみてください!維持するのは悪夢でしょう。

速度に関しては、再インポートによるパフォーマンスへの影響はごくわずかだと思います。Pythonインタープリターは、複数回インポートするときに完全な再インポートを行いません。

于 2012-08-01T17:34:30.237 に答える
1

から: http://docs.python.org/reference/simple_stmts.html#the-import-statement

最初にチェックされるのは、以前にインポートされたすべてのモジュールのキャッシュである sys.modules です。モジュールがそこにある場合は、インポートのステップ (2) で使用されます。

インポートによってロードされたモジュールは、基本的にシングルトンです。モジュールの最初のインポート時に、モジュール グローバル スコープ内のコードが実行され (モジュールの初期化)、モジュール インスタンスが sys.modules に追加されます。他のモジュールの次のインポートは、この初期化されたインスタンスを参照するだけです。コストはごくわずかです。

些細な例:

a.py

print "HELLO"

b.py

import a
import c

c.py

import a

対話型インタープリターで:

Python 2.6.6 (r266:84297, Aug 24 2010, 18:13:38) [MSC v.1500 64 bit (AMD64)] on
win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import b
HELLO
>>>

(「HELLO」が 1 回だけ出力されることに注意してください)

于 2012-08-01T18:03:23.537 に答える