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

数据驱动手记 · · 613 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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

新版本python3.8已经发布

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

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

安装python3.8.2

  • windows下的安装很简单,直接下载msi安装文件双击就可以了,然后稍微配置一下环境变量。
  • Linux下稍微复杂一点,主要是因为没有合适的yum安装包,具体步骤如下:
# 下载源码
wget https://www.python.org/ftp/python/3.8.2/Python-3.8.2.tgz
# 解压
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()

  2. 剩下的特性就比较偏僻了,就不一一介绍了,感兴趣的同学可以直接参考官方文档,python3.8更新内容

本文由博客群发一文多发等运营工具平台 OpenWrite 发布


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:数据驱动手记

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

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

613 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传