小谈为什么会使用python类型注解
虽然本人也写过一些中小型python项目,但只是在最近才考虑给自己的项目中引入类型注解,大概的风格是这样的:
对于习惯了动态语言特性的程序员来说,增加类型提示会感觉“很累”,有种在写静态语言1的感觉。因为你需要额外写一些注释,更何况增加了类型注解后也没有提升运行性能2,那增加它的意义在哪儿?
增加更多的提示,以方便长期维护项目
我不知道有多少开发者在过了很长时间之后知道自己写的每个方法、函数、类需要哪些类型的数据,需要返回哪些类型的数据?至少我自己是做不到,可能过了一个星期就能忘得差不多了,如果在这样的情况下拓展项目代码,很容易会引入一些奇怪的错误,要么是类型错误,要么是传入的参数过多或过少等各种与数据方面的问题。再加上本身个人技术不咋地,写的代码可维护性不是很高,时间一长就很容易写错烂代码导致项目报废
而有了类型注解之后,虽然确实要花一些时间去标注传入的数据类型、传出的数据类型,但由于本人大部分时间都会在IDE中编写代码,增加更多的类型注解可以让IDE更好的理解我的代码的意思,达到在运行之前就可以规避一部分不必要的错误,减少一定的错误,举一个例子
比如以下这个函数,你知道需要传入什么数据,会返回什么数据吗
可能有的人第一想法是a1和a2是整数,返回的也是整数。我一开始也是这么想的,但是借着参考一些书籍才发现,原来是我想的太简单,你可以试试运行下面的代码,看看是不是都能跑通
print(main(1,2))
print(main('hello','world'))
print(main(1.2,2.3))
print(main([1,2,3],[4,5,6]))
这只是其中一个小案例,当然在实际开发过程中不会写这么简单的方法或函数,但也借此反思一个问题:如果没有足够的文档说明,时间久了我能知道该传入什么数据,返回什么数据吗?
但如果写成下面的代码,情况可能就不一样了
这样我们就马上知道我们要传入int类型的两个数据,返回的是int类型的数据,同时由于IDE的智能提示,如果再写出上面的调用代码,很快就会提示报错
But
说了这些,可能有的人会想:那是不是所有的python项目都要加上类型注解?我的答案是:根据情况来定,类型注解并不是万能的
如果只是写个脚本,做一些非常简单的任务,增加类型提示不但起不到作用,反而会降低python的灵活性,写脚本的效率会降低
由于类型注解的可选性,导致在某些场景下类型注解没有办法完全限制住数据类型,再加上如果项目比较重度依赖python的动态特性,增加类型注解的意义不大
所以具体怎么用,什么时候用,需要根据不同的场景去决定,用好类型注解,会对开发效率有帮助,而盲目使用类型注解,反而起不到应有的效果,同时还会觉着写python代码很累,毕竟python的语法特性允许我们编写相对简单易用的代码
另外,再提一嘴,如果你确定要使用类型注解,不要盲目追求100%类型注解覆盖,这样会影响开发效率,也影响项目开发,只需要对核心的方法/函数标注即可