在一开始的时候
一开始,上帝创造了天堂和地球。地球开始凉爽,自动营养开始流口水,尼安德特人开发了工具,我开始学习python。就像我们早期的祖先benefited from using fire to prepare food一样,我从使用(零星贡献)AWS开源工具中受益。
这是一个故事,讲述了我如何从一个自学成才的python开发人员转变为对类型的提示,甚至使用它们。说服我所需要的只是一家数十亿美元的公司,拥有成千上万的开发人员。
我不是固执的,我不是鸭子
与介绍的段落导致您相信什么相反,我不是一个固执的人。我会说我很自信,我对使用数据类型的看法是在我的青少年时代形成的。我是一个叛军,没有停顿。那是Python 2.6的时间,当然具有多种数据类型,但它们是动态的。这意味着您不必为变量声明类型 - 该类型是由解释器在运行时推断的。
您可以将具有不同类型(int
int
to float
)的变量重新解析,这很好。
salary = 12000
salary = 12000.0
我很惊讶。它很容易。没有大学教授试图教我的static final void warranty<List>
。您只需坐下(坐着是可选的),键入python,然后观看魔术发生在您面前。一个cosasional TypeError
不会阻止我。试图迭代整数?去过也做过。那些都没有说服我花一些时间并了解python中的类型提示。
如果阅读本文,我不会怪您,您认为我是一个不好的开发人员。我从没说过我很好:)
不相信炒作
python和我一起越来越年轻,而Python版本3.5则是type hints。顾名思义,它们只是提示。 Python仍然是一种动态打字的语言。它们没有进行评估,并且在运行时不会影响您的应用程序。
这些提示确实有帮助;现代IDE理解它们,并提出更好的自动完整结果。他们还警告当使用不正确的类型时:
def add(a, b) -> int:
return str(a+b)
我知道这些Python的进步,但我并不是在炒作火车上。这个Guido的人是谁?为什么他会带来噪音? Python的语法在类型提示之前是如此干净。我的同事比我更明智,确实上了炒作火车,很快我就看着与此相似的代码:
def calculate_avg(salaries: List[int]) -> AverageSalary:
# perform calculations
salaries: List[int] = [12000, 13000, ...]
avg_salary: AverageSalary = calculate_avg(salaries)
这是可怕的。这很吵,不可读,是牺牲的。
大融化
前一段时间,我被介绍给AWS CDK for Python,经过多年的Terraform之后,这是新鲜空气的呼吸(我仍然<3 Terraform,不要误会我的意思)。然后,我开始注意到CDK代码在其所有语言变体中都强烈键入,这是有充分理由的。我喜欢CDK,但我很喜欢吗?
我吞咽,咬住子弹,并添加了我必须使用的类型。我还与CDK进行了简短的冒险,用于打字稿,然后...我开始喜欢严格的打字。它使代码严格且定义良好,并且您知道将期望作为回报值。这一切都使有道理!更不用说它是如何improves collaboration, makes large code-bases more maintainable and prevents silly bugs。
农民放下干草叉,因为giant's heart has melted。
从“我讨厌这个”到...
我真的不喜欢类型的提示。与CDK合作开始更好地改变这一点,然后我发现了AWS Lambda Powertools。它结合了我充满热情的多种事情,因此我对使用图书馆并改进了它充满热情。 Lambda PowerTools使用其几个主要特征(Parser,Event Sources和Typing)。
我热衷于为这个开源项目做出贡献,这意味着我必须跳入静态打字并贡献将融合并接受的代码。使用静态类型是如此自然,这是非常有意义的,尤其是在我未知的代码库中。这些类型的提示不是噪音,而是真正的提示,它帮助我理解了我不熟悉的代码库。
当我阅读或编写这样的代码时,我的肚子现在保持平静:
log_level: Optional[Union[int, str]] = None
使用CDK并为Lambda PowerTools做出贡献,使我转了180度。我从“我讨厌这个...”变成了“类型提示很棒!”。使用它们使我明白了为什么类型的提示和静态键入是必要且有用的。我什至在试图成为更好的开发人员的同时,在我的pet projects中偶尔使用它们。
我们的祖先煮熟的食物使他们的消化道变小,为大脑生长留下了更多的能量。我发生了类似的事情。使用类型提示使我能够了解陌生的代码库并提高我的编码技能。 MU谦虚的贡献是一种偿还开源社区的方式,并感谢Lambda Powertools for Python的贡献者
结束本文的一种好方法是另一位公共敌人参考:将这个非努力的动态型转换为一个打字的提示,只有几个月的时间将multi-billion dollar company with tens of thousands of developers转换为几个月。
在本文撰写期间,没有静态打字的语言受到伤害。