2011-01-21 6 views
9

次のコードを考えてみましょう:それはそうと...インポート*

#main.py 
From toolsmodule import * 
database = "foo" 

#toolsmodule 
database = "mydatabase" 

を、これは異なる内容で各モジュールに一つの変数を作成します。 mainからtoolsmodule内の変数を変更するにはどうすればよいですか?以下では動作しません:

toolsmodule.database = "foo" 

答えて

13

は、さらに別のfrom toolsmodule import *を使用しない理由の多くのような音。

import toolsmoduleとすれば、toolsmodule.database = 'foo'とすることができ、すべてが素晴らしいです。あなたがそのようにそれをしないのはなぜ

+2

私はこれを知っていますが、これらの変数を多く使用しています。長いモジュール名がありますので、余計な入力を避けたいと思います。 – David

+12

モジュール名を短くしてください: 'import longmodulename as sname'。これで 'sname'は' longmodulename'を参照します。 – user225312

+4

'toolsmodule'を毎回入力しない場合は、以下を実行できます:' import toolsmodule as tm'。こうすることで、名前空間を正気に保ち、型を節約できます。 – miku

1

import toolsmodule 
toolsmodule.database = "foo" 
from toolsmodule import * #bad idea, but let's say you have to.. 
print database #outputs foo 
+0

これを試してみると、私はツールモジュールの内部から変数を変更できなくなってしまったと思います。これは検証する必要があります。 – David

7

ニシキヘビ変数名は、単に変数にラベルされています。 import *これらのラベルはすべてローカルなので、データベースを設定するときは、toolsmoduleの変数ではなくローカル変数を置き換えます。そのため、この操作を行います。

toolsmodule.py:その後、

database = "original" 

def printdatabase(): 
    print "Database is", database 

そして実行します。

import toolsmodule 
toolsmodule.database = "newdatabase" 
toolsmodule.printdatabase() 

を出力

Database is newdatabase 

(注)その後、別のモジュールからの場合もあることimport *に変更が反映されていませんでした。

簡潔に:from x import *を使用しないでください。私が知っているすべての文書が悪い考えだとは言っているにもかかわらず、なぜこのようなことにすべての初心者が残っているのか分かりません。

関連する問題