ディスカッション (11件)
Python 3.15には、大々的に取り上げられなかったものの、エンジニアにとって実用性の高い改良や機能がいくつか盛り込まれています。本稿では、今後の開発効率を少しだけアップさせてくれるような、影の主役とも言える変更点にフォーカスして解説します。
10年間ずっとPythonにどっぷり浸かっていて、書くのが楽しかった。でも、AIコードボットが当たり前の時代になって、より速い言語へ移行するために、今年だけで10万行以上のコードを削除したよ。最近はGoに移行することがほとんどかな。
この例からすると:
lazy from typing import Iterator
def stream_events(...) -> Iterator[str]:
while True:
yield blocking_get_event(...)
events = stream_events(...)
for event in events:
consume(event)
Pythonについに「遅延インポート」が実装されたの?この変更を見逃していたみたい。これもPython 3.15かそれ以前からの機能?
これはボーナスセクションに残しておいたものだ。Counterで集合演算を使ったことがないし、特にxorのユースケースを思いつくのが非常に難しいからだ。とはいえ、網羅性のために追加してくれた開発者には感謝している。
「対称差(symmetric difference)」をチェックしてみて。
https://en.wikipedia.org/wiki/Symmetric_difference (https://en.wikipedia.org/wiki/Symmetric_difference)
Python 3.15でイテレータ同期プリミティブが追加されたのはいいことだね:https://docs.python.org/3.15/library/threading.html#iterator... (https://docs.python.org/3.15/library/threading.html#iterator-synchronization) 。これは、まさに同じことをスレッド/プロセス+ジェネレータ+キューで行っている私のthreaded-generatorパッケージをうまく補完してくれそうだ:https://pypi.org/project/threaded-generator/ (https://pypi.org/project/threaded-generator/)
Pythonの内部構造や管理、特にフリー・スレッディングに関連する良いインタビューがあるよ:https://alexalejandre.com/programming/interview-with-ngoldba... (https://alexalejandre.com/programming/interview-with-ngoldbaum/)
スレッドセーフなイテレータだって?本当にまだこの話題で盛り上がってるの?
lazy from typing import Iterator
def stream_events(...) -> Iterator[str]:
while True:
yield blocking_get_event(...)
events = stream_events(...)
for event in events:
consume(event)
ああ、愛しのPython、15年近く君を書いたよ。恋しいけれど、もう書くことはない――君のせいじゃない、人生が変わったんだ。
Counterの例の一つが間違っているね。3.13と3.15.0aの両方でテストしてみた。
>>> from collections import Counter
>>> c = Counter(a=3, b=1)
>>> d = Counter(a=1, b=2)
>>> c-d
Counter({'a': 2})
イテレータ、非同期関数、非同期イテレータは、標準的な関数とはセマンティクスが異なるため、ここではうまく機能しない。それらを呼び出すと、直ちにジェネレータオブジェクト、コルーチン関数、非同期ジェネレータオブジェクトがそれぞれ返されてしまう。そのため、デコレータはラップしているもの全体のライフサイクルではなく、即座に完了してしまう。
これは私が何度も遭遇した厄介な問題であり、通常のデコレータでもよくある問題だ。しかし、3.15でこれが変更され、ContextDecoratorがラップする関数の型を確認し、デコレータが全ライフサイクルをカバーするように保証されるようになった。
その変更のアイデアはとてもいいと思う。でも「オプトインの仕組み」なしでこれをやるのは、既存の使用サイトの動作を非常に微妙に変えてしまうので、ちょっと危ない気もする。
これは「キーボードのスペースキーを温める」みたいな状況に似てるかも。古い壊れた方法でデコレータをわざわざ使う人はいないだろうけど、もし誰かが実際にやっていたら、予期せず何かが壊れるかもしれないし。
Wes McKinneyがPythonからの移行について書いたとき、これは本気なんだと確信したよ。
https://wesmckinney.com/blog/agent-ergonomics/ (https://wesmckinney.com/blog/agent-ergonomics/)
今でもこの言語には特別な思い入れがあるし、まだニッチな場所で生き残れると思っている。