>>> import math
>>> math.pi
3.141592653589793
>>> math.pi = 3
>>> math.pi
3
>>> import math
>>> math.pi
3
最初の質問: なぜmath.pi
戻れないのですか?
import
定義されたすべての変数と関数を現在のスコープにインポートすると思いました。また、変数名が現在のスコープに既に存在する場合は、それが置き換えられます。
はい、それはそれを置き換えます:
>>> pi = 3
>>> from math import *
>>> pi
3.141592653589793
次に、インポートさ math.pi = 3
れたプロパティが割り当てによって実際に変更された可能性があると思いましたmath class
(またはそれmath module
ですか?) 。import math
私が正しかった:
>>> import math
>>> math.pi
3.141592653589793
>>> math.pi = 3
>>> from math import *
>>> pi
3
したがって、次のようになり
ます。そうすると、クラスのようなものとしてimport x
インポートされます。x
x.property に変更を加えた場合、その変更はモジュールに保持されるため、再度インポートするたびに変更されたバージョンになります。
本当の質問:
- なぜ
import
このように実装されているのですか?すべてimport math
のインポートで の新しい未変更のコピーを許可しないのはなぜmath
ですか? インポートさmath
れたものを変更できるようにしておくのはなぜですか? math.pi
実行後に戻るための回避策はありますかmath.pi = 3
(もちろん、を除くmath.pi = 3.141592653589793
)?- もともと私
import math
はよりも好ましいと思っていましたfrom math import *
。しかし、この動作により、この方法でインポートしたモジュールを他の誰かが変更している可能性があるのではないかと心配になります...どうすればよいimport
ですか?