YOLOv8中是如何实现类似将结构体作为函数参数传递

70 篇文章 118 订阅
61 篇文章 132 订阅

YOLOv8中是如何实现类似将结构体作为函数参数传递

flyfish

实现类似将结构体作为函数参数传递可以有多种方式

可以使用类(class)来定义一个类似结构体(struct)的数据结构,然后将其作为函数参数传递

class MyStruct:
    def __init__(self, param1, param2, param3):
        self.param1 = param1
        self.param2 = param2
        self.param3 = param3

def my_function(struct):
    print(f"param1: {struct.param1}")
    print(f"param2: {struct.param2}")
    print(f"param3: {struct.param3}")

# 创建一个结构体实例
my_struct_instance = MyStruct(param1="value1", param2="value2", param3="value3")

# 将结构体实例传递给函数
my_function(my_struct_instance)

使用 dataclasses 模块

from dataclasses import dataclass

@dataclass
class MyStruct:
    param1: str
    param2: str
    param3: str

def my_function(struct: MyStruct):
    print(f"param1: {struct.param1}")
    print(f"param2: {struct.param2}")
    print(f"param3: {struct.param3}")

# 创建一个结构体实例
my_struct_instance = MyStruct(param1="value1", param2="value2", param3="value3")

# 将结构体实例传递给函数
my_function(my_struct_instance)

使用 **kwargs 传递参数

**kwargs 允许将任意数量的关键字参数传递给一个函数。通过这种方式,可以创建一个类似于结构体的参数列表,而不需要预先定义一个类

示例1:简单使用

def my_function(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

# 调用函数并传递参数
my_function(param1="value1", param2="value2", param3="value3")

示例2:检查特定参数

def my_function(**kwargs):
    if 'param1' in kwargs:
        print(f"param1: {kwargs['param1']}")
    if 'param2' in kwargs:
        print(f"param2: {kwargs['param2']}")
    if 'param3' in kwargs:
        print(f"param3: {kwargs['param3']}")

# 调用函数并传递参数
my_function(param1="value1", param2="value2", param3="value3")

类似YOLOv8中使用的例子

在YOLOv8中函数的传参,大量的地方使用了**kwargs

def process_kwargs(**kwargs):
    kwargs["conf"] = kwargs.get("conf") or 0.1
    kwargs["batch"] = kwargs.get("batch") or 1
    kwargs["mode"] = "track"
    
    print(f"conf: {kwargs['conf']}")
    print(f"batch: {kwargs['batch']}")
    print(f"mode: {kwargs['mode']}")

# 示例1:传递部分参数
process_kwargs(conf=0.5)
# 输出:
# conf: 0.5
# batch: 1
# mode: track

# 示例2:不传递任何参数
process_kwargs()
# 输出:
# conf: 0.1
# batch: 1
# mode: track

# 示例3:传递所有参数
process_kwargs(conf=0.8, batch=5, mode="detect")
# 输出:
# conf: 0.8
# batch: 5
# mode: track
  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西笑生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值