2017-02-17 7 views
0

関数(ローカルスコープ)内のPython 3でモジュールをインポートすると、インポートされたものは関数のローカルなのでしょうか?関数内でモジュールをインポートすると、変数はローカルになりますか?

def test(): 
    import math 
    s = math.cos(1) 
s = math.cos(1) 
+0

はい、インポートのスコープは関数スコープのと同じことが、ファイルの先頭にモジュールをインポートすることをお勧めであることに留意してくださいます。 – lmiguelvargasf

+1

また、モジュールをインポートすると、ローカルスコープであっても、モジュールがロードされたままになるとモジュール状態の変更は保持され、ローカルスコープで呼び出された場合はローカル変数がクリアされます。 – zwer

+0

サイドノート:これはローカルスコープですが、パフォーマンスのためにこれを行うことを検討している場合(ローカルスコープは、内部スコープよりも安価なグローバルスコープよりも安価です。詳細)、しないでください。 'import'はキャッシュモジュールを実行します(したがって、2回目の' import'は実際にリロードしません)。しかし、インポートされた機構は、キャッシュされたモジュールの取得を終了してもかなり煩雑です。スコープに関連するパフォーマンスは、コールのインポートにかかるコストにほとんど影響を与えません。 – ShadowRanger

答えて

0

同様

はい、モジュールは、関数に対してローカルになり、少なくとも上記の例では(私は、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 
関連する問題