2012-12-02 73 views
2

所以我有一個有10個字段的數據庫(稱它們爲a,b,c .... j),並且我需要創建一個函數「find_use()」,它可以根據賦給它的字段的任意組合來查找和修改數據庫中的記錄(即:find_use(a ==「happy」,g ==「birthday」))。此外,由於特權,我不直接生成SQL查詢,而是使用SQL包裝器,系統提供了名爲「selector()」,它將根據相同的參數定位記錄,即:query = selector(a ==「快樂「,g ==」生日「),然後返回匹配記錄列表Python - 具有不一致參數的數據庫查詢函數

所以問題是,因爲我不知道find_use()將接收什麼參數,所以我不知道如何構造selector()的內部調用。理想情況下,應該動態創建對選擇器的調用;東西的效果:

def find_use(a='',b='',c='',.....j=''): 
    vars = locals() 
    for v in vars: 
     if v.value() != '': 
     q_string += '{0} == {1},'.format(v.key(),v.value()) 
    query = selector(q_string) 
    ...do something to query... 

然而,這不會因爲選擇的工作並不需要一個字符串,但在相同的格式find_use()函數,而參數。那麼,如何做到這一點呢。我覺得這其實很簡單,我只是錯過了一些明顯的東西。任何投入將不勝感激。

回答

2

我認爲你正在尋找keyword argument unpacking

def find_use(**kwargs): 
    query = selector(**kwargs) 
    ...do something to query... 

當以這種方式定義,find_use可以接收的關鍵字參數任意數量。關鍵字參數採用字典kwargs收集。

例如,

def foo(**kwargs): 
    print(kwargs)  
foo(a = 'happy', g = 'birthday') 

產生

{'a': 'happy', 'g': 'birthday'} 

並且如果

def bar(a, g): 
    print(a) 
    print(g) 

然後

bar(**{'a': 'happy', 'g': 'birthday'}) # like selector(**kwargs) 

收益率

happy 
birthday 
+0

正是我所需要的。謝謝。 – alwaystoomuchcode