python 在 def 函数中使用 for 循环

python using for loop in def function

我正在尝试在数据库集合中获取过去 7 天内创建的文档。

fmt = "%Y-%m-%d"
today = datetime.now(timezone('Asia/Seoul'))
for i in range(0, 7):
    target = today - timedelta(days = i)
    week = target.strftime(fmt)
    hot_posts = list(db.collection.find({'date': week}, {'_id': False}).sort('like', -1))
    print(hot_posts)

这为我提供了我正在从 DB 中查找的正确文档集。

但是当我在 def 函数中插入它时,它不起作用。

fmt = "%Y-%m-%d"
today = datetime.now(timezone('Asia/Seoul'))
@app.route('/api/list/hot', methods=['GET'])
def show_hot():
    for i in range(0, 7):
        target = today - timedelta(days=i)
        week = target.strftime(fmt)
        hot_posts = list(db.collection.find({'date': week}, {'_id': False}).sort('like', -1))
        return jsonify({'hot_posts': hot_posts})

我不认为我完全理解如何在正确的结构中使用 def。 在这种情况下,在 python 中使用 def 的正确格式是什么? 我是否需要在 for 循环之前放置一些变量并将其设置为 variable=[] 以获取 for 循环的结果并将其放入 def 函数可以使用的变量中? 我是否需要将一些 for 循环变量放入 def 函数的 () 中?

是这样的吗?

fmt = "%Y-%m-%d"
today = datetime.now(timezone('Asia/Seoul'))
@app.route('/api/list/hot', methods=['GET'])
def show_hot(range, list):
    hot_posts = []
    for i in range(0, 7):
        target = today - timedelta(days=i)
        week = target.strftime(fmt)
        hot_posts = list(db.collection.find({'date': week}, {'_id': False}).sort('like', -1))
    return jsonify({'hot_posts': hot_posts})

您可以创建一个空白字典并在迭代时更新它的键和值,然后 return 生成字典。我没有测试过这段代码,但我认为它应该可以正常工作。

fmt = "%Y-%m-%d"
today = datetime.now(timezone('Asia/Seoul'))
@app.route('/api/list/hot', methods=['GET'])
def show_hot():
    all_hot_posts = {}
    for i in range(0, 7):
        target = today - timedelta(days=i)
        week = target.strftime(fmt)
        hot_posts = list(db.collection.find({'date': week}, {'_id': False}).sort('like', -1))
        all_hot_posts.update({'hot_posts'+str(i+1): hot_posts})
    return jsonify(all_hot_posts)

在 python 函数中,我们没有将关键字定义为参数。它们像普通脚本一样被解释。