>백엔드 개발 >파이썬 튜토리얼 >마침내 Python 3.9를 소개합니다

마침내 Python 3.9를 소개합니다

coldplay.xixi
coldplay.xixi앞으로
2020-11-19 17:21:138656검색

오늘의 python 튜토리얼 칼럼에서는 Python 3.9에 대해 소개합니다.

마침내 Python 3.9를 소개합니다

Python 3.9가 출시되었습니다!

지난해 전 세계 개발자들이 Python 3.8 개선 작업을 진행해 왔습니다. Python 3.9 베타 버전은 한동안 사용되어 왔으며 첫 번째 공식 버전은 2020년 10월 5일에 출시되었습니다.

모든 Python 버전에는 새로 개발되고 향상된 기능이 포함되어 있으며 Python 3.9도 예외는 아닙니다.

Python 3.9,来了

【파이썬 학습 교류회】

다음은 Python 3.9의 몇 가지 주요 새로운 기능을 소개합니다.

1. 사전(병합 및 업데이트) 연산자

사전은 Python의 가장 기본적인 데이터 구조 중 하나이며 Python 버전의 반복을 통해 성능이 지속적으로 최적화됩니다.

Python 3.9에서는 병합(|) 및 업데이트(|=) 연산자가 dict 클래스에 추가되었습니다. 이러한 업데이트는 기존 dict.update{** d1, ** d2} 메서드를 완성합니다. |)和更新(|=)运算符已添加到dict类中。这些更新完善了现有的dict.update{** d1,** d2}方法。

传统合并字典的方法:

>>> pycon = {2016: "Portland", 2018: "Cleveland"} # 字典1>>> europython = {2017: "Rimini", 2018: "Edinburgh", 2019: "Basel"} # 字典2# 方法一>>> {**pycon, **europython}{2016: 'Portland', 2018: 'Edinburgh', 2017: 'Rimini', 2019: 'Basel'}#方法二>>> merged = pycon.copy>>> for key, value in europython.items:... merged[key] = value...>>> merged{2016: 'Portland', 2018: 'Edinburgh', 2017: 'Rimini', 2019: 'Basel'}复制代码

这两种方法都合并了字典而不更改原始数据。请注意,字典1中“Cleveland”已被合并的字典2中“Edinburgh”覆盖。

你也可以更新字典1:

>>> pycon.update(europython)>>> pycon{2016: 'Portland', 2018: 'Edinburgh', 2017: 'Rimini', 2019: 'Basel'}复制代码

新版本的Python引入了两个新的字典运算符:合并(|)和更新(|=)。你可以使用|合并两个字典,而|=用于更新字典:

>>> pycon = {2016: "Portland", 2018: "Cleveland"}>>> europython = {2017: "Rimini", 2018: "Edinburgh", 2019: "Basel"}>>> pycon | europython # 合并{2016: 'Portland', 2018: 'Edinburgh', 2017: 'Rimini', 2019: 'Basel'}>>> pycon |= europython # 更新>>> pycon{2016: 'Portland', 2018: 'Edinburgh', 2017: 'Rimini', 2019: 'Basel'}复制代码

d1|d2{** d1,** d2}的作用类似,都用于合并字典取并集,遇到相同key,后者会将前者覆盖。

使用|的优势之一是它适用于类似字典的类型,并在合并后保持原来的类型:

>>> from collections import defaultdict>>> europe = defaultdict(lambda: "", {"Norway": "Oslo", "Spain": "Madrid"})>>> africa = defaultdict(lambda: "", {"Egypt": "Cairo", "Zimbabwe": "Harare"})>>> europe | africadefaultdict(<function <lambda> at 0x7f0cb42a6700>,{'Norway': 'Oslo', 'Spain': 'Madrid', 'Egypt': 'Cairo', 'Zimbabwe': 'Harare'})>>> {**europe, **africa}{'Norway': 'Oslo', 'Spain': 'Madrid', 'Egypt': 'Cairo', 'Zimbabwe': 'Harare'}复制代码

|=的作用是更新字典,类似于.update

>>> libraries = {... "collections": "Container datatypes",... "math": "Mathematical functions",... }>>> libraries |= {"zoneinfo": "IANA time zone support"}>>> libraries{'collections': 'Container datatypes', 'math': 'Mathematical functions','zoneinfo': 'IANA time zone support'}复制代码

|=还可以将类似字典的数据结构用于更新:

>>> libraries |= [("graphlib", "Functionality for graph-like structures")]>>> libraries{'collections': 'Container datatypes', 'math': 'Mathematical functions','zoneinfo': 'IANA time zone support','graphlib': 'Functionality for graph-like structures'}复制代码

2. 删除字符串前缀和后缀

在Python 3.9中,可以使用.removeprefix.removesuffix分别删除字符串的开头或结尾:

>>> "three cool features in Python".removesuffix(" Python")'three cool features in'>>> "three cool features in Python".removeprefix("three ")'cool features in Python'>>> "three cool features in Python".removeprefix("Something else")'three cool features in Python'复制代码

有人会说.strip方法也可以呀,但是该方法会出现误删操作:

>>> "three cool features in Python".strip(" Python")'ree cool features i'复制代码

可以看到,明明想删掉结尾的单词python,但是开头的there也被删除了一部分-Th。

所以.removeprefix.removesuffix可能更精准一些。

3. zoneinfo时区模块

zoneinfo是python3.9新引入的模块,zoneinfo可以访问Internet号码分配机构(IANA)时区数据库。IANA每年都会多次更新其数据库,这是时区信息的最权威来源。

使用zoneinfo,可以获得数据库中描述任何时区的对象:

>>> from zoneinfo import ZoneInfo>>> ZoneInfo("America/Vancouver")zoneinfo.ZoneInfo(key='America/Vancouver')

>>> from zoneinfo import ZoneInfo>>> from datetime import datetime, timedelta>>> # 夏令时>>> dt = datetime(2020, 10, 31, 12, tzinfo=ZoneInfo("America/Los_Angeles"))>>> print(dt)2020-10-31 12:00:00-07:00>>> dt.tzname'PDT'>>> # 标准时间>>> dt += timedelta(days=7)>>> print(dt)2020-11-07 12:00:00-08:00>>> print(dt.tzname)PST复制代码

4. 内置集合类型用于类型提示

在类型提示中,现在可以将内置集合类型(例如list和dict)用作泛型类型,而不必从typing中导入相应的大写类型(例如List或Dict)。

def greet_all(names: list[str]) -> None:for name in names:print("Hello", name)复制代码

5. 拓扑排序

Python 3.9添加了一个新的模块graphlib,其中包含graphlib.TopologicalSorter

사전 병합의 전통적인 방법:

>>> dependencies = {... "realpython-reader": {"feedparser", "html2text"},... "feedparser": {"sgmllib3k"},... }...>>> from graphlib import TopologicalSorter>>> ts = TopologicalSorter(dependencies)>>> list(ts.static_order)['html2text', 'sgmllib3k', 'feedparser', 'realpython-reader']复制代码

두 가지 방법 모두 원본 데이터를 변경하지 않고 사전을 병합합니다. 사전 1의 "Cleveland"가 병합된 사전 2의 "Edinburgh"로 덮어씌워졌습니다.

사전 1도 업데이트할 수 있습니다.

>>> import math>>> math.gcd(49, 14)7复制代码
Python의 새 버전에는 병합(|) 및 업데이트(|=)라는 두 가지 새로운 사전 연산자가 도입되었습니다. |를 사용하여 두 개의 사전을 병합할 수 있으며 |=는 사전을 업데이트하는 데 사용됩니다:

>>> def lcm(num1, num2):... if num1 == num2 == 0:... return 0... return num1 * num2 // math.gcd(num1, num2)...>>> lcm(49, 14)98复制代码
d1|d2 {* * d1, ** d2}는 비슷한 기능을 가지고 있습니다. 둘 다 사전을 병합하고 공용체를 사용하는 데 사용됩니다. 동일한 키를 만나면 후자가 전자를 덮어씁니다.

| 사용의 장점 중 하나는 사전과 유사한 유형으로 작동하고 병합 후 원래 유형을 유지한다는 것입니다.

>>> import math>>> math.lcm(49, 14)98复制代码
|=는 사전을 업데이트합니다. .update로:

rrreee

|= 업데이트를 위해 사전과 유사한 데이터 구조를 사용할 수도 있습니다:

rrreee

2 . 문자열 접두사 및 접미사 제거

Python 3.9에서는 .removeprefix.removesuffix를 사용하여 각각 문자열의 시작이나 끝을 제거할 수 있습니다.

rrreee
Someone I .strip 방법도 가능하다고 말할 것입니다. 하지만 이 방법을 사용하면 실수로 삭제될 수 있습니다.

rrreee 분명히 마지막에 python이라는 단어를 삭제하고 싶지만 그 일부가 삭제되는 것을 볼 수 있습니다. -Th도 삭제되었습니다. 그래서 .removeprefix.removesuffix가 더 정확할 수 있습니다.

3. zoneinfo 시간대 모듈

zoneinfo는 python3.9에 새로 도입된 모듈입니다. Zoneinfo는 IANA(Internet Assigned Numbers Authority) 시간대 데이터베이스에 액세스할 수 있습니다. IANA는 데이터베이스를 1년에 여러 번 업데이트하며 시간대 정보에 대한 가장 권위 있는 소스입니다. zoneinfo를 사용하면 데이터베이스의 모든 시간대를 설명하는 개체를 얻을 수 있습니다.

rrreee

4. 유형 힌트에 대한 내장 컬렉션 유형

🎜유형 힌트에서 다음을 수행할 수 있습니다. 이제 내장 컬렉션 사용 유형(예: list 및 dict)은 입력에서 해당 대문자 유형(예: List 또는 Dict)을 가져올 필요 없이 일반 유형으로 사용됩니다. 🎜rrreee

5. 위상 정렬 🎜🎜Python 3.9에는 위상 정렬을 수행하는 방법을 제공하는 graphlib.TopologicalSorter 클래스가 포함된 새로운 모듈 graphlib가 추가되었습니다. 기능. 🎜rrreee🎜 6. 최소 공배수(LCM) 🎜🎜Python에는 오랫동안 두 숫자의 최대 공약수(GCD)를 계산하는 기능이 있었습니다. 🎜rrreee🎜최소 공배수(LCM)는 최대 공약수(GCD)와 관련되어 있습니다. ), LCM은 GCD에 따라 정의될 수 있습니다: 🎜rrreee🎜Python 3.9에서는 더 이상 자체 LCM 함수를 정의할 필요가 없으며 최소 공배수 계산 기능이 추가됩니다: 🎜rrreee🎜7 더 강력한 Python 파서. 🎜Python 3.9의 가장 멋진 점 일상 프로그래밍에서 사람들이 눈치채지 못하는 기능 중 하나는 파서 업데이트입니다. 파서는 Python 인터프리터의 기본 구성 요소입니다. 최신 버전에서는 파서가 재구축되었습니다. 🎜🎜Python은 이전에 LL(1) 구문 분석기를 사용하여 소스 코드를 구문 분석 트리로 구문 분석했습니다. LL(1) 파서는 한 번에 한 문자를 읽고 역추적 없이 소스 코드를 해석하는 파서로 생각할 수 있습니다. 🎜🎜새로운 인터프리터는 LL(1)이 아닌 PEG(표현 문법 구문 분석)를 기반으로 구현되었습니다. 새로운 파서의 성능은 기존 파서와 비슷하며, 새로운 언어 기능을 설계할 때 PEG는 LL(1)보다 더 유연합니다. 🎜🎜전체 표준 라이브러리 중에서 PEG 파서가 약간 더 빠르지만 더 많은 메모리를 사용합니다. 실제로 새로운 파서를 사용할 때 성능이 얼마나 좋은지 나쁜지 말하기는 어렵습니다. 🎜🎜🎜🎜관련 무료 학습 권장 사항: 🎜🎜🎜python 튜토리얼🎜🎜🎜(동영상)🎜🎜🎜

위 내용은 마침내 Python 3.9를 소개합니다의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 juejin.im에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제