【社内勉強会①】Pythonについて

# 目次
- [1. Pythonとは](#1-pythonとは)
  - [Zen of Python](#zen-of-python)
  - [Pythonの特徴](#pythonの特徴)
  - [Javaとの比較](#javaとの比較)
  - [リリースサイクル](#リリースサイクル)
- [2. Python実行環境の準備](#2-python実行環境の準備)
  - [For Windows](#for-windows)
- [3. Python仮想環境](#3-python仮想環境)
  - [Python仮想環境とは](#python仮想環境とは)
  - [仮想環境を使用する利点](#仮想環境を使用する利点)
  - [仮想環境の作成手順](#仮想環境の作成手順)

***

# 1. Pythonとは
Python（パイソン）は、汎用的で高水準なプログラミング言語であり、1991年にGuido van Rossumによって設計・開発されました。Pythonは、シンプルで読みやすい構文を持ち、人間が理解しやすいコードを書きやすいことが特徴です。

***

## Zen of Python
Pythonの設計思想は、「The Zen of Python」[^1]として知られる一連の原則によって表現されています。これはPythonに多大な貢献をしたティム・ピーターズ（Tim Peters）によって提唱され、Pythonコミュニティで広く受け入れられています。
>Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!

***

## Pythonの特徴
- 学びやすく使いやすい：
Pythonはシンプルで直感的な構文を持っており、初心者でも学びやすく使いやすい。
- 動的型付け：
Pythonは動的型付け言語であり、変数の型はコード内で明示的に定義されるのではなく、実行時に決定されます。
- インタプリタ型：
Pythonはインタープリタ型言語であり、機械語にコンパイルされて一度に実行されるのではなく、コードが一行ずつ実行されます。
- オブジェクト指向：
Pythonはオブジェクト指向プログラミングをサポートしており、複雑なデータ構造や再利用可能なコードを作成することができます。
- 豊富な標準ライブラリ：
Pythonには大規模で包括的な標準ライブラリ[^2]が用意されており、さまざまな機能をすぐに利用できます。
- クロスプラットフォーム：
Pythonは、Windows、macOS、Linuxなど、幅広いプラットフォームで使用できます。

***

## Javaとの比較
Javaは、静的型付け、コンパイル型といったPythonと対照的な特徴を持つ言語です。

- **1から10までの偶数のリストを作成するコード例**

```python:Python
even_numbers = [x for x in range(1, 11) if x % 2 == 0]
```

```java:Java
List<Integer> evenNumbers = IntStream.rangeClosed(1, 10)
                                     .filter(x -> x % 2 == 0)
                                     .boxed()
                                     .collect(Collectors.toList());
```

***

- **Pythonプログラムの実行までの過程**
1. Pythonスクリプトを作成します。例えば、`hello.py`という名前のファイルに、以下のようなコードを記述します。
```python
print("Hello, World!")
```
2. コマンドプロンプトまたはターミナルを開き、Pythonスクリプトが保存されているディレクトリに移動します。
3. 以下のコマンドを入力して、Pythonスクリプトを実行します。
```sh
python hello.py
```
4. Pythonインタプリタがスクリプトを1行ずつ読み込み、実行します。

***

- **Javaプログラムの実行までの過程**
1. Javaソースコードを作成します。例えば、`Hello.java`という名前のファイルに、以下のようなコードを記述します。
```java
public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}
```
2. コマンドプロンプトまたはターミナルを開き、Javaソースコードが保存されているディレクトリに移動します。
3. 以下のコマンドを入力して、Javaソースコードをコンパイルします。
```sh
javac Hello.java
```
4. コンパイルが成功すると、同じディレクトリに`Hello.class`という名前のファイルが作成されます。これがJavaバイトコードです。
5. 以下のコマンドを入力して、Javaプログラムを実行します。
```sh
java Hello
```
6. Java仮想マシン(JVM)がバイトコードを読み込み、実行します。

***

これらの例からわかるように、Pythonはシンプルで簡潔な文法を持ち、コードが読みやすく書きやすいことが特徴です（読みやすさ、書きやすさは人によって感じ方は違うと思いますが...）。一方、Javaは静的型付け言語であり、より厳密な文法と型チェックがあります。これにより、コードがより堅牢で安全になりますが、書くのに少し時間がかかる場合があります。

***

## リリースサイクル[^3]
**メジャーリリース(ex. 3.8 -> 3.9)**
2020年以降、毎年10月にメジャーリリースがされる。
メジャーリリースの前には、開発期間とα版・β版・RC版の期間があります。開発期間は、前のバージョンのβ・RC期間と重なっており、新しい機能や改善点を取り込んでいきます。α版は、新しい機能を試すことができるバージョンで、7ヶ月間で6回公開されます。β版は、不具合を修正することに注力するバージョンで、3ヶ月間で4回公開されます。RC版は、正式版になる予定のバージョンで、2ヶ月間で2回公開されます。
新しい機能や改善点の提案はPython Enhancement Proposal(PEP)にて行われます。

**マイナーリリース (ex.3.9.1 -> 3.9.2)**
マイナーリリースは、以下のようなサポート期間があります。

- リリースから18ヶ月（1年半）はバグ修正を行い2ヶ月に一度のペースでマイナーリリースを行う。WindowsやMacに対するバイナリリリースもある。

- その先、42ヶ月（3年半）は必要に応じてセキュリティフィックスを行う。ソースコードリリースのみ。

- リリースから5年でサポート終了。

***

# 2. Python実行環境の準備
## For Windows
1. ブラウザから https://www.python.org/downloads/windows/ にアクセス
2. インストールしたいPythonのバージョンを選択。特になければLatestを選択
![Python Releases for Windows](https://storage.googleapis.com/zenn-user-upload/4f209d1ad8ac-20230731.png)
3. Pythonインストーラをダウンロードする
![Files](https://storage.googleapis.com/zenn-user-upload/12df6929582f-20230731.png)
4. ダウンロードしたインストーラを起動し、ウィザードの指示に従ってインストールを行う
5. インストールが完了したら、`python --version`を実行し、Pythonが正常にインストールされているか確認する。Pythonのバージョンが表示されたらOK。

```batch
>python --version
Python 3.11.3
```

***

# 3. Python仮想環境
## Python仮想環境とは
Pythonの仮想環境とは、Pythonの実行環境を分離して管理するための仕組みです。
Pythonには、標準ライブラリとして`venv`モジュールが用意されており、これを使用して簡単に仮想環境を作成することができます。

***

## 仮想環境を使用する利点
仮想環境を使用することで、プロジェクトごとに異なるバージョンのPythonやライブラリを使用することができます。また、システム全体に影響を与えることなく、モジュールの追加や入れ替えを行うことができます。

![Python仮想環境](https://storage.googleapis.com/zenn-user-upload/a00228a77404-20230802.png)

***

## 仮想環境の作成手順
仮想環境の作成は、`python -m venv [仮想環境名]`というコマンドで行うことができます。このコマンドを実行すると、指定した名前のディレクトリが作成され、その中に仮想環境が構築されます。
```batch
python -m venv .venv
```

仮想環境を使用する際は、その環境をアクティブにする必要があります。Windowsでは、`[仮想環境名]\Scripts\activate.bat`を実行することで、仮想環境をアクティブにすることができます。
```batch
.venv\Scripts\activate.bat
```

アクティブな仮想環境を終了するには、Windowsでは、`[仮想環境名]\Scripts\deactivate.bat`を実行します。
```batch
.venv\Scripts\deactivate.bat
```

***

[^1]:https://peps.python.org/pep-0020/#the-zen-of-python
[^2]:https://docs.python.org/ja/3/library/index.html
[^3]:https://peps.python.org/pep-0602/