Pythonは更新を続けています。
2020 2009年8月19日、Pythonはbate 3.9.0rc1の最新バージョンをリリースしました。これは、リリースの準備ができている新しいバージョンです。事前に見てみましょう〜
再びエレガント。バージョン3.8より前は、辞書のマージには zip()
または他のメソッドを使用する必要がありましたが、今では |
を使用するだけで、期待をすばやく完了できます。2つの辞書が同じキーを持っている場合、対応するの値は最後の割り当てです。
>>> d ={'spam':1,'eggs':2,'cheese':3}>>> e ={'cheese':'cheddar','aardvark':'Ethel'}>>> d | e
{' spam':1,'eggs':2,'cheese':'cheddar','aardvark':'Ethel'}>>> e | d
{' aardvark':'Ethel','spam':1,'eggs':2,'cheese':3}
辞書を直接更新するには、 | =
を使用します
>>> d |= e
>>> d
{' spam':1,'eggs':2,'cheese':'cheddar','aardvark':'Ethel'}
ロジックには[ポイントは前号と同様](https://mp.weixin.qq.com/s?__biz=MzUzMTEwODk0Ng==&mid=2247492090&idx=1&sn=939f298867f0843f5fb12891aaeda1c2&chksm=fa4524c7cd32add1ec53409f6f94e47dcf95a8b7dd694ac915137d25e0e60291550020ba52ca&token=1997452966&lang=zh_CN&scene=21#wechat_redirect)マジックメソッド + =
で言ったこと、つまり a + = b
は a = a + b
と同等です。
removeprefix()
およびremovesuffix():
更新は大規模ですが、これの利点は次のとおりです。
len
およびstr.replace()
関数を呼び出す必要はありませんいくつかの事例を引用するには:
# Current
if funcname.startswith("context."):
self.funcname = funcname.replace("context.","")
self.contextfunc = True
else:
self.funcname = funcname
self.contextfunc = False
# Improved
if funcname.startswith("context."):
self.funcname = funcname.removeprefix("context.")
self.contextfunc = True
else:
self.funcname = funcname
self.contextfunc = False
もう一つの例:
# Current
if name.endswith(('Mixin','Tests')):return name[:-5]
elif name.endswith('Test'):return name[:-4]else:return name
# Improved
return(name.removesuffix('Mixin').removesuffix('Tests').removesuffix('Test'))
上記は、正と逆の文字列配置では、文字列スライスを使用せずに既知の文字列コンテンツの一部が削除されるため、直接理解できます。
現在、3.5に基づいて、pythonエディターは指定にすばやく応答し、私たちの意図を理解することができます。
上の図では、 sum_dict
関数のパラメーターを辞書タイプとして定義し、戻り値を int
タイプとして定義しています。タイプは、テストの定義でも指定されます。
zoneinfo
モジュールは、タイムゾーンオブジェクトの入力を最適化するために使用される IANA
タイムゾーンデータベースから対応する情報を取得するのに役立ちます。これは単に次のように使用されます。
>>> print(datetime(2020,2,22,12,0).astimezone())2020-02-2212:00:00-05:00>>>print(datetime(2020,2,22,12,0).astimezone()....strftime("%Y-%m-%d %H:%M:%S %Z"))2020-02-2212:00:00 EST
>>> print(datetime(2020,2,22,12,0).astimezone(timezone.utc))2020-02-2217:00:00+00:00
Pythonは現在、主にLL(1)に基づく文法を使用しており、この文法はLL(1)パーサーで解析できます。パーサーはコードを上から下、左から右に、字句からのみ解析します。トークンをアナライザーから取り出して、正しく解析することができます。
これが最大の変更点になるはずですが、最下層の動作原理がわからないので、ここに公式概要を掲載します。詳細は原文をご確認ください。
This PEP proposes replacing the current LL(1)-based parser of CPython with a new PEG-based parser. This new parser would allow the elimination of multiple "hacks" that exist in the current grammar to circumvent the LL(1)-limitation. It would substantially reduce the maintenance costs in some areas related to the compiling pipeline such as the grammar, the parser and the AST generation. The new PEG parser will also lift the LL(1) restriction on the current Python grammar.
更新ログには、いくつかの言語機能の変更、モジュールの削除、非推奨、およびAPIの変更も記載されています。興味のある方は、公式の更新ログで次のことを確認できます。
https://docs.python.org/3.9/whatsnew/changelog.html#changelog
Python3.9バージョンが近づいています。Python3アルバムをクリックすると、詳細が表示されます。次の号でお会いしましょう。
参照
Python 3.9 beta2バージョンがリリースされました。これらの7つの新しいPEPは何ですか?
Python 3.9の公式バージョンが近づいていますが、私はまだ3.6に向かっています!
What’s New In Python 3.9
https://docs.python.org/3.9/whatsnew/3.9.html#what-s-new-in-python-3-9
Recommended Posts