python.jphttps://www.python.jp/2025-02-12T00:00:00+09:00DjangoCongress JP 2025の発表内容とYouTube Liveでの配信が決定2025-02-12T00:00:00+09:002025-02-12T00:00:00+09:00tag:www.python.jp,2025-02-12 00:00:00.000000:/news/DjangoCongress-JP-2025.html<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt"> </div><div class="inner_cell"> <div class="text_cell_render border-box-sizing rendered_html"> <div style="margin: 1em 0 1em 0; text-align: center;"> <img alt="DjangoCongress JP 2023" class="page_image" src="proxy.php?url=https://www.python.jp/news/DjangoCongress-jp-2025.png" width="100%"/> </div> <h1 class="md_header_block" id="DjangoCongress-JP-2025%E3%81%AE%E7%99%BA%E8%A1%A8%E5%86%85%E5%AE%B9%E3%81%A8YouTube-Live%E3%81%A7%E3%81%AE%E9%85%8D%E4%BF%A1%E3%81%8C%E6%B1%BA%E5%AE%9A">DjangoCongress JP 2025の発表内容とYouTube Liveでの配信が決定<a class="anchor-link" href="proxy.php?url=#DjangoCongress-JP-2025%E3%81%AE%E7%99%BA%E8%A1%A8%E5%86%85%E5%AE%B9%E3%81%A8YouTube-Live%E3%81%A7%E3%81%AE%E9%85%8D%E4%BF%A1%E3%81%8C%E6%B1%BA%E5%AE%9A">¶</a></h1><p>2025年2月22日(土曜日)開催予定の<a href="proxy.php?url=https://djangocongress.jp/">DjangoCongress JP 2025</a>の配信が決定しました。</p> <p>以下のYouTube Liveにて配信されます:</p> <ul> <li>ROOM1:<a href="proxy.php?url=https://youtube.com/live/P2UWAuKHI3Y">https://youtube.com/live/P2UWAuKHI3Y</a></li> <li>ROOM2:<a href="proxy.php?url=https://youtube.com/live/aL4tCmAP7kE">https://youtube.com/live/aL4tCmAP7kE</a></li> </ul> <p>今年はDjangoだけでなくFastAPIなど非同期Webに関するトークも予定されています。またDjang</p></div></div></div>Python 3.13の新機能(その5)PEP 742: TypeIs による型の絞り込み2025-01-31T00:00:00+09:002025-01-31T00:00:00+09:00tag:www.python.jp,2025-01-31 00:00:00.000000:/news/wnpython313/pep742.html<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt"> </div><div class="inner_cell"> <div class="text_cell_render border-box-sizing rendered_html"> <p>Python 3.10では <a href="proxy.php?url=https://peps.python.org/pep-0647/">PEP 647: ユーザ定義の型ガード</a> が導入され、<strong>型ガード</strong> を定義して型推論に利用できるようになりました。</p> <div class="highlight"><pre><span></span><span class="kn">from</span><span class="w"> </span><span class="nn">typing</span><span class="w"> </span><span class="kn">import</span> <span class="n">TypeGuard</span> <span class="k">def</span><span class="w"> </span><span class="nf">is_int</span><span class="p">(</span><span class="n">x</span><span class="p">:</span> <span class="nb">object</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">TypeGuard</span><span class="p">[</span><span class="nb">int</span><span class="p">]:</span> <span class="k">return</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="nb">int</span><span class="p">)</span> <span class="k">def</span><span class="w"> </span><span class="nf">func</span><span class="p">(</span><span class="n">x</span><span class="p">:</span><span class="nb">object</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span> <span class="k">if</span> <span class="n">is_int</span><span class="p">(</span><span class="n">x</span><span class="p">):</span> <span class="n">reveal_type</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="c1"># x は int</span> </pre></div> <p>型ガードについては、<a href="proxy.php?url=https://www.python.jp/news/wnpython310/userdefinedtypegurd.html">Python 3.10の新機能(その7) ユーザ定義型ガード</a> の解説を参照してください。</p> <h3 class="md_header_block" id="%E5%9E%8B%E3%82%AC%E3%83%BC%E3%83%89%E3%81%AE%E5%95%8F%E9%A1%8C%E7%82%B9">型ガー</h3></div></div></div>Python 3.13の新機能(その4)PEP 705: TypeDict: 読み取り専用アイテム2025-01-28T00:00:00+09:002025-01-28T00:00:00+09:00tag:www.python.jp,2025-01-28 00:00:00.000000:/news/wnpython313/pep705.html<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt"> </div><div class="inner_cell"> <div class="text_cell_render border-box-sizing rendered_html"> <p><a href="proxy.php?url=https://peps.python.org/pep-0705/">PEP 705: TypedDict: Read-only items</a> では、<code>TypedDict</code> に読み取り専用の項目を指定できるようになりました。</p> <div class="highlight"><pre><span></span><span class="kn">from</span><span class="w"> </span><span class="nn">typing</span><span class="w"> </span><span class="kn">import</span> <span class="n">TypedDict</span><span class="p">,</span> <span class="n">ReadOnly</span> <span class="k">class</span><span class="w"> </span><span class="nc">FooDict</span><span class="p">(</span><span class="n">TypedDict</span><span class="p">):</span> <span class="n">x</span><span class="p">:</span> <span class="nb">int</span> <span class="n">y</span><span class="p">:</span> <span class="nb">int</span> <span class="n">z</span><span class="p">:</span> <span class="n">ReadOnly</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="c1"># z は読み取り専用</span> <span class="n">foo</span><span class="p">:</span> <span class="n">FooDict</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"x"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> <span class="s2">"y"</span><span class="p">:</span> <span class="mi">2</span><span class="p">,</span> <span class="s2">"z"</span><span class="p">:</span> <span class="mi">3</span><span class="p">}</span> <span class="n">foo</span><span class="p">[</span><span class="s2">"x"</span><span class="p">]</span> <span class="o">=</span> <span class="mi">4</span> <span class="c1"># Ok</span> <span class="n">foo</span><span class="p">[</span><span class="s2">"z"</span><span class="p">]</span> <span class="o">=</span> <span class="mi">5</span> <span class="c1"># エラー: "z" is a read-only key in "FooDict"</span> </pre></div> <p>ただし、リストな</p></div></div></div>Python 3.13の新機能(その3)PEP 702: 型システムを利用したDeprecate(廃止予定)の指定2025-01-28T00:00:00+09:002025-01-28T00:00:00+09:00tag:www.python.jp,2025-01-28 00:00:00.000000:/news/wnpython313/pep702.html<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt"> </div><div class="inner_cell"> <div class="text_cell_render border-box-sizing rendered_html"> <h2 class="md_header_block" id="PEP-702:-%E5%9E%8B%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%82%92%E5%88%A9%E7%94%A8%E3%81%97%E3%81%9F%E9%9D%9E%E6%8E%A8%E5%A5%A8%E3%81%AE%E6%8C%87%E5%AE%9A">PEP 702: 型システムを利用した非推奨の指定<a class="anchor-link" href="proxy.php?url=#PEP-702:-%E5%9E%8B%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%82%92%E5%88%A9%E7%94%A8%E3%81%97%E3%81%9F%E9%9D%9E%E6%8E%A8%E5%A5%A8%E3%81%AE%E6%8C%87%E5%AE%9A">¶</a></h2><p>従来のPythonでは、Deprecate(廃止予定)のAPIを警告するために、次のように <code>DeprecationWarning</code> を使っていました。</p> <div class="highlight"><pre><span></span><span class="kn">import</span><span class="w"> </span><span class="nn">warnings</span> <span class="k">def</span><span class="w"> </span><span class="nf">func</span><span class="p">():</span> <span class="n">warnings</span><span class="o">.</span><span class="n">warn</span><span class="p">(</span><span class="s2">"deprecated"</span><span class="p">,</span> <span class="ne">DeprecationWarning</span><span class="p">)</span> <span class="k">return</span> <span class="mi">0</span> </pre></div> <p>しかし、この方法では実行するまで警告が表示されないため、警告を見逃されることがありました。</p> <p>そこで、<a href="proxy.php?url=https://peps.python.org/pep-0702/">PEP 702</a>では、<a href="proxy.php?url=https://docs.python.org/3/library/warnings.html#warnings.deprecated">@warnings.deprecated</a> デコレータ</p></div></div></div>Python 3.13の新機能(その2)PEP 696: 型パラメータのデフォルト型2025-01-27T00:00:00+09:002025-01-27T00:00:00+09:00tag:www.python.jp,2025-01-27 00:00:00.000000:/news/wnpython313/pep696.html<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt"> </div><div class="inner_cell"> <div class="text_cell_render border-box-sizing rendered_html"> <p>従来のジェネリック型では、型を決定できない型パラメータは <code>Any</code> などにされていました。</p> <div class="highlight"><pre><span></span><span class="k">class</span><span class="w"> </span><span class="nc">A</span><span class="p">[</span><span class="n">T</span><span class="p">]:</span> <span class="n">foo</span><span class="p">:</span> <span class="n">T</span> <span class="o">|</span> <span class="kc">None</span> <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">foo</span><span class="p">:</span> <span class="n">T</span> <span class="o">|</span> <span class="kc">None</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">foo</span> <span class="o">=</span> <span class="n">foo</span> <span class="n">a</span> <span class="o">=</span> <span class="n">A</span><span class="p">()</span> <span class="n">reveal_type</span><span class="p">(</span><span class="n">a</span><span class="p">)</span> <span class="c1"># Mypyでは a は A[Any] となる</span> </pre></div> <p><a href="proxy.php?url=https://peps.python.org/pep-0696/">PEP 696: Type Defaults for Type Parameters</a> では、指定されていない型パラメータにデフォルトの型を指定できるようになりました。</p> <div class="highlight"><pre><span></span><span class="k">class</span><span class="w"> </span><span class="nc">A</span><span class="p">[</span><span class="n">T</span><span class="o">=</span><span class="nb">int</span><span class="p">]:</span> <span class="c1"># T のデフォルトを int に指定</span> <span class="n">foo</span><span class="p">:</span> <span class="n">T</span> <span class="o">|</span></pre></div></div></div></div>Python 3.13の新機能(その1) PEP 703: フリースレッドモード2025-01-23T00:00:00+09:002025-01-23T00:00:00+09:00tag:www.python.jp,2025-01-23 00:00:00.000000:/news/wnpython313/index.html<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt"> </div><div class="inner_cell"> <div class="text_cell_render border-box-sizing rendered_html"> <p>2024年10月7日にリリースされたPython 3.13の概要を紹介します。</p> <p>Python 3.13ではPythonのプログラミング言語としての仕様に大きな変更はありませんでしたが、将来のPythonの実行環境に大きな影響を与える、大きな変更が導入されました。</p> <h2 class="md_header_block" id="PEP-703:-%E3%83%95%E3%83%AA%E3%83%BC%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89%E3%83%A2%E3%83%BC%E3%83%89">PEP 703: フリースレッドモード<a class="anchor-link" href="proxy.php?url=#PEP-703:-%E3%83%95%E3%83%AA%E3%83%BC%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89%E3%83%A2%E3%83%BC%E3%83%89">¶</a></h2><p>Python 3.13では、実験的な機能として、フリースレッドモードが導入されました。従来のPythonには、グローバルインタプリタロック(GIL)があり、マルチスレッドでのパフォーマンスが向上しないという問題がありました</p></div></div></div>Python 3.12の新機能(その7) PEP 709: 内包式のインライン化2024-04-12T00:00:00+09:002024-04-12T00:00:00+09:00tag:www.python.jp,2024-04-12 00:00:00.000000:/news/wndpython312/pep709-comprehension-inlining.html<div class="cell border-box-sizing text_cell rendered" id="cell-id=78214050-aad3-4a8d-b207-3dedfed9e94d"><div class="prompt input_prompt"> </div><div class="inner_cell"> <div class="text_cell_render border-box-sizing rendered_html"> <p>Python3.0以降では、リスト内包でエラーが発生すると、トレースバックに <code>&lt;listcomp&gt;</code> という不思議な関数名が表示されることがありました。</p> <div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="k">def</span><span class="w"> </span><span class="nf">func</span><span class="p">():</span> <span class="gp">... </span> <span class="p">[</span><span class="mi">1</span><span class="o">/</span><span class="mi">0</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">10</span><span class="p">)]</span> <span class="gp">...</span> <span class="gp">&gt;&gt;&gt; </span><span class="n">f</span><span class="p">()</span> <span class="gt">Traceback (most recent call last):</span> File <span class="nb">"&lt;stdin&gt;"</span>, line <span class="m">1</span>, in <span class="n">&lt;module&gt;</span> File <span class="nb">"&lt;stdin&gt;"</span>, line <span class="m">2</span>, in <span class="n">func</span> File <span class="nb">"&lt;stdin&gt;"</span>, line <span class="m">2</span>, in <span class="n">&lt;listcomp&gt;</span> <span class="gr">ZeroDivisionError</span>: <span class="n">di</span></pre></div></div></div></div>Python 3.12の新機能(その6) PEP 683: 固定参照カウントによる永続オブジェクト2024-04-10T00:00:00+09:002024-04-10T00:00:00+09:00tag:www.python.jp,2024-04-10 00:00:00.000000:/news/wndpython312/pep683-immortal_objects.html<div class="cell border-box-sizing text_cell rendered" id="cell-id=78214050-aad3-4a8d-b207-3dedfed9e94d"><div class="prompt input_prompt"> </div><div class="inner_cell"> <div class="text_cell_render border-box-sizing rendered_html"> <p>Pythonは、すべての変数などが参照しているオブジェクトを正確に把握し、それぞれのオブジェクトが参照されている数を厳密に記録しています。この、記録されている参照の数を、<a href="proxy.php?url=https://devguide.python.org/internals/garbage-collector/">参照カウント</a> と言います。参照カウントが 0 になると、そのオブジェクトはすでに利用されていないことが明らかなので、Pythonはそのオブジェクトを開放します。</p> <p>オブジェクトの参照カウントは、<a href="proxy.php?url=https://docs.python.org/3/library/sys.html#sys.getrefcount">sys.getrefcount()</a> で調べられます。</p> <p>次の例では、<code>sys.getrefcount()</code> を使って、<code>True</code> オブジェクトが参照されている数を調べています</p></div></div></div>Python 3.12の新機能(その5) PEP 684: インタープリター別GIL2024-04-10T00:00:00+09:002024-04-10T00:00:00+09:00tag:www.python.jp,2024-04-10 00:00:00.000000:/news/wndpython312/pep684-per-interpreter-gil.html<div class="cell border-box-sizing text_cell rendered" id="cell-id=a5a4ec7f-5c25-4ca0-9976-34c079b79448"><div class="prompt input_prompt"> </div><div class="inner_cell"> <div class="text_cell_render border-box-sizing rendered_html"> <p>Python3.11で開始された <a href="proxy.php?url=https://github.com/faster-cpython/ideas/blob/main/FasterCPythonDark.pdf">Faster CPython: CPython 高速化計画</a>ですが、予定されていた <a href="proxy.php?url=https://github.com/faster-cpython/ideas/wiki/Python-3.12-Goals#reduced-memory-management-overhead">Tracing optimizer</a>が追加されなかったこともあり、残念ながらPython3.12では大きなパフォーマンスの改善は見られませんでした。</p> <p>しかし、将来の高速化に向けて、大きな機能追加がありました。</p> <h2 class="md_header_block" id="%E3%82%B5%E3%83%96%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%97%E3%83%AA%E3%82%BF%E3%83%BC">サブインタープリター<a class="anchor-link" href="proxy.php?url=#%E3%82%B5%E3%83%96%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%97%E3%83%AA%E3%82%BF%E3%83%BC">¶</a></h2><p>Pythonのあまり知られていない機能に、<a href="proxy.php?url=https://docs.python.org/ja/3/c-api/init.html#c.Py_NewInterpreter">サブインタープリター</a> があります。これは一つのプロセス内で複数のPython実行環境を作成し、複数のアプリケーションを同時に動かすことができる</p></div></div></div>Python 3.12の新機能(その4) PEP 688: バッファープロトコルをPythonで利用可能に2023-10-10T00:00:00+09:002023-10-10T00:00:00+09:00tag:www.python.jp,2023-10-10 00:00:00.000000:/news/wndpython312/pep688-buffer-protocol.html<div class="cell border-box-sizing text_cell rendered" id="cell-id=f4db7d1c-31d2-44af-bd55-5bb8e4711a63"><div class="prompt input_prompt"> </div><div class="inner_cell"> <div class="text_cell_render border-box-sizing rendered_html"> <p>Pythonで最も有名なライブラリの一つに、<a href="proxy.php?url=https://numpy.org/">Numpy</a> があります。Numpyは科学技術計算、機械学習、AI、画像処理など、多岐にわたる分野で利用され、今日のPythonの普及に大きく貢献しています。</p> <p>Numpyは独立したライブラリですが、もともとはPythonの標準ライブラリに組み込む予定で開発が始まりました。しかし、プロジェクトが大規模化したため、最終的に独立したライブラリとして提供されることになりました。この経緯から、NumpyはPython言語と密接な関係を持ち、その設計や実装に大きな影響を与えてきまし</p></div></div></div>