吃青春饭的程序员?
都说程序员是吃青春饭的,这话我想否认,但有时候也不得不认同!你认同吗?有胆量就点个赞表示你认同!
真正的程序员是靠代码混饭吃的,而代码是要用编程语言写的,可是编程语言一直在更新,这就意味着我们要不断的学习新的东西。这不,新的Python版本3.9稳定版10月份发布了!
几个月前,我给我的小萌新程序员们说"Python的最新版本是3.8.4"的场景还历历在目!一转眼就成为了历史!几乎是打脸啊。
以前Python的更新周期是18个月,这次有人提议改成12个月的更新周期并且被接受了。所以接下来Python程序员就有更多新知识学习了。是应该感谢提这个建议的人呢?还是怎么他呢?
不过大家也不用担心,凡事都有两面性:
- 不断学习东西,就会变得更加聪明,老了也不会有老年痴呆症!
- 虽然编程语言不断更新,但编程的核心原理是变化很慢的。所以大牛都会说:我很少写代码了,我主要靠思想,思想,懂吗?
Python3.9 跟还是不跟?
大部分人应该都是在用3.8,那么3.9来了,我到底是跟还是不跟呢?这是一个问题!
答案很简单:可以不跟!
这个答案适用于绝大部分人,因为3.9的变化没有很大的特性更新,也没有淘汰重要的特性。你的项目已经在进行了,完全没有必要更新。
当然对于新人,选择从3.9开始是个好的选择。
虽然说可以不跟,但了解一下3.9有什么新特性也还是很有必要的,因为:迟早有一天,你要更新的!
Python 3.9 有什么新特性 - 忙人版本
我知道大家都很忙,所以就捡重要的说啦。Python3.9对于广大的普通程序员来说,到底有什么更新呢?
1. Dict合并运算符
#3个人的成绩,麦叔最高,yeah!
score1 = {'张三':98, '李四':99, '麦叔':100}
#老师又发来两个人的成绩,一个是王五的,一个是麦叔的新成绩
#麦叔的成绩搞错了,实际上只有88,
score2 = {'王五':87, '麦叔':88}
#新特性:合并字典运算符
score3 = score1 | score2
#{'张三':98, '李四':99, '麦叔':100, '王五':87}
print(score3)
#如果要直接修改score1里的值,使用|=,类似于 +=
score1 |= score2
在3.8中,我们完全可以使用{ ** score1, ** score2}来实现。就是多了个运算符,没什么新意。
2. 字符串移除前缀和后缀
d = '日期:2020-10-15,星期四'
#新特性:去掉前缀
d.removeprefix('日期:')
#新特性:去掉后缀
d.removesuffix(',星期四')
字符串的去掉空格方法strip还是非常有用的,这两个方法相对来说有点鸡肋,完全可使用切片操作实现,不过也算是更加直观一些吧。
3. 容器类(list, set等)支持泛型
Python是一个动态语言,在list等容器类里,我们可以放入任何类型的数据(字符串,数字等),这个方便也会带来问题。说的高大上点,就是这样的代码不安全。
比如这段:
#这次成绩很不理想,麦叔只考了32分
scores = [32, 45, 65, 78]
#list可以添加任何类型,不小心加进去一个字符串
scores.append('88')
#计算总分:下面这行会报错,因为字符串'88'不能和其他数字相加
sum(scores)
这就是程序不安全,在最终运行的时候才会报错,怎么不早点告诉我??
解决方法就是使用泛型,说人话就是:定义list的时候就确定它里面的数据类型,后面就只能加这种数据类型:
#定义了scores里面只能存放整数
scores = list[int]()
#添加字符串进去是不允许的,在写代码的时候IDE就会告诉我们
scores.append('88')
这就意味着scores里面的东西一定是数字,我们后面对它的操作可以放心大胆的去做。也就意味着更安全的程序。
Python3.9之前也可以实现指定类型的list(泛型),但必须引入另外一个模块typing,也就是说是作为一个补丁来实现的。现在泛型是亲儿子了!
这个改变我觉得还是比较重量级的!为了更安全的程序,给它点赞!!
本来我就想说着3点,但是也太少了吧。还有一点,对于开发大型的,需要考虑时区的程序员很重要。
4. 引入新模块zoneinfo模块支持IANA时区数据库
如果我说2020年10月15日的下午4点开会,一个美国人和一个中国人听到后,所理解的时间可能是不同的,因为时区不同。这在有些程序中也很重要。
比如你开发了一个时钟程序,你在国内一直使用,效果很好。忽然有一天你去欧洲旅游了,你习惯性的使用这个时钟程序,可它还是显示的中国时间,结果造成你提前好几个小学赶到机场,你一定想要狠狠的把开发这个程序的人打一顿!这种程序,我们一定得考虑时区的问题。
Python3.9引入的zoneinfo就是为了更好的支持时区,严格说是支持IANA时区数据库:
from zoneinfo import ZoneInfo
from datetime import datetime
#定义时间的时候,同时传入时区
dt = datetime(2020, 10, 15, 16, tzinfo=ZoneInfo("Asia/Shanghai"))
IANA是一家组织,它制定了一个时区数据库,说人话就是:它定义了一个时区的列表,比如Asia/Shanghai表示中国时区(中国只有一个时区)。
我觉得对于大部分程序员来说,这几个就是最重要的了。
Python 3.9 有什么新特性 - 高级版本
当然还有很多其他的更新,比如:
- 放宽了装饰器语法的限制
- 新的数学函数
- 新的解析器
- IPv6范围内的地址
- 灵活的函数和变量注解
- 其他的细节的语言更新等
对于高级人士来说,我还是很诚恳的建议直接去看Python3.9的官方发布说明的,这个官方发布说明昨天才出来,正热乎着呢:
https://docs.python.org/3.9/whatsnew/3.9.html