来尝个鲜,Python3.8几大新功能体验,冲鸭!

Python一直报错:SyntaxError: invalid syntax 的原因及解决办法 本篇文章主要讲解 python报错提示 无效语法 SyntaxError: invalid syntax 的原因及解决办法 日期:2022年2月18日 作者:任聪聪 报错现象 python报错如下,但是没有发现那里不对。 造成报错的原因汇总 如上报错的代码行 elif 后,经过细心排查,造成的原因是由于空格和":"[中文的]。而此类报错实际上是提示语法错误,因为python对编码的格式、语句等都有严格的要求,如果语法不对或者语法缺胳膊少腿,就会报这个错误。 解决和排查方式 SyntaxError: i. 阅读详情

640?wx_fmt=png


继3.7版本之后Python再次发布了新版本,虽然新版本带来了不少调整,但是其中很大一部分都是对代码底层设计的修改,又或是typing、pickle等不常用的功能,对多数用户而言影响不大,今天我想重点聊一聊那些将对我们的代码编写产生较大影响的新功能。

在体验开始前先说下准备工作,由于Python3.8还没有正式发布,因此通过Anaconda的多版本管理搭建Python3.8新环境的方法是行不通的,我的做法是到官网下载对应的最新版本后单独安装。

640?wx_fmt=png


为了避免与现有环境冲突,将其更名为Python38(下图),下文中的Python如无特殊说明均为Python3.6, Python38为Python3.8。接下来就正式开始新特性体验。

640?wx_fmt=png


1.字典逆序


我们都知道Python中的字典是无序的,Python3.6对这一问题进行了修订,默认情况下会按照键的创建顺序进行排序,但也仅限于此,你无法像列表那样对字典直接进行排序操作。

这一情况在Python3.8中进一步得到改善,Python3.8中reversed()方法增加了对字典对象的支持,可以对字典进行逆序操作。

在下面这段代码中,对字典进行简单的迭代,将会按照顺序输出字典的键。

640?wx_fmt=png

现在改变一下代码,加入reversed()方法:

640?wx_fmt=png

先来看使用Python3.6的运行结果(下图),可以看到在Python3.6中,字典是不支持recersed()方法的。


640?wx_fmt=png

然后用Python3.8运行结果如下可以看到,字典按照键创建顺序的逆序进行了输出。虽然只是非常小的一点功能提升,但是在某些场景下对于字典对象的应用可能会起到非常关键的作用。

640?wx_fmt=png



2.位置参数


在Python3.8中的参数传递方面引入了一个新的特性:PEP 570 Positional-Only Argument——限定位置参数,下面就详细聊聊这究竟是怎么回事。

一般来说,Python中的参数传递有三种形式:位置参数、关键字参数和可变参数,为了避免不必要的麻烦,规定在可变参数之后只允许使用关键字参数。可是即便如此还是给程序员们留下了很大的自由空间,比如在可变参数之前,位置参数和关键字参数的使用几乎不受限制。这样就出现了一个问题,假如一个团队中很多人进行合作开发,函数的定义形式和调用模式是很难规范和统一的。

因此Python3.8就引入了一个“Positional-Only Argument”的概念和分隔符“/”,在分隔符“/”左侧的参数,只允许使用位置参数的形式进行传递。

举个例子来进行说明,首先建立下面这样一个函数,由于函数中使用了分隔符“/”,因此只能使用Python3.8运行。


 
def add_num(x, y, z=100, /, a=100):     print(x + y + z + a)
    print(x + y + z + a)


尝试以下面这种方式调用函数:


 
add_num(1, 2, z=4, a=5)

结果在运行的时候发生了报错:

640?wx_fmt=png

接着尝试全部以位置参数的形式调用函数(如下),结果顺利执行。可见“Positional-Only Argument”对分隔符“/”右侧的参数形式并没有限制。


 
# 输入add_num(1, 2, 4, 5)# 输出12
add_num(1, 2, 4, 5)
# 输出
12

那么如果只给定前两个参数,后面两个参数使用默认值又如何呢?通过下面的调用可以发现,也是可以正常运行的。


 
# 输入add_num(1, 2)# 输出203
add_num(1, 2)
# 输出
203

通过上面这个例子我们发现Python3.8对于参数传递的限制仅仅作用于分隔符“/”的左侧,而且只是在函数调用时发生作用。


3.赋值表达式


Python3.8中新增了赋值表达式“:=”操作符,简单来说就是把运算操作和赋值操作放在了一起,有点类似于“a+=b”这种表达方式,我想赋值表达式的出现应该是python追求简洁的传统理念所致。

来看下面这段代码,在func函数的if语句中,运算、赋值、判断操作在同一条语句中完成,即使变量a原本不存在也没关系。


 
# 输入def func(x, y, z):     if (a := x + y) != z:         print(a)     else:         print(z)func(1, 2, 5)# 输出3
def func(x, y, z):
    if (a := x + y) != z:
        print(a)
    else:
        print(z)
func(1, 2, 5)
# 输出
3

当然,就上面这段代码本身来看,将 x+y 的结果进行赋值似乎意义不大,但是如果运算表达式的计算量非常大或者要进行大规模独写等操作的话,重复执行对代码的效率将造成大的影响;而如果事先对运算表达式赋值则需要多写一行代码。


目前来看,赋值表达式最重要的作用就是使代码变得更加简洁,至于运行效率的差异,目前还没有验证。


4.快速调试


在之前的Python版本中,“f表达式”——f'{expr}'的作用与eval()函数基本相同,例如:

  • f'{[1, 2, 3, 4, 5, 6]}'的结果是列表[1, 2, 3, 4, 5, 6];

  • f'{3 + 2}'的结果是运算后的值5。

Python3.8中对该功能进行了优化,f'{expr}'语句中增加了对等号“=”的支持,在保留原来功能的基础上,还能够同时输出运算表达式本身。

例如执行先面这段代码,除了计算并输出运算结果外,还会将“=”和其左侧的算式一并输出:


 
x = 3print(f'{x * 2 = }')
print(f'{x * 2 = }')

执行结果:

640?wx_fmt=png

f'{expr}'不仅适用于基本的算术运算,还能够进行其他对象的操作,以列表为例,令lst=[1, 2, 3, 4, 5, 6],现在对其进行扩展操作:


 
lst = eval('[1, 2, 3, 4, 5, 6]')print(f'{lst = }')print(f'{lst + [7] = }')
print(f'{lst = }')
print(f'{lst + [7] = }')

运行结果如下:

640?wx_fmt=png


函数运算同样适用,例如对两个列表求交集,执行下面这段代码:


 
lst1 = [1, 2, 3, 4, 5]lst2 = [3, 5, 7]print(f'{list(set(lst1).intersection(set(lst2))) = }')
lst2 = [3, 5, 7]
print(f'{list(set(lst1).intersection(set(lst2))) = }')

运行结果:

640?wx_fmt=png

相比仅输出结果,连带运算表达式一起输出有助于定位检查,在调试代码的时候使用真的是快捷又方便。


5.共享内存


进程是系统进行资源分配的独立单位,在以前的python版本中,进程间的数据交互只能通过Queue、Pipes等方式来实现,数据无法直接共享。

在Python 3.8中,multiprocessing模块提供了SharedMemory类,可以在不同的Python进程之间创建共享的内存block。目前支持int、float、str、bytes、bool、None、numpy.ndarray等一部分Python对象。

还是举个例子来进行说明,在下面这段代码中建立了2个进程,在进程1中对列表中的每个元素执行+10操作,进程1结束后执行进程2,输出列表内容。

640?wx_fmt=png

由于进程之间数据无法共享,因此进程2中输出的列表是没有进行过+10操作的内容:

640?wx_fmt=png

现在我们对代码进行一下小小的修改,nums不是作为一个普通的list,而是作为一个共享内存对象来创建,代码如下:

640?wx_fmt=png

由于shared_memory是Python3.8中的新增内容,因此在Python3.6下运行会出错,我们还是用Python3.8来运行这段代码(结果如下)可以看到,进程2中输出的结果与进程1中是一样的,两个进程之间通过shared_memory实现了数据共享。

640?wx_fmt=png

当然,shared_memory在实际应用中肯定不会如此简单,

  • 比如SharedMemory.ShareableList和SharedMemory.SharedMemory的使用本身有很多规则和限制、

  • 比如需要考虑数据锁的问题等等,

  • 但是共享内存确实为进程间通讯提供了一个新的解决方案,而且据说其通讯效率也是非常之高的。

Python3.8发布的新特性和新功能还有很多,对一些内置模块的改进和优化则更多,想尝鲜的同学可以点击阅读原文,了解Python3.8详情!你对Python3.8新特性怎么看,欢迎吱一声留言!

往期热门:

值得收藏|菜鸟学Python【入门文章大全】


学习群:

小密圈人气很高的两个实战项目

小密圈的趣味实战-微信主题

3个月还没入门Python,看这100名小密圈的同学3周学Python的杰作

thonny-py38-4.1.7-windows-portable 立即下载

相关推荐

电阻应变式力传感器

电阻应变式力传感器

lu_fresh_student的博客 5075

【学习】字典序

字典序 解释: 按照字典中的排序来排序一串序列集合 (即对集合的全排列进行排序):***升序在前,降序在后*** abc < acb < bac < bca < cab < cba 逆字典序: 逆序排列 :***降序在前,升序在后*** 例子来源 例如: 对于2763541 找出字典序的下一个排列。 2763541 (从右至左首先出现的是35,3<5);...

ChangeW fafa的博客 1510

GPU加速的容器化AI开发:AnolisOS/CentOS8中的NVIDIA驱动与CUDA最佳实践

本文详细介绍了在AnolisOS/CentOS8系统中配置NVIDIA驱动与CUDA的最佳实践,涵盖驱动安装、CUDA工具链配置、容器运行时设置及性能优化等关键步骤。特别针对容器化AI开发场景,提供了GPU透传和资源管理的实用方案,帮助开发者构建高效的GPU加速开发环境。

weixin_27791839的博客 341

Python3.8.5安装界面详解

vooandvivi的博客 1513

从ViT到Swin Transformer:一文搞懂Transformer在CV中的进化史(附实战代码)

本文系统梳理了Transformer在计算机视觉领域的演进历程,从开创性的Vision Transformer(ViT)引入全局注意力机制,到DETR实现端到端目标检测,再到里程碑式的Swin Transformer通过滑动窗口和层次化设计高效桥接CNN与ViT。文章深入剖析了各模型的核心思想、技术突破与实战应用,并提供了可运行的代码示例,帮助读者从理论到实践全面掌握这一关键技术脉络。

cola5的博客 713

YOLO26剪枝 lamp剪枝测试精度仅掉0.7个点,速度提高11.8fps!

针对没有如何去选择剪枝的内容LAMP是层自适应幅度调整剪枝,无需任何参数,通过算法内部自己计算每个层的重要程度进行剪枝。基于权重重要程度和该层权重大小关系,权重越大表明该层越重要的思想进行优化。这个跟我前面说的非结构化全局剪枝是一个解法(MP),也就是lamp是在我前面那个非结构化剪枝的基础上进行优化的。但是这个逐层进行非结构剪枝目前还没有一个清晰的概念,确定每个层要剪枝多少。LAMP得分是一个平方权重大小,由层中所有“幸存权重”的总和归一化。

m0_64661770的博客 675

Python 3.8 + PyCharm + PyQt5(二)-环境配置(Hello Word)

Python 3.8 + PyCharm + PyQt5(二)-环境配置(Hello Word)环境配置创建工程Python输出Hello Word配置QtDesignerPyUIC的配置UI显示Hello Word 环境配置 主要的环境配置还是PyCharm的配置,主要配置两点UI界面的显示配置和解码配置 创建工程 打开PyCharm,选择New Project 再出来的界面中,选择自己工程需要的目录,其他暂时可以先不管。python选择到你安装的python安装的地址,找到exe。 点击creat建

u014730563的博客 1177

【深度学习驱动流体力学】完整配置安装 OpenFOAM 及其所需的ThirdParty与QT5工具

针对以上文件及文件目录介绍其功能特性:Allclean:这是一个脚本或命令,通常用于清理(即删除)所有编译生成的临时文件和目标文件。执行后,可以将编译过程中生成的中间文件和已编译的程序删除,以便重新开始编译或者清理空间。Allwmake:这是一个脚本或命令,用于编译并安装ThirdParty-10目录中的所有软件包。执行此命令会遍历所有子目录,编译其中的软件包并将它们安装到指定位置。这是一个脚本或命令,用于编译和安装Libccmio库。

源代码杀手的博客 1998

Python IDLE 使用教程 一文让你掌握Python3.8 自带的集成开发环境的使用

本文介绍了Python自带的集成开发环境IDLE的基本使用方法。主要内容包括:1) 三种启动IDLE的方式(开始菜单、系统搜索和命令行);2) Shell交互模式下的基础操作、常用快捷键和实用技巧;3) 编辑器窗口的功能介绍,包括代码编写、保存运行、批量注释和语法检查等操作;4) 详细列出了Shell和编辑器中的常用快捷键。通过本教程,初学者可以快速掌握IDLE的核心功能,提升Python开发效率。

z3530871280的博客 1万+

药物对接仿真软件:HADDOCK_(9).结果分析方法

HADDOCK是一种强大的药物对接仿真工具,通过对生成的输出文件进行详细的分析,我们可以验证仿真结果的可靠性,并为进一步优化药物设计提供依据。常见的分析方法包括解读输出文件、使用可视化工具进行结构分析、评估对接模型的稳定性和准确性等。通过这些步骤,我们可以更全面地了解受体和配体的结合模式,从而提高药物设计的成功率。

kkchenjj的博客 1009

22、忆阻器、忆阻系统及其神经形态应用综述

本文综述了忆阻器与忆阻系统的理论基础及其在神经形态系统中的广泛应用。从忆阻器的基本定义出发,介绍了其在非线性电路、存储技术、通信和神经形态计算等领域的应用潜力。重点探讨了基于忆阻器的神经元模型(如Hodgkin-Huxley、FitzHugh-Nagumo和Hindmarsh-Rose模型)、突触实现方式及多种忆阻神经网络架构,包括细胞神经网络、脉冲神经网络和递归神经网络等。此外,深入分析了忆阻器在水库计算中的理论研究与硬件实现进展,展示了其在时间序列处理、模式识别和信号预测等方面的优异性能。尽管忆阻技术前

kiwi8的博客 207

python3 字典 排序_来尝个鲜,Python3.8几大新功能体验,冲鸭!

继3.7版本之后Python再次发布了新版本,虽然新版本带来了不少调整,但是其中很大一部分都是对代码底层设计的修改,又或是typing、pickle等不常用的功能,对多数用户而言影响不大,今天我想重点聊一聊那些将对我们的代码编写产生较大影响的新功能。在体验开始前先说下准备工作,由于Python3.8还没有正式发布,因此通过Anaconda的多版本管理搭建Python3.8新环境的方法是行...

weixin_39928233的博客 240

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

python3.8图片_来尝个鲜,Python3.8几大新功能体验,冲鸭!

作者 | 小刘来源 | 菜鸟学Python继3.7版本之后Python再次发布了新版本,虽然新版本带来了不少调整,但是其中很大一部分都是对代码底层设计的修改,又或是typing、pickle等不常用的功能,对多数用户而言影响不大,今天我想重点聊一聊那些将对我们的代码编写产生较大影响的新功能。在体验开始前先说下准备工作,由于Python3.8还没有正式发布,因此通过Anaconda的多版本管理搭建P...

weixin_39649611的博客 182

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

python3的字典存储用户输入功能_来尝个鲜,Python3.8几大新功能体验,冲鸭!

继3.7版本之后Python再次发布了新版本,虽然新版本带来了不少调整,但是其中很大一部分都是对代码底层设计的修改,又或是typing、pickle等不常用的功能,对多数用户而言影响不大,今天我想重点聊一聊那些将对我们的代码编写产生较大影响的新功能。在体验开始前先说下准备工作,由于Python3.8还没有正式发布,因此通过Anaconda的多版本管理搭建Python3.8新环境的方法是行...

weixin_31542609的博客 214

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

python3.8究竟更新了什么?

2019.10.15日python 3.8.0 稳定版正式发布,让我们来看看究竟有什么新特性和优化吧。 Python 3.8.0 稳定版 部分新特性: PEP 572 ,赋值表达式 PEP 570 ,仅位置参数 PEP 587 ,Python 初始化配置(改进嵌入) PEP 590 ,Vectorcall:用于 CPython 的快速调用协议 PEP 578 ,运行时审核挂钩 PEP 574 ...

FatTigerx的博客 1228

【Python】Python环境安装与简单代码运行

怎么运行Python代码?

有知识,世界会更大 3868

anaconda更新python3.8_anaconda python3.8下载

anaconda python3.8版本是一款优秀的Python环境软件。现在很多人都在学习Python,据说可以进行人工智能分析,安装它后就默认安装了python、IPython、集成开发环境Spyder和众多的包和模块,python科学计算的第三方库尽在其中。【功能特点】1、开源;2、conda包;3、环境管理器;4、1000+开源库;5、安装过程简单;6、免费的社区支持;7、高性能使用Pyt...

weixin_39888412的博客 3429

python中字典是有序的还是无序的

python中字典是有序的还是无序的

m0_46829545的博客 8032

python38使用_Python基础38(进程基础)

进程基础基础概念进程定义:只有在运行当中的程序叫进程操作系统与进程的关系:操作系统调用一个程序,就是进程为何进入进程概念:隔离资源ps:进程是操作系统中资源分配最小单位进程的调度方法:1)先来先服务FCFS(不合理算法)2)短作业优先算法(不合理算法)3)时间片轮转算法(不太合理)4)多级反馈算法:进程(Process)当一个进程在第一时间片未执行完便降级到第二时间片优先执行(cpu优先处理第一时...

weixin_39631932的博客 274

python38moduledocs是什么_Python模块(Module)

一个Python Module(模块),是一个文件,包含了Python对象定义和Python语句(definitions and statements)。文件名就是模块名加上后缀.py,在模块内部,模块名存储在全局变量__name__中,是一个string,可以直接在module中通过__name__引用到module name。module是为了重复使用一些对象,比如类,函数,而将这些对象定义放...

weixin_39624769的博客 1502

多线程使用方式,多线程的通信及多线程常用方法

多线程 1.进程(Process)和线程(Thread) 进程:是执行程序的一次执行过程,他是一个动态的概念。是系统资源分配的单位。 通常一个进程中可以包含若干个线程,当然一个进程中至少有一个线程。线程是CPU调度和执行的单位。默认线程:用户线程,守护线程。 创建线程的方式: 方法一: 自定义线程类继承Thread类 重写run(),编写线程执行体 创建线程对象,调用start方法启动线程。 注意:线程开启不一定立即执行,由CPU调度执行。 方法二: 定义一个类实现Runnable接口 实

Zmd_23的博客 425

Python3.8的下载与安装

Python3.8的下载与安装

Nathan's Blog 1万+

Python3.8新特性

Python 3.8 最让大家期待的就是海象运算符,其他方面还增加仅限位置形参、字典反转、f-string 的 = 用法,另外,很多内置方法的性能都提高了 20% - 50% ,类型提示方面也有一些更新,还是很值得更新使用的。

正在努力搬砖人的博客 3871

python使用uiautomator2操作真机(华为Honor 10)

进入路径后,直接adb devices即显示出了连接手机的情况(没想到会这么顺利),此时,手机界面上会有弹出框:询问是否运行这台计算机对手机进行调试。输入python38 -m uiautomator2 init,注意手机上要同意继续安装(会有两次或者多次提醒,均同意)python3.8.10,华为手机Honor 10(6G,64g),版本android 9。2、设置-系统-开发人员选项-打开“USB调试”和打开“仅充电模式下允许ADB调试”1、设置-关于手机-在“版本号”上连续点击即可进入开发者模式。

kxltsuperr的专栏 8608
上一篇: 因为Python的这3个优点,我的薪资涨了一倍
下一篇: 快报:Java跌惨!Python背后或有推手?网友:心态已崩!
菜鸟学Python
博客等级 码龄9年 8086粉丝 571原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值