0
関数(ローカルスコープ)内のPython 3でモジュールをインポートすると、インポートされたものは関数のローカルなのでしょうか?関数内でモジュールをインポートすると、変数はローカルになりますか?
def test():
import math
s = math.cos(1)
s = math.cos(1)
関数(ローカルスコープ)内のPython 3でモジュールをインポートすると、インポートされたものは関数のローカルなのでしょうか?関数内でモジュールをインポートすると、変数はローカルになりますか?
def test():
import math
s = math.cos(1)
s = math.cos(1)
同様
はい、モジュールは、関数に対してローカルになり、少なくとも上記の例では(私は、Python 3.6を使用しています)。
例:
Python 3.6.0 (v3.6.0:41df79263a11, Dec 22 2016, 17:23:13)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
def test():
... import math
... s = math.cos(1)
...
g = math.cos(1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'math' is not defined
はい、インポートのスコープは関数スコープのと同じことが、ファイルの先頭にモジュールをインポートすることをお勧めであることに留意してくださいます。 – lmiguelvargasf
また、モジュールをインポートすると、ローカルスコープであっても、モジュールがロードされたままになるとモジュール状態の変更は保持され、ローカルスコープで呼び出された場合はローカル変数がクリアされます。 – zwer
サイドノート:これはローカルスコープですが、パフォーマンスのためにこれを行うことを検討している場合(ローカルスコープは、内部スコープよりも安価なグローバルスコープよりも安価です。詳細)、しないでください。 'import'はキャッシュモジュールを実行します(したがって、2回目の' import'は実際にリロードしません)。しかし、インポートされた機構は、キャッシュされたモジュールの取得を終了してもかなり煩雑です。スコープに関連するパフォーマンスは、コールのインポートにかかるコストにほとんど影響を与えません。 – ShadowRanger