1. 基本を学ぶ

Pythonは、高水準、インタプリタ型、汎用のプログラミング言語です。その設計哲学は、インデントを重視したコードの可読性を強調しています。Pythonは動的型付けであり、ガベージコレクションを備えています。

◇基本構文

Pythonの環境を設定し、基本を始めましょう。

◇変数とデータ型

変数は、コンピュータプログラムで情報を参照および操作するために使用されます。また、データに説明的な名前を付ける方法を提供し、プログラムを読者や自分自身がより明確に理解できるようにします。変数は情報を保持するコンテナと考えると便利です。その唯一の目的は、データにラベルを付け、メモリに保存することです。このデータはプログラム全体で使用できます。

◇条件分岐

Pythonの条件分岐は、特定の条件が真か偽かによって異なるアクションを実行します。条件分岐は、if-elif-else文とMATCH-CASE文で処理されます。

◇ループ

ループは、コードブロックを繰り返し実行するために使用されます。

◇型変換

あるデータ型(整数、文字列、浮動小数点数など)の値を別のデータ型に変換するプロセスを型変換と呼びます。Pythonには、暗黙的型変換と明示的型変換の2種類があります。

◇例外

Pythonの例外は、プログラムの実行中に発生し、プログラムの通常のフローを中断するイベントです。例外が発生すると、エラーが発生したことを示します。Pythonは、try-exceptブロックを使用してこれらの例外を処理する方法を提供し、開発者がエラーを適切に管理し、プログラムを続行またはスムーズに終了できるようにします。

◇関数、組み込み関数

  • 関数 プログラミングにおいて、関数は、呼び出されたときに特定の機能を実行する再利用可能なコードブロックです。関数は、コードをよりモジュール化し、再利用可能にするため、すべてのプログラミング言語の重要な部分です。Pythonでは、defキーワードを使用して関数を定義し、関数識別子(名前)を括弧とコロンの後に記述します。

  •   def greet(name):
          print(f"Hello, {name}!")
    
      greet("World")     
    
  • 公式 Pythonの組み込み関数

  • 記事 Pythonの関数 - W3Schools

  • 記事 Python関数の定義

◇リスト、タプル、セット、辞書

  • リスト: リストは、他の言語で宣言される動的サイズの配列(C++のvectorやJavaのArrayList)のようなものです。リストは常に同種である必要はなく、Pythonで最も強力なツールの1つです。

  • タプル: タプルは、カンマで区切られたPythonオブジェクトのコレクションです。いくつかの点で、タプルはリストと似ていますが、リストとは異なり、タプルは不変です。

  • セット: セットは、順序付けられていないデータ型のコレクションで、反復可能、可変、重複する要素を持ちません。Pythonのセットクラスは、数学的な集合の概念を表します。

  • 辞書: Pythonでは、辞書は順序付けられた(Python 3.7以降)[順序付けられていない(Python 3.6以前)]データ値のコレクションで、マップのようにデータ値を格納するために使用されます。他のデータ型が単一の値を要素として保持するのに対し、辞書はキーと値のペアを保持します。辞書では、キーと値が提供され、より最適化されています。

  • 記事 Pythonでのタプル vs リスト vs セット

  • 記事 Python初心者向け: リスト

  • 記事 Python初心者向け: タプルの使用方法とタイミング

  • 動画 Pythonでのリスト、タプル、セット、辞書の違い

◇タプル

タプルは不変のシーケンスであり、一度作成されるとその要素を変更することはできません。タプルは、関連する情報を保存するためによく使用されます。タプルは、要素を括弧()内にカンマで区切って配置することで定義されます。

◇セット

Pythonのセットは、順序付けられていないデータ型のコレクションで、反復可能、可変、重複する要素を持ちません。セット内の要素の順序は定義されていませんが、さまざまな要素で構成される場合があります。リストと比較してセットを使用する主な利点は、特定の要素がセットに含まれているかどうかをチェックするための高度に最適化された方法があることです。

◇辞書

Pythonでは、辞書はキーと値のペアを格納するための組み込みデータ型です。辞書内の各キーは一意であり、各キーは値に関連付けられています。Python 3.7以降、辞書はアイテムが追加された順序を維持します。

2. データ構造とアルゴリズム

データ構造は、データを保存し整理するために使用できる名前付きの場所です。そして、アルゴリズムは特定の問題を解決するためのステップの集合です。データ構造とアルゴリズムを学ぶことで、効率的で最適化されたコンピュータプログラムを書くことができます。

◇配列とリンクリスト

配列は要素を連続したメモリ位置に保存し、保存された要素のアドレスを簡単に計算できるため、特定のインデックスにある要素に高速にアクセスできます。リンクリストは保存構造が柔軟で、要素は通常連続した場所に保存されないため、次の要素への参照を提供する追加のタグと共に保存する必要があります。このデータ保存方式の違いにより、特定の状況に適したデータ構造が決定されます。

◇ハッシュテーブル

ハッシュテーブル、マップ、ハッシュマップ、辞書、または連想配列は、すべて同じデータ構造の名前です。これは、キーを値にマッピングできる集合抽象データ型を実装するデータ構造です。

◇ヒープ、スタック、キュー

◇二分探索木

二分探索木は、順序付けまたはソートされた二分木とも呼ばれ、各内部ノードのキーが対応するノードの左部分木のすべてのキーより大きく、右部分木のキーより小さいという特性を持つ根付き二分木データ構造です。

◇再帰

再帰は、計算問題を解決する方法の一つで、解決策が同じ問題のより小さなインスタンスの解決策に依存します。再帰は、自身のコード内から自身を呼び出す関数を使用して、そのような再帰的問題を解決します。

◇ソートアルゴリズム

ソートとは、データを特定の形式で並べ替えることを指します。ソートアルゴリズムは、データを特定の順序で並べ替える方法を指定します。最も一般的な順序は数値順または辞書順です。ソートの重要性は、データがソートされた状態で保存されている場合、データ検索を非常に高いレベルで最適化できる点にあります。

3. モジュール

モジュールとは、Pythonのステートメントと定義を含むファイルを指します。例えば、example.pyというPythonコードを含むファイルはモジュールと呼ばれ、そのモジュール名はexampleとなります。モジュールを使用することで、大きなプログラムを小さな管理可能で整理されたファイルに分割することができます。さらに、モジュールはコードの再利用性を提供します。

◇組み込みモジュール

Pythonには、豊富な標準ライブラリとして組み込みモジュールが多数用意されており、多岐にわたる機能を提供します。最も一般的に使用される組み込みモジュールには、sys、os、math、datetime、random、re、itertoolsなどがあります。

◇カスタムモジュール

モジュールとは、Pythonのステートメントと定義を含むファイルを指します。例えば、example.pyというPythonコードを含むファイルはモジュールと呼ばれ、そのモジュール名はexampleとなります。モジュールを使用することで、大きなプログラムを小さな管理可能で整理されたファイルに分割することができます。さらに、モジュールはコードの再利用性を提供します。

4. ラムダ

Pythonのラムダ関数は、名前のない匿名関数です。すでにご存知のように、defキーワードはPythonで通常の関数を定義するために使用されます。同様に、lambdaキーワードはPythonで匿名関数を定義するために使用されます。

5. デコレータ

デコレータは、Pythonのデザインパターンの一つで、既存のオブジェクトに新しい機能を追加することができます。デコレータは通常、デコレートしたい関数の定義の前に呼び出されます。

6. イテレータ

イテレータは、数えられる数の値を含むオブジェクトです。イテレータは反復可能なオブジェクトであり、すべての値を順にたどることができます。技術的には、Pythonではイテレータはイテレータプロトコルを実装したオブジェクトであり、iter()メソッドとnext()メソッドで構成されます。

7. 正規表現

正規表現は、テキスト内の検索パターンを指定する文字列のシーケンスです。通常、このようなパターンは文字列検索アルゴリズムによって「検索」や「検索と置換」操作、または入力検証に使用されます。

8. オブジェクト指向プログラミング

Pythonでは、オブジェクト指向プログラミング(OOP)は、プログラミングにおいてオブジェクトとクラスを使用するプログラミングパラダイムです。これにより、継承、ポリモーフィズム、カプセル化などの現実世界のエンティティをプログラミングに実装することを目指しています。OOPの主な概念は、データとそれに関連する関数を単一のユニットとして結びつけ、コードの他の部分がこのデータにアクセスできないようにすることです。

◇クラス

クラスは、オブジェクトを作成するためのユーザー定義の設計図またはプロトタイプです。クラスは、データと機能をまとめる手段を提供します。新しいクラスを作成すると、新しいタイプのオブジェクトが作成され、そのタイプの新しいインスタンスを作成できるようになります。各クラスインスタンスには、その状態を維持するための属性を付けることができます。クラスインスタンスは、その状態を変更するためのメソッド(クラスによって定義される)を持つこともできます。

◇継承

継承は、オブジェクト指向プログラミング(OOP)の基本的な概念で、あるクラスが別のクラスのプロパティと振る舞いを継承できるようにします。

◇メソッド、ダンダーメソッド

Pythonのメソッドは、関数と似ていますが、オブジェクト/クラスに関連付けられています。Pythonのメソッドは、2つの主要な違いを除いて、関数と非常に似ています。

  • メソッドは、それが呼び出されたオブジェクトに対して暗黙的に使用されます。
  • メソッドは、クラス内に含まれるデータにアクセスできます。

Pythonのダンダーメソッドまたはマジックメソッドは、メソッド名に2つの接頭辞と接尾辞のアンダースコアを持つメソッドです。ダンダーは「ダブルアンダー(アンダースコア)」を意味します。これらは通常、演算子のオーバーロードに使用されます。マジックメソッドの例としては、__init____add____len____repr__などがあります。

9. パッケージマネージャー

パッケージマネージャーを使用すると、プロジェクトが正しく動作するために必要な依存関係(自分または他の誰かが書いた外部コード)を管理できます。

PyPIPip が最も一般的ですが、他にもいくつかの選択肢があります。

◇Poetry

Poetryは、Windows、macOS、Linuxで動作するPythonの依存関係管理およびパッケージングツールです。Poetryは、パッケージとその依存関係を効率的にインストール、管理、更新します。Poetryは、ローカルコンピュータ上でプロジェクト環境を作成、保存、読み込み、切り替えることができます。Pythonプロジェクト専用に設計されており、依存関係、仮想環境、パッケージのビルドを管理するための合理化されたワークフローを提供します。

Poetryは、パッケージャーとしてパッケージを見つけてインストールするのに役立ちます。特定のバージョンのパッケージや異なるバージョンのPythonが必要な場合、Poetryは依存関係管理と仮想環境の両方を簡単に処理します。わずか数コマンドで、通常の開発環境を維持しながら、異なるバージョンのPythonやパッケージ構成を実行するための完全に隔離された環境を設定できます。Poetryのロックファイルは、異なる環境間で一貫したインストールを保証し、プロジェクトの再現性と安定性を向上させます。

◇Conda

Condaは、Windows、macOS、Linuxで動作するオープンソースのパッケージ管理システムおよび環境管理システムです。Condaは、パッケージとその依存関係を迅速にインストール、実行、更新します。Condaは、ローカルコンピュータ上で環境を作成、保存、読み込み、切り替えることができます。Pythonプログラム用に作成されましたが、任意の言語のソフトウェアをパッケージ化して配布できます。

◇uv

uvは、「非常に高速な」Pythonパッケージインストーラーおよびリゾルバーです。

◇PyPI

PyPIは、通常「パイ・ピー・アイ」と発音され、数十万のパッケージを含むリポジトリです。これらは、簡単なHello, Worldの実装から高度な深層学習ライブラリまで多岐にわたります。

◇Pip

Pythonの標準パッケージマネージャーはpipです。Python標準ライブラリに含まれていないパッケージをインストールおよび管理できます。

10. 一般的なパッケージ

Pythonには、言語を最大限に活用するための豊富なパッケージとモジュールのエコシステムがあります。パッケージは基本的に、複数のモジュールとサブパッケージを含むディレクトリです。モジュールは、関連する関数、クラス、変数のコレクションを含む単一のファイルです。モジュールはPythonコード組織の基本的な構成要素です。モジュールは、関連するコードのセットを保持するコンテナと考えることができます。

◇設定: pyproject.toml

このファイルは、プロジェクトの設定と依存関係を定義するために使用されます。プロジェクトの名前、バージョン、依存関係、ビルド設定などのメタデータを含む設定ファイルです。pyproject.tomlファイルは、poetryflitなどのツールによってPythonプロジェクトとその依存関係を管理するために使用されます。

公式 pyproject.tomlファイルの書き方

11. リスト内包表記

リスト内包表記は、Pythonで1行のコードを使用してリストを作成する簡潔な方法です。リストの作成と操作のための強力なツールであり、コードを簡素化し短縮するために使用できます。

12. ジェネレータ式

ジェネレータ式は、Pythonで1行のコードを使用してジェネレータを作成する簡潔な方法です。リスト内包表記と似ていますが、リストを作成する代わりに、必要に応じて値を生成するジェネレータオブジェクトを作成します。ジェネレータ式は、大きなシーケンスの値を効率的に生成するための便利なツールです。なぜなら、メモリにシーケンス全体を作成することなくジェネレータを作成できるからです。これにより、特に大きなシーケンスの場合にメモリ使用量が少なくなります。

13. パラダイム

Pythonはマルチパラダイムプログラミング言語であり、いくつかのプログラミングパラダイムをサポートしています。Pythonがサポートする主なパラダイムは次のとおりです:

  • 命令型プログラミング: このパラダイムは、コンピュータに何をすべきかを段階的に指示することに焦点を当てています。Pythonは、変数、ループ、制御構造などの機能を使用して命令型プログラミングをサポートします。

  • オブジェクト指向プログラミング(OOP): このパラダイムは、オブジェクトとその相互作用に基づいています。Pythonは、クラス、継承、ポリモーフィズムなどの機能を使用してOOPをサポートします。

  • 関数型プログラミング: このパラダイムは、関数を第一級オブジェクトとして扱うことに基づいており、純粋関数と不変データの使用を強調します。Pythonは、高階関数、ラムダ式、ジェネレータなどの機能を使用して関数型プログラミングをサポートします。

  • アスペクト指向プログラミング: このパラダイムは、プログラムの主要な機能から横断的関心事を分離するという考えに基づいています。Pythonはアスペクト指向プログラミングを組み込みでサポートしていませんが、ライブラリや言語拡張を使用して実現できます。

  • 記事 Pythonパラダイム

  • 動画 関数型プログラミングを学ぶ - Pythonコース

14. コンテキストマネージャ

コンテキストマネージャは、Pythonの構築物であり、コードブロックのコンテキストを設定し、ブロックが終了したときに自動的にリソースをクリーンアップまたは解放することを可能にします。withステートメントと共に使用されることが最も一般的です。

15. Pythonフレームワーク

フレームワークは、一般的なソリューションの共通実装を自動化し、ユーザーが基本的なルーチンプロセスではなくアプリケーションロジックに集中できる柔軟性を提供します。フレームワークは、アプリ開発のための構造を提供することで、ウェブ開発者の生活を楽にします。それらは、ウェブアプリケーションにおいて高速で信頼性が高く、容易に保守可能な共通パターンを提供します。

◇Plotly Dash(同期)

Plotly Dashは、分析ウェブアプリケーションを構築するためのPythonフレームワークです。これは、ウェブ開発の広範な知識を必要とせずに、インタラクティブなウェブベースのデータ可視化ダッシュボードを作成できる高レベルライブラリです。

◇Pyramid(同期)

Pyramidは、Pythonで構築された汎用的なオープンソースのウェブアプリケーション開発フレームワークです。Python開発者が簡単にウェブアプリケーションを作成できるようにします。Pyramidは、エンタープライズ知識管理システムKARL(ジョージ・ソロスのプロジェクト)によってサポートされています。

◇gevent(非同期)

geventは、イベントループへの高レベルインターフェースを提供するPythonライブラリです。これは、非ブロッキングIO(libevent/libev)と軽量なグリーンスレッドに基づいています。非ブロッキングIOは、ネットワークIOを待っているリクエストが他のリクエストをブロックしないことを意味し、グリーンスレッドは同期スタイルでコードを書き続けることができることを意味します。

◇aiohttp(非同期)

aiohttpは、Python 3.5以降のライブラリで、シンプルで強力な非同期HTTPクライアントとサーバー実装を提供します。

◇Tornado(非同期)

Tornadoは、Pythonで書かれたスケーラブルで非ブロッキングなウェブサーバーおよびウェブアプリケーションフレームワークです。FriendFeedによって使用されるために開発され、同社は2009年にFacebookに買収され、その後すぐにTornadoはオープンソース化されました。

◇Sanic(非同期)

Sanicは、Python 3.7以降のウェブサーバーおよびウェブフレームワークで、高速化を目指して書かれています。Python 3.5で追加されたasync/await構文の使用を可能にし、コードを非ブロッキングで高速にします。

◇Fast API(同期 + 非同期)

FastAPIは、PythonでRESTful APIを開発するためのウェブフレームワークです。FastAPIは、Pydanticと型ヒントに基づいてデータを検証、シリアライズ、デシリアライズし、自動的にOpenAPIドキュメントを生成します。

◇Django(同期 + 非同期)

Djangoは、Pythonベースの無料でオープンソースのウェブフレームワークで、モデル-テンプレート-ビューアーキテクチャパターンに従います。Djangoソフトウェア財団によって維持されており、米国で501非営利団体として設立された独立組織です。

◇Flask(同期 + 非同期)

Flaskは、Pythonで書かれたマイクロウェブフレームワークです。特定のツールやライブラリを必要としないため、マイクロフレームワークとして分類されています。データベース抽象化層、フォーム検証、または既存のサードパーティライブラリが共通機能を提供する他のコンポーネントはありません。代わりに、プロジェクトのニーズに最適なライブラリを選択して統合する柔軟性を提供します。

16. 並行処理

Pythonにおける並行処理は、複数のタスクを異なるアプローチを使用して同時に実行することを可能にします。GIL(グローバルインタプリタロック)はスレッドの実行を制限し、計算タスクにおけるマルチスレッドの効率を低下させますが、I/O処理には適しています。マルチプロセッシングは、multiprocessingモジュールを使用して複数のコアを活用し、真の並列処理を提供します。asyncioを介した非同期処理は、I/O操作に最適であり、ブロックすることなく数千の接続を同時に処理することができます。アプローチの選択は、タスクの性質に依存します。

◇マルチプロセッシング

マルチプロセッシングは、それぞれが独自のGILを持つ複数のプロセスを利用します。これにより、複数のプロセッサコアをフルに活用することができ、計算集約型のタスクに効果的です。Pythonのmultiprocessingモジュールは、プロセスの作成とそれらの間でのデータ交換をサポートしています。

◇非同期処理

asyncioによってサポートされる非同期プログラミングは、asyncawaitを使用してブロックすることなくコードを実行することを可能にします。これは、ネットワーキングやファイル操作などのI/Oタスクに特に有用であり、メインスレッドをブロックすることなく数千の接続を処理することができます。

◇GIL

GILは、一度に1つのスレッドのみがPythonコードを実行できるようにするメカニズムです。この制限はCPythonのメモリ管理に関連しており、マルチコアシステム上でのマルチスレッドアプリケーションの効率を低下させる可能性があります。

◇スレッディング

マルチスレッディングは、単一のプロセス内で複数のスレッドを可能にします。しかし、GILのため、スレッドは異なるコア上で並列に実行することができず、これによりマルチスレッディングはI/Oタスク(例: ネットワークリクエスト)には適していますが、計算タスクには適していません。

17. 環境

◇Pipenv

パイプライン環境(Pipenv)は、Pythonの世界にすべてのパッケージングのベストプラクティス(バンドル、requirements.txt、setup.py、setup.cfgなど)をもたらすことを目的としたツールです。プロジェクトの仮想環境を自動的に作成および管理し、パッケージをインストール/アンインストールする際にPipfileにパッケージを追加/削除します。また、重要なPipfile.lockを生成し、これを使用して確定的なビルドを行います。

◇virtualenv

virtualenvは、孤立したPython環境を作成するためのツールです。Pythonプロジェクトが必要とするパッケージを使用するために必要なすべての実行可能ファイルを含むフォルダを作成します。

◇pyenv

pyenvは、Unix系システムで複数のバージョンのPythonプログラミング言語を管理するためのツールです。希望するバージョンのPythonがインストールされているディレクトリを指すように環境変数を設定することで動作します。これにより、システムのデフォルトのPythonインストールを変更することなく、異なるバージョンのPythonを切り替えることができます。

18. 静的型付け

静的型付けは、バグが発生する前にそれらを捕捉するための強力なツールです。また、作業中のコードを理解し、保守やリファクタリングを容易にするのにも役立ちます。

◇Pydantic

Pydanticは、Pythonの型アノテーションを使用してデータ検証と設定管理を行うためのPythonライブラリです。

◇pyre

pyreは、Pythonのための静的型チェッカーです。これは、Pythonコード内の型エラーを見つけるのに役立つツールです。pyreは、高速でスケーラブル、かつ使いやすいように設計されています。Facebookでは、開発者が本番環境に到達する前に型エラーを捕捉するために使用されています。

◇pyright

pyrightは、Pythonのための静的型チェッカーです。これはMicrosoftの製品で、TypeScriptで書かれています。これは言語サーバーであり、Language Server Protocol (LSP) を使用してエディタと通信します。mypyやpytypeの良い代替品です。

◇mypy

mypyは、Pythonのオプショナルな静的型チェッカーで、動的(または「ダック」)型付けと静的型付けの利点を組み合わせることを目指しています。mypyは、Pythonの表現力と便利さを、強力な型システムとコンパイル時の型チェックと組み合わせます。mypyは標準のPythonプログラムを型チェックします;基本的にランタイムオーバーヘッドなしで任意のPython VMを使用して実行できます。

◇typing

Typingは、Pythonのモジュールで、型ヒントのためのランタイムサポートを提供します。typingモジュールは、Python言語で型を記述するために使用できる標準的な名前のセットを定義します。typingモジュールはPython 3.5で標準ライブラリに追加されました。

19. コードフォーマット

Pythonのコードフォーマットは、可読性と一貫性を維持し、エラーを減らすために重要です。BlackはPythonのコードフォーマッターです。これは、PEP 8スタイルガイドに従ってPythonコードを自動的にフォーマットするツールです。Pythonプロジェクトで使用するのに最適なツールであり、コードが一貫して正しくフォーマットされることを保証します。

◇yapf

yapfはPythonファイルのフォーマッターです。これは、PEP 8スタイルガイドに従ってPythonコードを自動的にフォーマットするツールです。blackと似ていますが、より多くの設定オプションがあります。

◇black

blackはPythonのコードフォーマッターです。これは、PEP 8スタイルガイドに従ってPythonコードを自動的にフォーマットするツールです。Pythonプロジェクトで使用するのに最適なツールであり、コードが一貫して正しくフォーマットされることを保証します。

◇ruff

Rustで書かれた非常に高速なPythonリンターおよびコードフォーマッターです。

20. ドキュメンテーション

◇Sphinx

Sphinxは、Georg Brandlによって書かれ、BSDライセンスの下でライセンスされている、インテリジェントで美しいドキュメンテーションを簡単に作成するためのツールです。

21. テスト

プログラミングにおけるテストとは、コードが期待通りに動作するかどうかを確認することです。これは、コードが公開される前にエラー(バグ)を見つけて修正する体系的な方法です。壁がまっすぐか、屋根が漏れないかを確認せずに美しい家を建てることを想像してみてください。それが、テストなしでコーディングする感じです!

◇tox

Toxは、テスト環境の管理と複数のインタプリタ設定に対するテストを自動化するためのツールです。特に、複数のバージョンのPythonをサポートする必要があるPythonコードベースに役立ちます。

◇nose

Noseは、unittestを拡張してより柔軟なテストフレームワークを提供する別のオープンソースのテストフレームワークです。Noseはもはやメンテナンスされておらず、pytestがその代替と見なされています。

◇unittest / pyUnit

PyUnitは、PythonでユニットテストプログラムとUnitTestsを作成する簡単な方法です。(docs.python.orgでは「unittest」という名前を使用しており、これがモジュール名でもあります。)

◇doctest

Pythonの標準ライブラリには、doctestというテストフレームワークモジュールが含まれています。doctestモジュールは、Pythonコード内のインタラクティブなPythonセッションのように見えるコメント内のテキストをプログラム的に検索します。その後、モジュールはそれらのセッションを実行して、doctestによって参照されるコードが期待通りに実行されることを確認します。

◇pytest

pytestは、成熟したフル機能のPythonテストツールであり、より良いプログラムを書くのに役立ちます。