Python 3.8 有什么新变化 - 其他语言特性修改

Posted ItisNagatoYuki

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 3.8 有什么新变化 - 其他语言特性修改相关的知识,希望对你有一定的参考价值。

其他语言特性修改

在之前版本中 continue 语句不允许在 finally 子句中使用,这是因为具体实现存在一个问题。 在 Python 3.8 中此限制已被取消。 (由 Serhiy Storchaka 在 bpo-32489 中贡献。)

bool, int 和 fractions.Fraction 类型现在都有一个 as_integer_ratio() 方法,与 float 和 decimal.Decimal 中的已有方法类似。 这个微小的 API 扩展使得 numerator, denominator = x.as_integer_ratio() 这样的写法在多种数字类型上通用成为可能。 (由 Lisa Roach 在 bpo-33073 和 Raymond Hettinger 在 bpo-37819 中贡献。)

int, float 和 complex 的构造器现在会使用 index() 特殊方法,如果该方法可用而对应的方法 method int(), float() 或 complex() 方法不可用的话。 (由 Serhiy Storchaka 在 bpo-20092 中贡献。)

添加 \\Nname 转义符在 正则表达式 中的支持:

>>>
>>> notice = 'Copyright © 2019'
>>> copyright_year_pattern = re.compile(r'\\Ncopyright sign\\s*(\\d4)')
>>> int(copyright_year_pattern.search(notice).group(1))
2019

(由 Jonathan Eunice 和 Serhiy Storchaka 在 bpo-30688 中贡献。)

现在 dict 和 dictview 可以使用 reversed() 按插入顺序反向迭代。 (由 Rémi Lapeyre 在 bpo-33462 中贡献。)

在函数调用中允许使用的关键字名称语法受到进一步的限制。 特别地,f((keyword)=arg) 不再被允许。 关键字参数赋值形式的左侧绝不允许一般标识符以外的其他内容。 (由 Benjamin Peterson 在 bpo-34641 中贡献。)

在 yield 和 return 语句中的一般可迭代对象解包不再要求加圆括号。 这使得 yield 和 return 的语法与正常的赋值语法更为一致:

>>>
>>> def parse(family):
        lastname, *members = family.split()
        return lastname.upper(), *members

>>> parse('simpsons homer marge bart lisa maggie')
('SIMPSONS', 'homer', 'marge', 'bart', 'lisa', 'maggie')

(由 David Cuthbert 和 Jordan Chapman 在 bpo-32117 中贡献。)

当类似 [(10, 20) (30, 40)] 这样在代码中少了一个逗号时,编译器将显示 SyntaxWarning 并附带更有帮助的提示。 这相比原来用 TypeError 来提示第一个元组是不可调用的更容易被理解。 (由 Serhiy Storchaka 在 bpo-15248 中贡献。)

datetime.date 或 datetime.datetime 和 datetime.timedelta 对象之间的算术运算现在将返回相应子类的实例而不是基类的实例。 这也会影响到在具体实现中(直接或间接地)使用了 datetime.timedelta 算术运算的返回类型,例如 astimezone()。 (由 Paul Ganssle 在 bpo-32417 中贡献。)

当 Python 解释器通过 Ctrl-C (SIGINT) 被中断并且所产生的 KeyboardInterrupt 异常未被捕获,Python 进程现在会通过一个 SIGINT 信号或是使得发起调用的进程能检测到它是由 Ctrl-C 操作杀死的正确退出代码来退出。 POSIX 和 Windows 上的终端会相应地使用此代码在交互式会话中终止脚本。 (由 Google 的 Gregory P. Smith 在 bpo-1054041 中贡献。)

某些高级编程风格要求为现有的函数更新 types.CodeType 对象。 由于代码对象是不可变的,需要基于现有代码对象模型创建一个新的代码对象。 使用 19 个形参将会相当繁琐。 现在,新的 replace() 方法使得通过少量修改的形参创建克隆对象成为可能。

下面是一个修改 statistics.mean() 函数来防止 data 形参被用作关键字参数的例子:

>>>
>>> from statistics import mean
>>> mean(data=[10, 20, 90])
40
>>> mean.__code__ = mean.__code__.replace(co_posonlyargcount=1)
>>> mean(data=[10, 20, 90])
Traceback (most recent call last):
  ...
TypeError: mean() got some positional-only arguments passed as keyword arguments: 'data'

(由 Victor Stinner 在 bpo-37032 中贡献。)

对于整数,现在 pow() 函数的三参数形式在底数与模数不可约的情况下允许指数为负值。 随后它会在指数为 -1 时计算底数的模乘逆元,并对其他负指数计算反模的适当幂次。 例如,要计算 38 模 137 的 模乘逆元 则可写为:

>>>
>>> pow(38, -1, 137)
119
>>> 119 * 38 % 137
1

模乘逆元在求解 线性丢番图方程 会被用到。 例如,想要求出 4258𝑥 + 147𝑦 = 369 的整数解,首先应重写为 4258𝑥 ≡ 369 (mod 147) 然后求解:

>>>
x = 369 * pow(4258, -1, 147) % 147
y = (4258 * x - 369) // -147
4258 * x + 147 * y
369

(由 Mark Dickinson 在 bpo-36027 中贡献。)

字典推导式已与字典字面值实现同步,会先计算键再计算值:

>>>
>>> # Dict comprehension
>>> cast = input('role? '): input('actor? ') for i in range(2)
role? King Arthur
actor? Chapman
role? Black Knight
actor? Cleese

>>> # Dict literal
>>> cast = input('role? '): input('actor? ')
role? Sir Robin
actor? Eric Idle

对执行顺序的保证对赋值表达式来说很有用,因为在键表达式中赋值的变量将可在值表达式中被使用:

>>>
>>> names = ['Martin von Löwis', 'Łukasz Langa', 'Walter Dörwald']
>>> (n := normalize('NFC', name)).casefold() : n for name in names
'martin von löwis': 'Martin von Löwis',
 'łukasz langa': 'Łukasz Langa',
 'walter dörwald': 'Walter Dörwald'

(由 Jörn Heissler 在 bpo-35224 中贡献。)

object.reduce() 方法现在可返回长度为二至六个元素的元组。 之前的上限为五个。 新增的第六个可选元素是签名为 (obj, state) 的可调用对象。 这样就允许直接控制特定对象的状态更新。 如果元素值不为 None,该可调用对象将优先于对象的 setstate() 方法。 (由 Pierre Glaser 和 Olivier Grisel 在 bpo-35900 中贡献。)

python为啥那么火?列举一下你们学python的理由....

Python火的原因在于其优点很多。

优点如下: 

1、面向对象广

从根本上讲,Python 是一种面向对象的语言。它的类模块支持多态、操作符重载和多重继承等高级概念,并且以Python 特有的简洁的语法和类型,OOP 十分易于使用。事实上,即使你不懂这些术语,仍会发现学习Python 比学习其他OOP 语言要容易得多。 


2、免费 

Python 的使用和分发是完全免费的。就像其他的开源软件一样,例如,Tcl 、Perl 、Linux 和Apache 。你可以从Internet 上免费获得Python 系统的源代码。复制Python ,将其嵌入你的系统或者随产品一起发布都没有任何限制。实际上,如果你愿意的话,甚至可以销售它的源代码。

但是"免费"并不代表" 无支持"。恰恰相反,Python 的在线社区对用户需求的响应和商业软件一样快。而且,由于Python 完全开放源代码,提高了开发者的实力,并产生了一个很大的专家团队。尽管学习研究或改变一个程序语言的实现并不是对每一个人来说都那么有趣,但是当你知道还有源代码作为最终的帮助和无尽的文档资源是多么的令人欣慰。你不需要去依赖商业厂商。 


3、可移植 

Python 的标准实现是由可移植的ANSI C 编写的,可以在目前所有的主流平台上编译和运行。例如,如今从PDA 到超级计算机,到处可以见到Python 在运行。Python 可以在下列平台上运行:

Linux 和UNIX 系统

微软Windows 和DOS (所有版本)

Mac OS (包括OS X 和Classic )

BeOS 、OS/2 、VMS 和QNX

实时操作系统,例如,VxWorks 。 Cray 超级计算机和IBM 大型机。 运行Palm OS 、PocketPC 和Linux 的PDA  

运行Windows Mobile 和Symbian OS 的移动电话。


4、功能强大 

从特性的观点来看,Python 是一个混合体。它丰富的工具集使它介于传统的脚本语言(例如,Tcl 、Scheme 和Perl )和系统语言(例如,C、C++ 和Java) 之间。Python 提供了所有脚本语言的简单和易用性,并且具有在编译语言中才能找到的高级软件工程工具。不像其他脚本语言,这种结合使Python 在长期大型的开发项目中十分有用。 


5、可混合 

Python 程序可以以多种方式轻易地与其他语言编写的组件"粘接"在一起。例如,Python 的C语言API 可以帮助Python 程序灵活地调用C程序。这意味着可以根据需要给Python 程序添加功能,或者在其他环境系统中使用Python 。

例如,将Python 与C或者C++ 写成的库文件混合起来,使Python 成为一个前端语言和定制工具。就像之前我们所提到过的那样,这使Python 成为一个很好的快速原型工具;首先出于开发速度的考虑,系统可以先使用Python 实现,之后转移至C,根据不同时期性能的需要逐步实现系统。 

6、使用简单 

运行Python 程序,只需要简单地键入Python 程序并运行就可以了。不需要其他语言(例如,C或C++ )所必须的编译和链接等中间步骤。Python 可立即执行程序,这形成了一种交互式编程体验和不同情况下快速调整的能力,往往在修改代码后能立即看到程序改变后的效果。 

Python 提供了简洁的语法和强大的内置工具。实际上,Python 曾有种说法叫做"可执行的伪代码"。由于它减少了其他工具常见的复杂性,当实现相同的功能时,用Python 程序比采用C、C++ 和Java 编写的程序更为简单、小巧,也更灵活。 


为什么要学Python?

    对于技术人员来说,这算是技术储备,就算现在用不到它,还是要拿来玩一玩,了解它的特性。

    对于一个程序员来说,开拓视野很重要,多尝试几门语言没有任何坏处。学习其他的语言有助于你跳出自己之前的局限来看问题。语言限制了你的表达,也限制了你思考问题的方式。多了解一些不同的编程范式,有助于你加深对编程语言的了解。没有什么坏处。只是蜷缩在自己熟悉的东西里永远无法提高。

    当然对于大部分人来说,比如大学生在学校里学都是为了过这门课,或者跟风赶时髦。我觉得真正感兴趣的人是少数吧。

参考技术A

python功能强大,实用性强,受到各大公司欢迎,具体理由运用如下:

    个人开发:

    1.Python有非常完善的基础代码库(标准库,开源库,自定义模块)

    比如说:你要开发一个网络爬虫,你可能只需要使用几个代码库就行了,re,requests,selenium,beautifulsoup

    2.很多人用django来开发自己个人博客,Django是一个开放源代码的Web应用框架,由Python写成。

    3.也有人使用Twisted来开发网络服务程序,Twisted是用Python实现的基于事件驱动的网络引擎框架,Twisted支持许多常见的传输及应用层协议,包括TCP、UDP、SSL/TLS、HTTP、IMAP、SSH、IRC以及FTP。

    4.有人用python来开发游戏。Σ( ° △ °|||)︴飞机大战?2048?

    6.最近的答题游戏的答题作弊器很多都是用python开发的。

    7.总而言之,对于个人开发来说,python可以节省你的时间和简化你的代码量。

      企业开发:

      1.搭建网站:Django、Tornado......

      使用python搭建网站, 网站可以快速搭建,后台服务会便于维护

      使用python开发的网站:Youtube, Dropbox, 豆瓣.....

      2.GUI图形开发:wxPython、PyQT......

      3.网络编程:Twisted、Request、Scrapy......

      4.自动化运维、云计算:OpenStack、腾讯蓝鲸.......

      5.科学运算、人工智能:NumPy, SciPy, Matplotlib, Enthought librarys,pandas......

      再看看现在的python招聘,参考自智联招聘的数据:

        1.招你去研究人工智能:

      2.招你去开发爬虫或者反爬虫:

参考技术B 1.Python 易于学习
相较于其它许多你可以拿来用的编程语言而言,它“更容易一些”。Python 的语言没有多少仪式化的东西,所以就算不是一个 Python 专家,你也能读懂它的代码。我的经验是,通过实例来学习和教授 Python 要比采取同样的方式去接触比方说 Ruby 或者 Perl 更加容易,因为 Python 的语法里面条条框框以及特殊的处理场景要少得多。 它所专注的并非语言表现的丰富程度,而是你想要用你的代码完成什么。
2.它能用少量的代码构建出很多功能
Python 能带给所有开发者一种快速的学习体验。通过实践,你可以在最多两天之内轻松实现一个具备基础功能的游戏 (而这还是在对编程完全不了解的情况下)。
另外一些让 Python 成为一门引人注目的编程语言的因素就是它的可读性和高效性。
3.Python 多才多艺
Python 今年 28 岁了。尽管它比我的许多读者年纪还要大,但是仍然受到高度的关注,因为它可以被应用于如今你所能想得到的相当多的软件开发和操作场景。要管理本地或者云基础设施吗?Python可以。开发网站?OK,它也能行的。需要处理一个 SQL 数据库?可以。需要为 Hive 或者 Pig 定制一个功能?能做到。只是想为自己构建一个小工具?Python 就是最好的选择。需要一门支持面向对象设计的语言?Python 的特性就能满足啦。简而言之,将 Python 了解得更加深入一点点,就能让你具备可以适应范围更宽泛的工作角色的技能。
4.Python 拥有最成熟的程序包资源库之一
一旦你了解了该语言,就可以利用上这个平台。Python 以 PyPI (读作 Pie-Pie,可以从这里在线进行了解)为其后盾, 这是一个拥有超过 85,000 个 Python 模块和脚本的资源库,你拿过来就立马可以使用。这些模块向你的本地 Python 环境分发已经预先打包好的功能,可以用来解决各种诸如数据库处理,计算机视觉实现,像维度分析这样的高级数据分析的执行,或者是构建 REST 风格的 web 服务这些问题。
5.Python 广泛用于数据科学领域
不管你从事的是什么工作,数据都会是其中的一部分。IT,软件开发,市场等等 —— 它们都深度地关乎数据且对于智慧求之若渴。很快数据分析技能就会像编码技能一样的重要,而 Python 在两个领域都占有重要的地位。Python 紧挨着 R 语言,都是现代数据科学中最常被使用的语言。事实上,在数据科学领域,Python 的职位职位需求超过了 R 语言。你在学习 Python 时发展出来的技能将会直接转换并被用来构建起自己的这些分析技能。
6.Python 是跨平台且开源的
Python 可以跨平台运行,并且已经开放源代码超过20年的时间了,如果你需要代码能同时在Linux,Windows 以及 macOS 上跑起来,Python 就能满足要求。此外,有数十年的修修补补以及不断完善做后盾,可以确保你能够随心所欲地运行自己的代码。
7.Python 很灵活
有一些Python同其它编程语言集成在一起的稳定实现。
CPython, 同 C 集成的版本。
Jython, 同 Java 集成的Python版本。
IronPython, 被设计用来兼容 .Net 和 C#。
PyObjc, ObjectiveC 工具下的 Python 写法。
RubyPython, 同 Ruby 集成的 Python 版本。
参考技术C Python是目前公认的全球5大流行语言之一,从云计算、大数据到人工智能,Python无处不在,百度、阿里巴巴、腾讯等一系列大公司都在使用Python完成各种任务,Python发展如此迅猛,究竟有什么优势呢?
1. 简单
Python采用极简主义设计思想,语法简单优雅,不需要很复杂的代码和逻辑,即可实现强大的功能,很适合初学者学习!
2. 易学
Python学习简单、上手快,不需要面对复杂的语法环境,即可实现所需功能,学习曲线很低,可以通过命令行交互环境学习Python编程。
3. 开源免费
Python所有内容都是开源免费的,可以直接下载安装使用,还可以对其源码进行修改,十分便捷!
4. 自由内存管理
Python内存管理是自动完成的,Python开发人员仅需专注程序本身,无需关注内存管理。
5. 跨平台、可移植性
Python具有良好的跨平台和可移植性能,可以被移植到大多数平台下面,如Windows、MacOS、Linux、Andorid和IOS等。
6. 解释性
Python解释器可以把源代码转换成字节码的中间形式,然后再把它翻译成计算机使用的机器语言并运行,无需编译环节,可以减少编译过程的时耗,提高Python运行速度。
7. 面向对象
Python既支持面向过程,又支持面向对象,这样编程更加灵活。
8. 可扩展性
Python除了使用Python语言本身编写外,还可以混合使用C语言、Java语言编写。
9. 丰富的第三方库
Python本身具有丰富强大的库,可以实现很多强大的功能。
参考技术D 刚刚自学找到工作,理由是最开始跑业务天天大半时间在路上,觉得很浪费时间。某天刷知乎看到数据分析行业,觉得高大上,然后就学了python。

以上是关于Python 3.8 有什么新变化 - 其他语言特性修改的主要内容,如果未能解决你的问题,请参考以下文章

Python 3.8 新特性全面解读

Windows 系统安装 Python 3.8 详解

学C++真的很无聊吗?

Python 学习之路1 了解Python的编译原理,运行速度

如何在Ubuntu 18.04上安装Python 3.8

电脑上新下载了python3.8,如何将jupyter的内核切换为这个新安装的3.8版本?