4

「パッケージ」と呼ばれるPythonパッケージがあります。その中には、空__init__.pyのモジュールと 2 つのモジュールがあります。One が呼び出されm1.py、1 行だけが含まれます。

x = 3

もう 1 つは呼び出さm2.pyれ、次の行が含まれます。

x = 5

今、私はそのモジュールを使用しようとしています。最初に私はそのようなことをします:

from package.m1 import x
print package.m1.x

もちろん機能しません-次のようなエラーが発生します:

NameError: name 'package' is not defined

そして、なぜそれがうまくいかないのかを理解しています。しかし、私はそのようなことをします:

from package.m1 import x
import package.m2
print package.m1.x

そして今、それは機能します。なんで?どのように?package.m1 をインポートしませんでした!

4

2 に答える 2

2

これについての説明は 1 つだけです。

  1. from package.m1 import xモジュールpackageと をロードしますpackage.m1。モジュールm1には追加されますが、グローバルには追加されません。packagepackage
  2. import package.m2packageこれで、モジュールがグローバルに追加されます。m1はすでにその一部であるため、packageからアクセスできるようになりpackage.m1ました。

さらなるテスト:

>>> from package import m1
>>> package.m1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'package' is not defined
>>> import package.m2
>>> package.m1
<module 'package.m1' from 'package/m1.py'>
>>> from package import m3
>>> package.m3
<module 'package.m3' from 'package/m3.py'>

テストの続き:

>>> import package.m1
>>> del package
>>> import package
>>> package.m1
<module 'package.m1' from 'package/m1.py'>
于 2013-01-30T16:57:52.760 に答える
0

このfrom x import y構文は、モジュール全体をインポートしてから、現在の名前空間で指定されたオブジェクトを参照します。次のように翻訳できます。

import x
y = x.y

したがって、実際には package.m1 をインポートしています

于 2013-01-30T16:23:22.237 に答える