私が学生のスクリプトに次のように見て、私の驚きに、それは動作します:Pythonはマルチセグメントインポートで余分なことをしますか?
>>> import os.path
質問は、簡単に、次のとおりです。これは、単純なimport os
から異なり、どのように?それとも、同じですか?os.path
が存在することを除いては同じですか?
ご覧のとおり、path
は私の範囲ではありませんが、os
と定義されています。
>>> dir()
['__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'os']
質問:これはPythonとは何ですか?確かに、それはモジュールos
をインポートします(したがって実行します)。また、os.path
が有効なものに解決されることを保証します。 (@Leeと@Stuartのおかげでそれを確認するドキュメントへのリンクがあります)。またはimport pkg.submod
は常にimport pkg
と等価です(pkg.submod
が存在します)?
os
をインポートすると、すでにos
がインポートするモジュールがインポート/実行されます。したがってos.path
が既にロードされています。 pkg.submod
をインポートすると、pkg
をインポートするだけではなく、異なるコードが実行されたり、異なる順序で、または異なる副作用が生じる可能性があります(エキゾチックではありません)。そして、マルチセグメント形式の正当なユースケースはありますか? (言い換えるするには、次のポイントは何ですか?)
関連ドキュメントがここにHTTPSです://docs.python .org/3.5/tutorial/modules.html#packages – Stuart
'os.path'は、その名前で実際のサブモジュールが存在しないため、特殊なケースです。 os自身は 'posixpath'または' ntpath'を 'path'として適切にインポートします。 –