我可以使用全局变量来参数化另一个函数吗?

问题描述 投票:0回答:1

我有一个 bbox_sort 函数,可以按从左到右的顺序对坐标进行排序。为了考虑到两个边界框之间的 Y 高度,我启动了 thresh 变量。在 get_predict 中,bbox_sort 函数作为参数传递给 cmp_to_key。我需要制作可选参数 thresh

我知道使用全局变量是不好的做法,但我不知道如何将 thresh 参数传递给 bbox_sort 函数。将数字阈值写入单独的文件并从那里获取它是一种好习惯,还是我如何重新制作排序功能?

from functools import cmp_to_key

def bbox_sort(a, b,):

    bbox_a = a
    bbox_b = b
    
    if abs(bbox_a[1] - bbox_b[1]) <= thresh: 
        return bbox_a[0] - bbox_b[0]
    
    return bbox_a[1] - bbox_b[1]

def get_prediction(result):
    coord_list = []
    res = result.to_coco_annotations()

    global thresh
    thresh = 10
    for ann in res:

        current_bbox = ann['bbox']
        x = current_bbox[0]
        y = current_bbox[1]
        w = current_bbox[2]
        h = current_bbox[3]
    
        coord_list.append((x, y, w, h))

    cnts = sorted(coord_list, key=cmp_to_key(bbox_sort))
    for pred in range(len(res)-1):
        res[pred]['image_id'] = cnts.index(tuple(res[pred]['bbox']))

    return res
python function oop global
1个回答
0
投票

如果您的阈值是一个只能由开发人员配置的全局变量,通常的做法是将其定义在全部大写的文件之上

THRESHOLD = 10
就在您的导入之下。

在 python 中,您只需要在编辑函数内的全局变量时使用

global ...
。 (我想你不打算在这里做。)

© www.soinside.com 2019 - 2024. All rights reserved.