Python 3.9가 출시되었습니다!
지난해 전 세계 개발자들이 Python 3.8 개선 작업을 진행해 왔습니다. Python 3.9 베타 버전은 한동안 사용되어 왔으며 첫 번째 공식 버전은 2020년 10월 5일에 출시되었습니다.
모든 Python 버전에는 새로 개발되고 향상된 기능이 포함되어 있으며 Python 3.9도 예외는 아닙니다.
【파이썬 학습 교류회】
다음은 Python 3.9의 몇 가지 주요 새로운 기능을 소개합니다.
사전은 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'}复制代码
在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
可能更精准一些。
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复制代码
在类型提示中,现在可以将内置集合类型(例如list和dict)用作泛型类型,而不必从typing
中导入相应的大写类型(例如List或Dict)。
def greet_all(names: list[str]) -> None:for name in names:print("Hello", name)复制代码
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']复制代码
>>> import math>>> math.gcd(49, 14)7复制代码
|
) 및 업데이트(|=
)라는 두 가지 새로운 사전 연산자가 도입되었습니다. |
를 사용하여 두 개의 사전을 병합할 수 있으며 |=
는 사전을 업데이트하는 데 사용됩니다:
>>> 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
Python 3.9에서는 .removeprefix
및 .removesuffix
를 사용하여 각각 문자열의 시작이나 끝을 제거할 수 있습니다.
Someone I🎜유형 힌트에서 다음을 수행할 수 있습니다. 이제 내장 컬렉션 사용 유형(예: list 및 dict)은.strip
방법도 가능하다고 말할 것입니다. 하지만 이 방법을 사용하면 실수로 삭제될 수 있습니다.rrreee 분명히 마지막에 python이라는 단어를 삭제하고 싶지만 그 일부가 삭제되는 것을 볼 수 있습니다. -Th도 삭제되었습니다. 그래서
rrreee.removeprefix
및.removesuffix
가 더 정확할 수 있습니다.3. zoneinfo 시간대 모듈
zoneinfo는 python3.9에 새로 도입된 모듈입니다. Zoneinfo는 IANA(Internet Assigned Numbers Authority) 시간대 데이터베이스에 액세스할 수 있습니다. IANA는 데이터베이스를 1년에 여러 번 업데이트하며 시간대 정보에 대한 가장 권위 있는 소스입니다. zoneinfo를 사용하면 데이터베이스의 모든 시간대를 설명하는 개체를 얻을 수 있습니다.4. 유형 힌트에 대한 내장 컬렉션 유형
입력
에서 해당 대문자 유형(예: List 또는 Dict)을 가져올 필요 없이 일반 유형으로 사용됩니다. 🎜rrreeegraphlib.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 중국어 웹사이트의 기타 관련 기사를 참조하세요!