2016-08-19 19 views
0
def func(bar): 

    my_dict = { 
     'query1': 'select * from table1', 
     'query2': 'select * from table2' 
    } 
    my_dict[bar] 

func('query1')  

私の質問はmy_dictは、両方のクエリを実行し、それを保存したり、それだけでメモリ内の2つの要素で辞書を作成する変数理解Pythonの辞書のメモリ割り当て

+0

「実行済み」とはどういう意味ですか?あなたのコードでは、起こりうる唯一のことは、 'bar'が同じ辞書のキーの1つであれば、' my_dict'の値を参照することができるということです。 – nbro

答えて

0

を棒に応じてクエリを実行しないされ、関連する値を見つけますキーがbarであり、機能が競合するときにすべてを破壊する。

+0

助けてくれてありがとう – adam5010

1

この場合、クエリはまったく実行されません。彼らが実際に何もしないことを意味するのはstrのオブジェクトだけです。

他の2つのケースを詳しく見てみましょう。あなたは、パラメータとして与えられたクエリを実行する機能execute_query持つと仮定:Pythonインタプリタが辞書組成を分析するので、この場合は

def func(query): 
    my_dict = { 
     'query1': execute_query('select * from table1'), 
     'query2': execute_query('select * from table2'), 
    } 
    return my_dict[query] 

func('query1') 

を、両方のクエリが実行されます。一方、この関数に対しての参照がある場合、その関数は呼び出されません。例:

def do_query1(): 
    return execute_query('select * from table1') 

def do_query2(): 
    return execute_query('select * from table2') 

def func(query): 
    my_dict = { 
     'query1': do_query1, 
     'query2': do_query2, 
    } 
    return my_dict[query]() # <-- appropriate function will be call here 

func('query1') 
+1

彼が本当に求めていること。 – Barmar

+0

説明のために感謝の男。実際には、私はSQLと文字列を同じことに誤解しています。私はpsycopg2をデータベースに使用していて、渡されたパラメータに応じて異なるクエリがあります。私が誤解しているのは、PythonのdictにSQLの文字列を書くと実行されますが、そうではなく、psycopg2に渡すときだけ実行されるということです。 dictはSQLクエリではなく文字列になります。 – adam5010

関連する問題