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

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

func('query1')  

Meine Frage ist nicht ausführt my_dict sowohl Abfrage und speichern Sie es oder es führt nur Abfrage nach Variable barLegendes Python dict Speicherzuordnung

+0

Was meinen Sie mit "ausgeführt"? Mit Ihrem Code ist das einzige, was passieren könnte, dass Sie auf einen Wert von "my_dict" verweisen können, wenn "bar" einer der Schlüssel des gleichen Wörterbuchs ist ... – nbro

Antwort

0

, dass das Wörterbuch mit zwei Elementen im Speicher schaffen, um den Wert finden zugeordnet mit Schlüssel bar und zerstöre das Ganze, wenn die Funktion konkurriert.

+0

danke für die Hilfe – adam5010

1

In diesem speziellen Fall wird überhaupt keine Abfrage ausgeführt. Es ist nur str Objekte, was bedeutet, dass sie tatsächlich nichts tun.

Lassen Sie uns versuchen, 2 andere Fälle zu beschreiben. Angenommen, Sie haben eine Funktion execute_query, die eine Abfrage als Parameter angegeben ausführen:

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

func('query1') 

In diesem Fall beide Abfrage ausgeführt werden, weil Python-Interpreter wird die Wörterbuch Zusammensetzung analysieren. Auf der anderen Seite, wenn Sie eine Referenz zu dieser Funktion haben, wird es die Funktion nicht aufrufen. Beispiel:

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

Gut für Sie, um herauszufinden worum er wirklich fragt. – Barmar

+0

danke mann für die erklärung. Eigentlich habe ich die sql und die string gleich verstanden. Ich benutze psycopg2 für die Datenbank und es gibt verschiedene Abfragen nach Parameter übergeben. Was ich missverstanden habe ist, dass wenn ich die sql string in python dict schreibe, es es ausführen wird, aber das ist nicht der Fall und es wird nur ausgeführt, wenn ich es an psycopg2 übergebe. Das dict wird die Zeichenfolge nicht die SQL-Abfrage sein. – adam5010