七叶笔记 » golang编程 » python3.8版本已经更新,数据分析师和数据开发者看过来

python3.8版本已经更新,数据分析师和数据开发者看过来

新版本python3.8已经发布

作为一个放弃java转投 python 很多年的数据开发者,已经好久没有更新python了,也很久没有关注python的一些新功能新特性了,去年把自己做的几个小项目更新到了python3.6,然后就一直没把精力放到这一块了。

今天因为安装一个第三方库失败,打算去官网看下 Python 的更新情况,发现已经更新至python3.8.2了,那么就当机立断下载安装,顺便学习一下python3.8的新特性吧。

安装python3.8.2

  • windows下的安装很简单,直接下载msi安装文件双击就可以了,然后稍微配置一下环境变量。
  • Linux下稍微复杂一点,主要是因为没有合适的yum安装包,具体步骤如下:
 # 下载源码
wget 
# 解压
tar zxf Python-3.8.2.tgz Python-3.8.2/
# 进入文件夹
cd Python-3.8.2/
# 编译前准备
yum update -y
yum groupinstall -y 'Development Tools'
yum install -y gcc openssl-devel bzip2-devel libffi-devel
yum install -y zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel libffi-devel gcc make
​
# 编译安装
./configure prefix=/usr/local/python3.8 --enable-optimizations
make && make install
# 添加环境变量
export PATH=$PATH:/usr/local/python3.8/bin/  

主要的新特性

Assignment expressions 海象 运算符

Python 3.8.0 有一个新的语法:=,它将值赋给一个更大的表达式中的变量。它被亲切地称为 “海象运算符”(walrus operator) ,因为它长得像海象的眼睛和象牙。

之前学了一直很自GOLANG,感觉python这次在想GOLANG学习,就像JAVA在学习python一样。

现在让我们看看下面的代码段:

 a = range(15)
if (len(a)) > 10:
    print(f"List is too long ({len(a)} elements, expected <= 10)")  

在这个代码段中,我们将调用函数 len()两次。有什么方法可以避免重新调用以提高可读性吗?是的,在改进代码之后,我们得到了以下结果:

 a = range(15)
if (n := len(a)) > 10:
    print(f"List is too long ({n} elements, expected <= 10)")  

请尽量将海象运算符的使用限制在清晰的场合中,以降低复杂性并提升可读性。

Positional-only parameters 仅限位置形参

新增了一个函数形参语法 / 用来指明某些函数形参必须使用仅限位置而非关键字参数的形式。 这种标记语法与通过 help() 所显示的使用 Larry Hastings 的 Argument Clinic 工具标记的 C 函数相同。。

 # 在下面的例子中,形参 a 和 b 为仅限位置形参,c 或 d 可以是位置形参或关键字形参,而 e 或 f 要求为关键字形参:
def f(a, b, /, c, d, *, e, f):
    print(a, b, c, d, e, f)
   
# 合法的
f(10, 20, 30, d=40, e=50, f=60)
​
# 不合法的
f(10, b=20, c=30, d=40, e=50, f=60)  # b cannot be a keyword argument
f(10, 20, 30, 40, 50, f=60)  # e must be a keyword argument  

这种标记形式的一个用例是它允许纯 Python 函数完整模拟现有的用 C 代码编写的函数的行为。 例如,内置的 divmod() 函数不接受关键字参数:

 def divmod(a, b, /):
    "Emulate the built in divmod() function"
    return (a // b, a % b)  

Python 初始化配置(改进的嵌入)

新增的 PYTHONPYCACHEPREFIX 设置 (也可使用 -X pycache_prefix) 可将隐式的字节码缓存配置为使用单独的并行文件系统树,而不是默认的每个源代码目录下的 pycache 子目录。

缓存的位置会在 sys.pycache_prefix 中报告 (None 表示默认位置即 pycache 子目录)。

f – 字符串 支持 = 用于自动记录表达式和调试文档

增加 = 说明符用于 f-string。 形式为 f'{expr=}’ 的 f – 字符串将扩展表示为表达式文本,加一个等于号,再加表达式的求值结果。 例如:

 >>> user = 'eric_idle'
>>> member_since = date(1975, 7, 31)
>>> f'{user=} {member_since=}'
"user='eric_idle' member_since=datetime.date(1975, 7, 31)"  

通常的 f 字符串格式说明符 允许更细致地控制所要显示的表达式结果:

 >>> delta = date.today() - member_since
>>> f'{user=!s}  {delta.days=:,d}'
'user=eric_idle  delta.days=16,075'  

= 说明符将输出整个表达式,以便详细演示计算过程:

 >>> print(f'{theta=}  {cos(radians(theta))=:.3f}')
theta=30  cos(radians(theta))=0.866  

其他新特性

  1. 正则表达式添加对 \N{name} 专业词汇的支持
 >>> notice = 'Copyright © 2019'
>>> copyright_year_pattern = re.compile(r'\N{copyright sign}\s(\d{4})')
>>> int(copyright_year_pattern.search(notice).group(1))  
  1. Dict and dictviews are now iterable in reversed insertion order using reversed()
  1. 剩下的特性就比较偏僻了,就不一一介绍了,感兴趣的同学可以直接参考官方文档,python3.8更新内容。

相关文章