前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一日一技:警告但不禁止,遗留代码的优化策略

一日一技:警告但不禁止,遗留代码的优化策略

作者头像
青南
发布2023-11-15 16:34:17
1330
发布2023-11-15 16:34:17
举报
文章被收录于专栏:未闻Code未闻Code

摄影:产品经理

碗豆尖的新做法

在之前的多篇文章中,我都反复告诫大家,不要滥用字典来传大量数据。因为当你的函数收到一个字典的时候,你根本不知道这个字典里面有哪些Key,你必须有一层一层往上看,找到所有尝试往字典里面添加新Key的地方,你才能知道它总共有哪些Key。

但是,在正常公司项目中,我们可能会需要维护一些历史遗留代码。代码规模大,函数调用层级非常深。并且之前的人已经使用字典来传递了大量的数据。

短时间内,我们没有办法直接把字典改成Dataclass。那么我们能做的,就是尽量避免后续的维护者往里面加入新的Key。我以前遇到过一个项目,它有一个字典,刚刚开始初始化的时候,只有5个Key。这个字典作为参数被传入了很多个函数,每个函数都会往它里面加很多个Key。到最后,这个字典里面已经有40多个Key了。

对历史遗留代码的修改,必须要谨小慎微,稍不注意改错一行代码,可能整个系统就不能工作了。因此,我们的目标是尽量在不影响现有代码功能的情况下,以警告而不是禁止的形式告诉其他开发者,不要再加Key进去了。如果你强行要加入,代码也能运行,但出问题你要自己负责。

我们知道,Python 的类型标注正好就是警告但不禁止。当你的类型有问题时,他会告诉你这里有错,但你强行要运行,代码也能正常工作。

对于字典,我们可以使用TypedDict来限制它能有哪些Key。我们来看一段代码:

代码语言:javascript
复制
from typing import TypedDict  
  
  
class User(TypedDict):  
    name: str  
    age: int  
    address: str  
    salary: int  
  
  
kingname: User = {  
    'name': '青南',  
    'age': 18,  
    'address': '上海',  
    'salary': 9999999999  
}  
  
  
def test_dict(user: User):  
    print(user['name'])

这只是一段看似非常普通的代码,在PyCharm也看不出有什么异常:

但当我想在函数里面,额外往字典加一个新字段时,就会发出警报:

这个警告在一定程度上,可以提醒其他人不要往字典中乱加Key。虽然强行添加也没有问题,但至少起到了提醒的作用。

如果你在一开始初始化字典时,就把类型指定好,那么你一开始就必须提供所有字段,否则它也会发出警告,如下图所示:

这种情况下,我们可以在初始化字典时,不加类型标注,但在函数参数里面加上类型标注。那么这样以来,就能实现:只能往字典添加特定的字段,不能添加额外字段。如下图所示:

END

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-11-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 未闻Code 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档