gpt4 book ai didi

python - 通过弃用周期切换参数名称?

转载 作者:行者123 更新时间:2023-12-01 04:04:20 26 4
gpt4 key购买 nike

我的包目前有一个类似的功能:


def do_something(客户):
customer_id = customer.id if isinstance(customer, Customer) else customer
...

我想对参数类型更加严格,并将其替换为:


def do_something(customer_id):
...

但是,我要非常小心,不要在不经历弃用周期的情况下破坏用户的代码。在条件中添加弃用警告(然后删除整个条件)足以满足大多数用途,但某些用户可能会将我的 customer 参数作为关键字参数传递,在这种情况下,我的更改将中断他们的代码。

有什么方法可以将我的参数名称从 customer 转换为 customer_id,同时不破坏任何代码,除非通过旧代码仍然有效的弃用周期?

最佳答案

我认为弃用和主要版本更改是可以的。您可能会同时支持使用 *args**kwargs

def do_something(*args, **kwargs):
if args:
customer_id = args[0]
elif 'customer' in kwargs:
customer_id = kwargs['customer']
elif 'customer_id' in kwargs:
customer_id = kwargs['customer_id']
else:
raise TypeError('Expected customer_id')

它并不完全向后兼容,因为函数签名不同并且内省(introspection)也会不同,但它支持关键字参数和位置参数。如果你有很多参数(特别是默认值),它可能会变得有点困惑。

您可以进行额外的检查,以确保人们不会同时提供两个关键字参数,或者按位置提供参数并作为关键字提供参数。许多库甚至不包含弃用警告,它们只是增加主要版本并在发行说明中指出更改。我认为保持代码简洁、易于理解并告诉用户接受并更新代码比让代码更难以阅读并增加出现错误的机会要好得多。

关于python - 通过弃用周期切换参数名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35930005/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com