2

したがって、10個のフィールド(a、b、c .... jと呼びます)を持つデータベースがあり、フィールドの任意の組み合わせに基づいてデータベース内のレコードを検索および変更できる関数「find_use()」を作成する必要があります。引数として与えられます(つまり、find_use(a == "happy"、g == "birthday"))。また、特権のため、SQLクエリを直接生成するのではなく、システムが提供する「selector()」と呼ばれるSQLラッパーを使用します。これにより、同じ引数に基づいてレコードが検索されます。 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...

ただし、selectorは文字列を受け取らず、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 に答える