2017-02-02 8 views
1

関数内にタプルを宣言するか、グローバルに宣言する必要がありますか?内部にある場合は、すべての関数呼び出しで再作成されますか?それ以外の場合は、関数が呼び出されるたびに作成されますので、それが一定の値のタプルがある場合関数の内部でタプルを宣言する

def isBracket(s): 
    t = ('a','b','c','d') 
    return s in t 
+2

はいそれはすべての関数呼び出しで再作成されます – dnit13

答えて

1

は、関数の外に置くと間違って何もありません。

この定数のメンタルスコープを使用するコードに近づけておくために、関数定義のすぐ上に配置します。

t = ('a','b','c','d') 

def isBracket(s): 
    return s in t 
4

disモジュールを使用して、機能のバイトコードを逆アセンブルできます。

>>> import dis 
>>> def isBracket(s): 
...  t = ('a','b','c','d') 
...  return s in t 
... 
>>> dis.dis(isBracket) 
    2   0 LOAD_CONST    5 (('a', 'b', 'c', 'd')) 
       3 STORE_FAST    1 (t) 

    3   6 LOAD_FAST    0 (s) 
       9 LOAD_FAST    1 (t) 
      12 COMPARE_OP    6 (in) 
      15 RETURN_VALUE   
>>> t = ('a','b','c','d') 
>>> def isBracket(s): 
...  return s in t 
... 
>>> dis.dis(isBracket) 
    2   0 LOAD_FAST    0 (s) 
       3 LOAD_GLOBAL    0 (t) 
       6 COMPARE_OP    6 (in) 
       9 RETURN_VALUE 

あなたは番目のバージョンの改善を見ることができます:あなたは違いが表示されますtupleがロードされ、すべてのコールを保存する必要はありません。

関連する問題