2016-08-19 186 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