Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将这些函数转换为通用函数_Python_Pymongo_Introspection_Getattr_Generic Function - Fatal编程技术网

Python 如何将这些函数转换为通用函数

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

我想缩短我的代码,因为我有更多这样的函数。我想知道是否可以使用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.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())

享受吧

谢谢你的提示!这似乎是最好的方法。你能给我推荐一些“最佳实践”书籍吗?非常感谢。谢谢你的提示!这似乎是最好的方法。你能给我推荐一些“最佳实践”书籍吗?谢谢大家!@布伦巴恩,我已经试过了。我应该编辑这篇文章,因为我真正想知道解决这个问题的最佳方法。谢谢@布伦巴恩,我已经试过了。我应该编辑这篇文章,因为我真正想知道解决这个问题的最佳方法。谢谢好建议!谢谢好建议!谢谢