前書き
インストール
スペースの都合上、オンラインチュートリアルを参照してください (PythonにはAnacondaを推奨)。
コードリポジトリ
実行方法
「Hello World」を表示する例で説明します。
1 | # main.pyファイル |
1 | python main.py |
変数定義とデータ型
変数とは、メモリ上のあるアドレスを指す識別子であり、一般的にデータを格納するために使用されます。
データ型とは、変数の種類を示したもので、型によってその変数がメモリ上で占めるスペースの大きさが決まります。
代入とは、データ(値)を変数が指すアドレスに格納することであり、その後はこの変数を使ってそのデータを取得できます。
1 | # 例:異なる型の変数を定義する |
配列array/リストlist/辞書dict|map/集合set/
1 | # リストの定義 |
フロー制御
フロー制御とは、プログラムの実行順序を定義することです。
順次実行
順次実行とは、上から順番に実行されることであり、これはプログラムの通常の実行フローです。
選択
選択とは、異なる条件に応じて異なるコードを実行することです。
選択のフローは単一分支と多分支に分かれます。
単一分支
単一分支とは、1つの分支ノードのみがあり、1回の条件判断しかありません。
1 | # 例:単一分支 if文 |
多分支
多分支には複数の分支ノードがあり、複数の条件判断があります (if-elif-else | switch-case)。
1 | # 例:多分支 if-elif-else文 |
繰り返し
繰り返しとは、繰り返し実行されるプロセスのことです。
1 | # 例:for文でリストを走査する |
関数
関数の本质はクロージャーであり、自身のスコープを持っています。
我々は関数を使ってコードの一部を定義でき、0または複数の入力を受け取り、関数内のコードを実行し、終了時に0または複数の出力を返します。
関数を使用することで共通ロジックを抽出し、コードを簡略化できます。
1 | # 例:関数を定義して呼び出す |
クラス/構造体
クラス/構造体
クラスとは、データとメソッド(関数)を含む抽象的な構造であり、定義することができ、使用するためにクラスをインスタンス化する必要があります。つまり、メモリ上で指定されたサイズのスペースを確保して保存することです。
クラスのサイズは内部で何が定義されているか(例えばint)に依存し、コンパイラはデータサイズに応じてどのくらいのスペースを割り当てるか自動的に判断します。
1つのクラスから複数のインスタンス化オブジェクトを持つことができます。つまり、異なる変数が複数ありますが、これらの変数はすべてこのクラスの構造と一致しています。
1 | # 例:クラスを定義してインスタンスを作成する |
インターフェース
インターフェース(Interface)構文は、動作仕様を定義する方法です。それは、ある型がどのようなメソッド(関数)を持つべきかを記述しますが、これらのメソッドが具体的にどう実装されるのかは気にしません。
インターフェースは一種の抽象的な契約(contract)です:
- メソッド名、引数、戻り値のみを定義します。
- 具体的な実装(論理コード)は一切含みません。
- ある型がインターフェースの中で定義されたすべてのメソッドを実装したら、「そのインターフェースを実装している」と言われます。
1 | # 例:abcモジュールを使ってインターフェースを模擬する |
フレームワーク
開発を簡略化するために、プログラマは共通ロジックを抽出して関数にまとめたり、クラスやメソッドにまとめたりします。この不断に簡略化する過程でフレームワークが誕生します。
ただし私の理解では、ライブラリ(library)は共通の方法やクラスを集めたツール集いであり、ユーザーは自分の好みで多くの異なるライブラリを追加して使用できます。一方、フレームワーク(framework)はプロジェクトの規範やテンプレートを定義し、ユーザーはフレームワークの上でフレームワークが定めた基準や構造に従って開発を行います。ただし常にこの境界線は明確ではなく、両者の言葉は混在して使われることが多いです。
web
私たちが今書いているプログラムはすべてローカルで実行されています。世界中のユーザーにも使ってもらうためには、ネットワーク上に公開する必要があり、webフレームワークは言語自体が提供するネットワークライブラリをカプセル化し、ネットワークサービスを開くためのいろいろなメソッドを提供します。
Pythonでよく使われるwebフレームワークはflask|fastapi|djangoで、ここではfastapiを例に挙げます。
1 | pip install fastapi uvicorn -i https://pypi.tuna.tsinghua.edu.cn/simple |
1 | from fastapi import FastAPI |
localhost:8080にアクセスして確認してください。Swagger UI:http://127.0.0.1:8000/docs ReDoc:http://127.0.0.1:8000/redoc
db
私たちはこれまで変数を使ってデータを格納してきましたが、変数のデータはメモリ上にあり、プログラムが停止するとメモリ上のデータは回収されます。次のプログラム起動時には、OSが割り当ててくるのは別のメモリ空間かもしれません。そのため、私たちはデータを永続化して保存する必要があり、それがデータベースシステムです。
ここではsqlalchemyを例に挙げます。
1 | pip install sqlalchemy -i https://pypi.tuna.tsinghua.edu.cn/simple |
1 | from sqlalchemy import create_engine, Column, Integer, String |
拡張
- AI方向:
- データ分析|機械学習|深層学習|強化学習
- numpy(計算)|pandas(データ読み込みと処理)|matplotlib(可視化)
- scikit-learn(機械学習)|tensorflow|pytorch(深層学習)
- さまざまな機械学習モデルの実装|深層学習ニューラルネットワーク
- langchain|llama-index 大規模モデルアプリケーション
- 多スレッド/マイクロサービス/反射-動的プロキシ/ファイル操作/ネットワークプログラミング/
- フレームワークの原理/手書きコード
- wasm/grpc
コミュニティ
以下のプラットフォームで私に連絡することができます:
- bili: 刚子哥forever
- QQグループ: 940263820
- gitee: gitee
- ブログ: malcode-site
- メールアドレス: malguy2022@163.com
- 知乎: 乐妙善哉居士
- CSDN: 飞鸟malred