百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

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

bigegpt 2024-10-12 05:59 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()
  1. 剩下的特性就比较偏僻了,就不一一介绍了,感兴趣的同学可以直接参考官方文档,python3.8更新内容。

相关推荐

最全的MySQL总结,助你向阿里“开炮”(面试题+笔记+思维图)

前言作为一名编程人员,对MySQL一定不会陌生,尤其是互联网行业,对MySQL的使用是比较多的。对于求职者来说,MySQL又是面试中一定会问到的重点,很多人拥有大厂梦,却因为MySQL败下阵来。实际上...

Redis数据库从入门到精通(redis数据库设计)

目录一、常见的非关系型数据库NOSQL分类二、了解Redis三、Redis的单节点安装教程四、Redis的常用命令1、Help帮助命令2、SET命令3、过期命令4、查找键命令5、操作键命令6、GET命...

netcore 急速接入第三方登录,不看后悔

新年新气象,趁着新年的喜庆,肝了十来天,终于发了第一版,希望大家喜欢。如果有不喜欢看文字的童鞋,可以直接看下面的地址体验一下:https://oauthlogin.net/前言此次带来得这个小项目是...

精选 30 个 C++ 面试题(含解析)(c++面试题和答案汇总)

大家好,我是柠檬哥,专注编程知识分享。欢迎关注@程序员柠檬橙,编程路上不迷路,私信发送以下关键字获取编程资源:发送1024打包下载10个G编程资源学习资料发送001获取阿里大神LeetCode...

Oracle 12c系列(一)|多租户容器数据库

作者杨禹航出品沃趣技术Oracle12.1发布至今已有多年,但国内Oracle12C的用户并不多,随着12.2在去年的发布,选择安装Oracle12c的客户量明显增加,在接下来的几年中,Or...

flutter系列之:UI layout简介(flutter-ui-nice)

简介对于一个前端框架来说,除了各个组件之外,最重要的就是将这些组件进行连接的布局了。布局的英文名叫做layout,就是用来描述如何将组件进行摆放的一个约束。在flutter中,基本上所有的对象都是wi...

Flutter 分页功能表格控件(flutter 列表)

老孟导读:前2天有读者问到是否有带分页功能的表格控件,今天分页功能的表格控件详细解析来来。PaginatedDataTablePaginatedDataTable是一个带分页功能的DataTable,...

Flutter | 使用BottomNavigationBar快速构建底部导航

平时我们在使用app时经常会看到底部导航栏,而在flutter中它的实现也较为简单.需要用到的组件:BottomNavigationBar导航栏的主体BottomNavigationBarI...

Android中的数据库和本地存储在Flutter中是怎样实现的

如何使用SharedPreferences?在Android中,你可以使用SharedPreferencesAPI来存储少量的键值对。在Flutter中,使用Shared_Pref...

Flet,一个Flutter应用的实用Python库!

▼Flet:用Python轻松构建跨平台应用!在纷繁复杂的Python框架中,Flet宛如一缕清风,为开发者带来极致的跨平台应用开发体验。它用最简单的Python代码,帮你实现移动端、桌面端...

flutter系列之:做一个图像滤镜(flutter photo)

简介很多时候,我们需要一些特效功能,比如给图片做个滤镜什么的,如果是h5页面,那么我们可以很容易的通过css滤镜来实现这个功能。那么如果在flutter中,如果要实现这样的滤镜功能应该怎么处理呢?一起...

flutter软件开发笔记20-flutter web开发

flutterweb开发优势比较多,采用统一的语言,就能开发不同类型的软件,在web开发中,特别是后台式软件中,相比传统的html5开发,更高效,有点像c++编程的方式,把web设计出来了。一...

Flutter实战-请求封装(五)之设置抓包Proxy

用了两年的flutter,有了一些心得,不虚头巴脑,只求实战有用,以供学习或使用flutter的小伙伴参考,学习尚浅,如有不正确的地方还望各路大神指正,以免误人子弟,在此拜谢~(原创不易,转发请标注来...

为什么不在 Flutter 中使用全局变量来管理状态

我相信没有人用全局变量来管理Flutter应用程序的状态。毫无疑问,我们的Flutter应用程序需要状态管理包或Flutter的基本小部件(例如InheritedWidget或St...

Flutter 攻略(Dart基本数据类型,变量 整理 2)

代码运行从main方法开始voidmain(){print("hellodart");}变量与常量var声明变量未初始化变量为nullvarc;//未初始化print(c)...