Python 如何将这些函数转换为通用函数
我想缩短我的代码,因为我有更多这样的函数。我想知道是否可以使用getattr()执行guy要求的操作 好了,我得到的是:Python 如何将这些函数转换为通用函数,python,pymongo,introspection,getattr,generic-function,Python,Pymongo,Introspection,Getattr,Generic Function,我想缩短我的代码,因为我有更多这样的函数。我想知道是否可以使用getattr()执行guy要求的操作 好了,我得到的是: def getAllMarkersFrom(db, asJSON=False): '''Gets all markers from given database. Returns list or Json string''' markers = [] for marker in db.markers.find(): markers.ap
def getAllMarkersFrom(db, asJSON=False):
'''Gets all markers from given database. Returns list or Json string'''
markers = []
for marker in db.markers.find():
markers.append(marker)
if not asJSON:
return markers
else:
return json.dumps(markers, default=json_util.default)
def getAllUsersFrom(db, asJSON=False):
'''Gets all users from given database. Returns list or Json string'''
users = []
for user in db.users.find():
users.append(user)
if not asJSON:
return users
else:
return json.dumps(users, default=json_util.default)
我在JSON
上使用pymongo
和flask
助手
我想要的是创建一个接受任何类型对象的getAllFrom(x,db)
函数。我不知道怎么做,但我想调用db.X.find()
,其中X通过函数传递
嗯,就在那里。希望你能帮助我。谢谢大家! 这两个函数中几乎没有真正的代码。其中一半是对
list()
构造函数的缓慢重新创建。一旦你去掉它,你就剩下一个条件,它可以很容易地压缩成一行。因此:
def getAllUsersFrom(db, asJSON=False):
users = list(db.users.find())
return json.dumps(users, default=json_util.default) if asJSON else users
这对我来说似乎很简单,不必费心重构。这两个函数之间有一些共同点,但将它们分开不会进一步减少代码行数
然而,简化的一个方向是不要传递一个标志来告诉函数返回什么格式。让打电话的人去做。如果他们想要它作为一个列表,有list()
。对于JSON,您可以提供自己的helper函数。因此,只需编写函数以返回所需的迭代器:
def getAllUsersFrom(db):
return db.users.find()
def getAllMarkersFrom(db):
return db.markers.find()
以及将结果转换为JSON的帮助函数:
def to_json(cur):
return json.dumps(list(cur), default=json_util.default)
那么,把这一切放在一起,你只需调用:
markers = list(getAllMarkersFrom(mydb))
或:
如你所需
如果您真的想要一个通用函数来请求各种类型的记录,那就是:
def getAllRecordsFrom(db, kind):
return getattr(db, kind).find()
那就叫它:
users = list(getAllRecordsFrom(mydb, "users"))
等等。这两个函数中几乎没有任何真正的代码。其中一半是对
list()
构造函数的缓慢重新创建。一旦你去掉它,你就剩下一个条件,它可以很容易地压缩成一行。因此:
def getAllUsersFrom(db, asJSON=False):
users = list(db.users.find())
return json.dumps(users, default=json_util.default) if asJSON else users
这对我来说似乎很简单,不必费心重构。这两个函数之间有一些共同点,但将它们分开不会进一步减少代码行数
然而,简化的一个方向是不要传递一个标志来告诉函数返回什么格式。让打电话的人去做。如果他们想要它作为一个列表,有list()
。对于JSON,您可以提供自己的helper函数。因此,只需编写函数以返回所需的迭代器:
def getAllUsersFrom(db):
return db.users.find()
def getAllMarkersFrom(db):
return db.markers.find()
以及将结果转换为JSON的帮助函数:
def to_json(cur):
return json.dumps(list(cur), default=json_util.default)
那么,把这一切放在一起,你只需调用:
markers = list(getAllMarkersFrom(mydb))
或:
如你所需
如果您真的想要一个通用函数来请求各种类型的记录,那就是:
def getAllRecordsFrom(db, kind):
return getattr(db, kind).find()
那就叫它:
users = list(getAllRecordsFrom(mydb, "users"))
等等。我想说的是,对于每个任务,最好有单独的功能。然后,您可以在不同的功能之间使用相同的功能。例如:
@to_json
def getAllUsersFrom(db):
return list(db.users.find())
享受吧 我想说的是,每个任务都有单独的功能更好。然后,您可以在不同的功能之间使用相同的功能。例如:
@to_json
def getAllUsersFrom(db):
return list(db.users.find())
享受吧 谢谢你的提示!这似乎是最好的方法。你能给我推荐一些“最佳实践”书籍吗?非常感谢。谢谢你的提示!这似乎是最好的方法。你能给我推荐一些“最佳实践”书籍吗?谢谢大家!@布伦巴恩,我已经试过了。我应该编辑这篇文章,因为我真正想知道解决这个问题的最佳方法。谢谢@布伦巴恩,我已经试过了。我应该编辑这篇文章,因为我真正想知道解决这个问题的最佳方法。谢谢好建议!谢谢好建议!谢谢