documentationを見てみましょう:
Enter the Python interpreter and import this module with the following command: import fibo
This does not enter the names of the functions defined in fibo
directly in the current symbol table; it only enters the module name fibo
there.
Each module has its own private symbol table, which is used as the global symbol table by all functions defined in the module. Thus, the author of a module can use global variables in the module without worrying about accidental clashes with a user’s global variables. On the other hand, if you know what you are doing you can touch a module’s global variables with the same notation used to refer to its functions, modname.itemname
.
これは非常に複雑に見えるかもしれませんが、あなたは、モジュールをインポートするとき、それは、基本的に言う、その内容のすべてがないようにするために、別々のnamespaceに残りを衝突(すなわち、同じ名前を持つ2つのモジュールの2つの変数)。
あなたの例を挙げる。コードを動作させるには、2つのオプションがあります。
オプション
は、明示的にあなたが探している変数がconstants
モジュールで定義されているのpythonを教えてください。
import constants
def hello_world():
print(constants.BUCKET_NAME)
documentationから再びオプションB
、:
There is a variant of the import statement that imports names from a module directly into the importing module’s symbol table.
この亜種は以下の通りです:
それはですべて1をインポートしこれが何をしている
from module import x
からのもの3210モジュール。その後、Pythonはそのデータをあなたの現在のモジュールで定義されているかのように扱います。このアプローチを使用
、次の操作を実行できます。
from constants import *
def hello_world():
print(BUCKET_NAME)
ここ*
は、そのモジュールからすべてをインポートするのpythonを伝えます。これは多くの場合に便利ですが、大きなモジュールを扱う際にパフォーマンスの問題を引き起こす可能性があることを忠告してください。また、心に留めておく:
This does not introduce the module name from which the imports are taken in the local symbol table
を、これはあなたが唯一の定数からBUCKET_NAME
(from constants import BUCKET_NAME
代わりのimport *
)をインポートすることを選ぶ場合、constants
が定義されないことである意味は何。そのモジュールで定義されている他の変数にアクセスすることはできません。import constants
も書かなければなりません。後者のアプローチのパフォーマンスに関するより詳細な説明については
、常駐のpythonマスターMartijn PietersによってRoberto Liffredoだけでなく、thisによってthis優秀なポストを見てみましょう。
「定数.BUCKET_NAME」 –