2
我的web應用程序使用python和pyMongo在MongoDB上運行。我得到這個場景很多 - 代碼讀取類似:Mongodb是否有一個在查詢中被忽略的特殊值?
from pymongo import Connnection
users = Connection().db.users
def findUsers(firstName=None, lastName=None, age=None):
criteria = {}
if firstName:
criteria['firstName'] = firstName
if lastName:
criteria['lastName'] = lastName
if age:
criteria['age'] = age
query = users.find(criteria)
return query
我覺得那種凌亂的我是多麼需要一個if
聲明爲每一個是可選的,以弄清楚它是否需要進入搜索標準值。如果只有在查詢中有mongo忽略的特殊查詢值。然後我的代碼看起來是這樣的:
def findUsers(firstName=<ignored by mongo>, lastName=<ignored by mongo>, age=<ignored by mongo>):
query = users.find({'firstName':firstName, 'lastName':lastName, 'age':age})
return query
現在是不是比以前更清潔說了這麼多,特別是如果你有更多的可選參數。任何未指定的參數默認爲mongo只是忽略。有沒有辦法做到這一點?或者至少比我現在有更簡潔的東西?
哦,那太棒了。我不知道理解是否適用於字典,或者你可以在理解中使用if語句。我唯一的問題是,你必須確保在任何本地聲明之前調用locals(),否則它可能會在更復雜的函數中返回不需要的變量。有沒有一種方法只返回本地函數參數? –
你可以做的是使用一個位置參數列表:'def findUsers(** args):...',然後在函數內部使用'args'字典。如果你用'findUsers(firstName ='Tom',age = 25)'調用該函數,'args'字典將看起來像'{'firstName':'Tom','age':25}'。 – Thomas
好的,在某些情況下這是一個合理的解決方案,但我喜歡定義的參數如何爲程序員提供抽象。我想我會使用第一個解決方案,並發表評論說:「保持在第一線」 –