2

所以我有一个包含 10 个字段的数据库(称它们为 a、b、c....j),我需要创建一个函数“find_use()”,它可以根据字段的任意组合查找和修改数据库中的记录作为参数给它(即: find_use(a=="happy", g =="birthday") )。此外,由于特权,我没有直接生成 SQL 查询,而是使用系统提供的名为“selector()”的 SQL 包装器,它将根据相同的参数定位记录,即:query = selector(a==" happy", g=="birthday"),然后返回匹配记录的列表

所以问题是,因为我不知道 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() 函数相同格式的参数。那么,如何做到这一点。我觉得这实际上很容易,我只是错过了一些明显的东西。任何投入将不胜感激。

4

1 回答 1

2

我认为您正在寻找关键字参数解包

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

当以这种方式定义时,find_use可以接收任意数量的关键字参数。关键字参数收集在 dict, 中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
于 2012-12-02T17:06:09.007 回答