ついにPython 3.9が登場

coldplay.xixi
coldplay.xixi転載
2020-11-19 17:21:138688ブラウズ

TodayPython チュートリアル コラムでは Python 3.9 を紹介します。

ついにPython 3.9が登場

#Python 3.9 が登場しました!

過去 1 年間、世界中の開発者が Python 3.8 の改良に取り組んできました。 Python 3.9 ベータ版はしばらく前から存在しており、最初の正式バージョンは 2020 年 10 月 5 日にリリースされました。

Python のすべてのバージョンには、新しく開発および改良された機能が含まれており、Python 3.9 も例外ではありません。

Python 3.9,来了

[Python 学習交流グループ]

以下では、Python 3.9 のいくつかの主要な新機能を紹介します。

1. Dictionary (Merge & Update) Operator

Dictionary は Python の最も基本的なデータ構造の 1 つであり、Python のバージョンを繰り返すことでパフォーマンスが継続的に最適化されます。

Python3.9 では、マージ (

|) および更新 (|=) 演算子が 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 では、merge(

|) と update( |=#) という 2 つの新しい辞書演算子が導入されました。 ##)。 | を使用して 2 つの辞書を結合できますが、|= は辞書の更新に使用されます: <pre class="brush:php;toolbar:false">&gt;&gt;&gt; pycon = {2016: &quot;Portland&quot;, 2018: &quot;Cleveland&quot;}&gt;&gt;&gt; europython = {2017: &quot;Rimini&quot;, 2018: &quot;Edinburgh&quot;, 2019: &quot;Basel&quot;}&gt;&gt;&gt; pycon | europython # 合并{2016: 'Portland', 2018: 'Edinburgh', 2017: 'Rimini', 2019: 'Basel'}&gt;&gt;&gt; pycon |= europython # 更新&gt;&gt;&gt; pycon{2016: 'Portland', 2018: 'Edinburgh', 2017: 'Rimini', 2019: 'Basel'}复制代码</pre>

d1|d2

および { ** d1, ** d2} には同様の機能があります。どちらも辞書のマージと共用体の取得に使用されます。同じキーに遭遇すると、後者が前者を上書きします。

|

を使用する利点の 1 つは、辞書のような型で動作し、マージ後に元の型が維持されることです。 <pre class="brush:php;toolbar:false">&gt;&gt;&gt; from collections import defaultdict&gt;&gt;&gt; europe = defaultdict(lambda: &quot;&quot;, {&quot;Norway&quot;: &quot;Oslo&quot;, &quot;Spain&quot;: &quot;Madrid&quot;})&gt;&gt;&gt; africa = defaultdict(lambda: &quot;&quot;, {&quot;Egypt&quot;: &quot;Cairo&quot;, &quot;Zimbabwe&quot;: &quot;Harare&quot;})&gt;&gt;&gt; europe | africadefaultdict(&lt;function &lt;lambda&gt; at 0x7f0cb42a6700&gt;,{'Norway': 'Oslo', 'Spain': 'Madrid', 'Egypt': 'Cairo', 'Zimbabwe': 'Harare'})&gt;&gt;&gt; {**europe, **africa}{'Norway': 'Oslo', 'Spain': 'Madrid', 'Egypt': 'Cairo', 'Zimbabwe': 'Harare'}复制代码</pre>

|=

関数は、.update と同様に辞書を更新することです: <pre class="brush:php;toolbar:false">&gt;&gt;&gt; libraries = {... &quot;collections&quot;: &quot;Container datatypes&quot;,... &quot;math&quot;: &quot;Mathematical functions&quot;,... }&gt;&gt;&gt; libraries |= {&quot;zoneinfo&quot;: &quot;IANA time zone support&quot;}&gt;&gt;&gt; libraries{'collections': 'Container datatypes', 'math': 'Mathematical functions','zoneinfo': 'IANA time zone support'}复制代码</pre>

|=

更新には辞書のようなデータ構造を使用することもできます: <pre class="brush:php;toolbar:false">&gt;&gt;&gt; libraries |= [(&quot;graphlib&quot;, &quot;Functionality for graph-like structures&quot;)]&gt;&gt;&gt; libraries{'collections': 'Container datatypes', 'math': 'Mathematical functions','zoneinfo': 'IANA time zone support','graphlib': 'Functionality for graph-like structures'}复制代码</pre>2. 文字列のプレフィックスとサフィックスを削除する

Python 3.9 では、

.removeprefix

.removesuffix を使用して文字列の先頭または末尾を削除できます。 <pre class="brush:php;toolbar:false">&gt;&gt;&gt; &quot;three cool features in Python&quot;.removesuffix(&quot; Python&quot;)'three cool features in'&gt;&gt;&gt; &quot;three cool features in Python&quot;.removeprefix(&quot;three &quot;)'cool features in Python'&gt;&gt;&gt; &quot;three cool features in Python&quot;.removeprefix(&quot;Something else&quot;)'three cool features in Python'复制代码</pre>

.strip

メソッドも可能だと言う人もいますが、このメソッドは誤って削除してしまいます: <pre class="brush:php;toolbar:false">&gt;&gt;&gt; &quot;three cool features in Python&quot;.strip(&quot; Python&quot;)'ree cool features i'复制代码</pre>ご覧のとおり、明らかに最後の単語 python を削除したいのですが、先頭の の一部も削除されています - Th.

したがって、

.removeprefix

.removesuffix の方が正確である可能性があります。 3.zoneinfo タイム ゾーン モジュール

zoneinfo は python3.9 で新しく導入されたモジュールで、Internet Assigned Numbers Authority (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 など) は、対応する大文字の型 (List や Dict など) を

typing

からインポートすることなく、ジェネリック型として使用できるようになりました。 <pre class="brush:php;toolbar:false">def greet_all(names: list[str]) -&gt; None:for name in names:print(&quot;Hello&quot;, name)复制代码</pre>5. トポロジカル ソート

Python 3.9 では、トポロジカル ソートを実行する機能を提供する

graphlib.TopologicalSorter

クラスを含む新しいモジュール chartlib が追加されています。 <pre class="brush:php;toolbar:false">&gt;&gt;&gt; dependencies = {... &quot;realpython-reader&quot;: {&quot;feedparser&quot;, &quot;html2text&quot;},... &quot;feedparser&quot;: {&quot;sgmllib3k&quot;},... }...&gt;&gt;&gt; from graphlib import TopologicalSorter&gt;&gt;&gt; ts = TopologicalSorter(dependencies)&gt;&gt;&gt; list(ts.static_order)['html2text', 'sgmllib3k', 'feedparser', 'realpython-reader']复制代码</pre>6. 最小公倍数 (LCM)

Python には、2 つの数値の最大公約数 (GCD) を計算する関数が昔からありました:

>>> import math>>> math.gcd(49, 14)7复制代码

最小公倍数(LCM) は最大公約数 (GCD) に関連しています。LCM は GCD に従って定義できます:

>>> def lcm(num1, num2):... if num1 == num2 == 0:... return 0... return num1 * num2 // math.gcd(num1, num2)...>>> lcm(49, 14)98复制代码

Python 3.9 では、独自の LCM 関数を定義する必要はなくなりました。計算する関数が追加されました。最小公倍数:

>>> import math>>> math.lcm(49, 14)98复制代码

7. より強力な Python パーサー

Python 3.9 の最も優れた機能の 1 つは、日常のプログラミングでは気づかない機能です。パーサーのアップデート。パーサーは、Python インタープリターの基本コンポーネントです。最新バージョンでは、パーサーが再構築されました。

Python は以前、LL(1) パーサーを使用してソース コードを解析ツリーに解析していました。 LL(1) パーサーは、一度に 1 文字を読み取り、バックトラックせずにソース コードを解釈するパーサーと考えることができます。

新しいインタープリタは、LL(1) ではなく、PEG (解析式文法) に基づいて実装されています。新しいパーサーのパフォーマンスは古いパーサーと同等であり、新しい言語機能を設計する場合、PEG は LL(1) よりも柔軟です。

標準ライブラリ全体の中で、PEG パーサーはわずかに高速ですが、より多くのメモリを使用します。実際、新しいパーサーを使用した場合のパフォーマンスがどの程度良いか悪いかを判断するのは困難です。

関連する無料学習の推奨事項:

Python チュートリアル(ビデオ)

以上がついにPython 3.9が登場の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はjuejin.imで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。