Python 3.8 の概要 (その7) - ちょっと便利そうな機能追加
math.prod()
リストなどのイテレータの要素の積を計算する math.prod() が追加されました。 sum() の掛け算版ですね。
>>> import math >>> math.prod([1,2,3,4]) 24
正規表現が \N{名前}
記法をサポート
reモジュールで、正規表現に文字の名前を指定する \N{名前}
を使えるようになりました。
>>> re.match(r'\N{LATIN SMALL LETTER A}', 'a') <re.Match object; span=(0, 1), match='a'> >>> re.match(r'\N{GRINNING FACE WITH SMILING EYES}', '😁') <re.Match object; span=(0, 1), match='😁'>
文字の名前は、unicodedata.name() で調べられます。
>>> import unicodedata >>> unicodedata.name('a') 'LATIN SMALL LETTER A' >>> unicodedata.name('😁') 'GRINNING FACE WITH SMILING EYES'
importlib.metadataモジュール
importlib.metadata モジュールが追加され、pip
でインストールされたパッケージの情報を取得できるようになりました。
>>> from importlib.metadata import * >>> for dist in distributions(): ... print(f"{dist.metadata['Name']}: {dist.version=}") ... chardet: dist.version='3.0.4' pip: dist.version='19.2.3' certifi: dist.version='2019.6.16' idna: dist.version='2.8' urllib3: dist.version='1.25.3' requests: dist.version='2.22.0' setuptools: dist.version='41.2.0'
コンテキストマネージャでProfile
cProfile.Profile() を、コンテキストマネージャとして使えるようになりました。
>>> import cProfile, pstats >>> import urllib.request >>> with cProfile.Profile() as pr: ... with urllib.request.urlopen('http://www.python.org') as f: ... print(len(f.read())) ... 48914 >>> pr.print_stats(pstats.SortKey.CUMULATIVE) 4433 function calls (4380 primitive calls) in 0.183 seconds Ordered by: cumulative time ncalls tottime percall cumtime percall filename:lineno(function) 1 0.000 0.000 0.149 0.149 request.py:139(urlopen) 2/1 0.000 0.000 0.136 0.136 request.py:506(open) 5/3 0.000 0.000 0.134 0.045 request.py:495(_call_chain) 2 0.000 0.000 0.134 0.067 request.py:535(_open) 2 0.000 0.000 0.133 0.067 request.py:1275(do_open) 2 0.000 0.000 0.088 0.044 client.py:1218(request) 2 0.000 0.000 0.088 0.044 client.py:1223(_send_request) 2 0.000 0.000 0.087 0.044 client.py:1205(endheaders) 2 0.000 0.000 0.087 0.044 client.py:995(_send_output) 2 0.000 0.000 0.087 0.044 client.py:936(send)
コンテキストマネージャとしているのは、cProfile.Profile()
のみで、profile.Profile()
は使えません。気が付かないうちに、cProfileとprofileの差が大きくなっているようです。