python3 組み込み関数や組み込み型のコードを確認する方法。計算量がわかるので競技プログラミングに便利!

python標準ライブラリのコードをGitHubを用いて確認する方法を説明します。組み込み関数、組み込み型、その他モジュールのコードの確認方法がわかる様になります。
コードを確認することで組み込み関数の計算量がわかるので、競技プログラミング等で処理が思う様な実行時間にならない時に原因を知ることが出来ます。例えば、ループの中でsum関数を使用する場合、O(n^2)になるので、可能であればsumを利用しない方が良いということがわかります。

本記事で説明していない、コードの配置場所はPython Developer’s Guide(23. Exploring CPython’s Internals — Python Developer’s Guide)が参考になります。コードはGitHub上の対応する箇所にあります(GitHub – python/cpython: The Python programming language)。

本記事のコード確認方法はcpython用です。cpythonはC言語で実装されたpythonであり、オリジナルのpythonです。Python.org(Download Python | Python.org)からダウンロード出来るpythonはcpythonです。

組み込み関数

組み込み関数(組み込み関数 — Python 3.9.4 ドキュメント)は、標準ライブラリ内のモジュールをimportするせずに使用可能な関数です。

コード確認方法は下記です。
cpython/bltinmodule.c at master · python/cpython · GitHubにアクセスする。
・コードから「builtin_~」を探す(*1)。※~は確認したい関数名を表します。
 ・例えば、「builtin_abs」が見つかります。

(*1)ブラウザのCtrl+fショートカットを使用して検索すると便利です。

組み込み型

組み込み型(組み込み型 — Python 3.9.4 ドキュメント)のコード確認方法は下記です。

cpython/Objects at master · python/cpython · GitHubにアクセスする。
・ファイル名が「~object.c」のファイルを探す。
 ※~は確認したい型名を表します。また、~は必ず型名と一致するわけではありません。例えば、
  enumerate型はファイル名と一致していません(ファイル名がenumobject.cとなっています)。

その他モジュール

その他モジュール(Python 標準ライブラリ — Python 3.9.4 ドキュメントのstring等)のコード確認方法を説明します。GitHub上のコードを確認する方法、PCにインストールされたpythonのコードを確認する方法があります。

GitHub上のコードを確認

GitHubに直接アクセス

Pythonの公式ドキュメントからアクセス

threading — スレッドベースの並列処理
ソースコード: Lib/threading.py

threading — スレッドベースの並列処理 ソースコード: Lib/threading.py

PCにインストールされたpythonのコードを確認

・pythonスクリプト内でモジュールをimport後、print(モジュール名.__file__)とする。
 ※コードは下記。
・出力されたパスにあるファイルを開いて確認する。

import string
import struct
import datetime
import numbers
import functools

print(string.__file__)
print(struct.__file__)
print(datetime.__file__)
print(numbers.__file__)
print(functools.__file__)

"""
出力は下記です。
/usr/lib/python3.8/string.py
/usr/lib/python3.8/struct.py
/usr/lib/python3.8/datetime.py
/usr/lib/python3.8/numbers.py
/usr/lib/python3.8/functools.py
"""

参考サイト

下記サイトを参考にしました。inspectを使用した方法も書かれています。
Finding the source code for built-in Python functions? – Stack Overflow

cpythonの説明
CPython – Wikipedia
Python vs Cpython – Stack Overflow

__file__の説明
__file__ (A Special variable) in Python – GeeksforGeeks

コメント

タイトルとURLをコピーしました