2016-09-28 17 views
0

これは、Pythonには名前空間があるようです。しかし、私が得ることができるのは、ネームスペースまたはスコープが何であるかを私に伝える人々です。だから、あなたはどのように名前空間をPythonで定義しますか?私が必要とするのは構文です(そして、その例がはるかに良いでしょう)。Pythonで名前空間を定義する方法は?

+0

可能な複製http://stackoverflow.com/questions/3913217/what-are-python-namespaces-all-about – nlsdfnbch

+0

@ j4ckその質問に対する回答は既に私の質問に答えていますか? –

+0

最初のもの。名前空間は、明示的に定義できるものではありません。コード化されたスコープによって与えられます。 – nlsdfnbch

答えて

2

Pythonの "名前空間"は、特定の構文よりもディスク上のコードのレイアウトにより多く定義されています。ディレクトリ構造を考える:

my_code/ 
    module_a/ 
     __init__.py 
     a.py 
     b.py 
    module_b/ 
     __init__.py 
     a.py 
     b.py 
    __init__.py 
    main.py 

と各a.pyb.pyファイルは、機能が含まれていると仮定すると、fn()、名前空間を解決するために、インポートの構文は(main.pyから)ので、同じように動作します:

この時
from module_a.a import fn # fn() from module_a/a.py 
from module_a.b import fn # fn() from module_a/b.py 
from module_b.a import fn # fn() from module_b/a.py 
from module_b.b import fn # fn() from module_b/b.py 

fn()main.pyの中にあり、インポートした実装を呼び出します。

それはfrom module import *構文を使用することも可能ですが、これは、より具体的であることの賛成で推奨され:ここでは

from module_a.a import * 

fn()main.py内で使用可能であり、またmodule_a/a.pyで定義されている他のシンボル。

我々はmodule_b/b.pyからmodule_a/a.pyfn()ともfn()の両方へのアクセス権を持っているしたい場合は、我々は2つのいずれかを行うことができます。私たちはfrom module import thing as somethingの構文を使用し、次のいずれか

from module_a.a import fn as module_a_fn 
from module_b.b import fn as module_b_fn 

を、私たちの中でそれらを使用しますmodule_a_fn()module_b_fn()などmain.py、または私達はちょうど、モジュールをインポートし、そうmain.pyで、コード内で直接参照することができます

import module_a.a 
import module_a.b 

module_a.a.fn() # call fn() from module_a/a.py 
module_a_b.fn() # call fn() from module_a/b.py 

もう少し使い方を解明するのに役立ちたいと思います。

関連する問題