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

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

func('query1')  

我的問題是不my_dict執行查詢和保存或僅根據酒吧變量執行查詢瞭解蟒蛇字典內存分配

+0

你是什麼意思的「執行」?使用你的代碼,唯一可能發生的事情是,如果'bar'是同一個字典中的一個鍵,那麼你可以引用'my_dict'的值... – nbro

回答

0

這將創建一個內存中的兩個元素的字典,找到關聯的值與密鑰bar和功能競爭時摧毀整個事情。

+0

感謝您的幫助 – adam5010

1

在這種特定情況下,根本不執行任何查詢。它只是str這意味着他們實際上什麼都不做。

讓我們試着詳細說明2個其他情況。假設你有一個功能execute_query了執行給定的參數的查詢:

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

func('query1') 

在這種情況下,這兩個查詢將被執行,因爲Python解釋器將分析字典組成。另一方面,如果你有一個參考這個函數,它不會調用該函數。例如:

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時纔會執行它。字典將是字符串而不是sql查詢。 – adam5010