【Python3】他言語エンジニアのためのPythonチートシート《基礎編》

# はじめに
Python以外のプログラミング言語を習得しているエンジニア向けのチートシートです。
最低限必要なことをまとめています。

これを見れば、Pythonの簡単なコードの読み書きができるはず！

※随時更新していきます。

## コメント
```python
# コメント
```
- 「#」から行末までがコメント

## 変数と定数
```python
hoge = "変数"        # 変数
FUGA = "定数"        # 定数(※)
```
- 変数名は「文字」「数字」「アンダースコア記号」のいずれかで構成する必要がある
- 1文字目に「数字」は使用できない

※ Pythonでは言語仕様として定数がサポートされていないため、慣習として英大文字のみで構成した変数を定数としている。

## データ型
```python
type("ほげ")        # <class 'str'>       文字列
type(123)           # <class 'int'>       整数
type(12.3)          # <class 'float'>     浮動小数点数
type(True)          # <class 'bool'>      真偽値
type(None)          # <class 'NoneType'>  None
```

## 演算子
### 算術演算子
```python
1 + 2        # 3      加算
2 - 1        # 1      減算
2 * 3        # 6      乗算
7 / 2        # 3.5    除算
7 % 2        # 1      剰余
7 // 2       # 3      除算(切り捨て)
2 ** 3       # 8      累乗
```

### 比較演算子
```python
10 > 1        # True     より大きい
10 < 1        # False    より小さい
5 >= 5        # True     以上
5 <= 5        # True     以下
3 == 3        # True     等価
3 != 3        # False    不等価
```
Pythonには、所謂「暗黙の型変換」が存在しないため、`1 == "1"`は`False`になる。

### 論理演算子
```python
True and True        # True     かつ
True or False        # True     または
not True             # False    否定
```

## 文
```python
# 単純文
print("Hello World!")

# >> Hello World!

# 複合文
for i in range(10):            # ヘッダー
    print("Hello ", end="")    # スイート
    print("World!")            # スイート

# >> Hello World!
```
- 単純文は1行のコード
- 複合文は1つ以上の「節」で構成される
    - 1つの「節」は「1行のヘッダー」と「1行以上のスイート」で構成される
    - 「ヘッダー」はキーワードを含む1行のコード
    - 「ヘッダー」の行末には「:(コロン)」を置く
    - 「スイート」は「ヘッダー」に続く、インデントされた1行以上のコード
    - コードブロックはインデントを揃えることで表す

## 条件文
```python
hoge = "ほげ"

if hoge == "ほげ":
    print("「ほげ」です")
elif hoge == "ふが":
    print("「ふが」です")
else:
    print("「ほげ」でも「ふが」でもないです")

# >> 「ほげ」です
```

## 関数
```python
def hello_say(lang):
    print("Hello " + lang)

print(hello_say("Python"))
# >> Hello Python
# >> None
```
- 慣習として、関数名は英小文字のみのスネークケース
- 関数にreturnが無い場合、その関数はNoneを返す
- 関数の巻き上げ（ホイスティング）は無いので、関数呼び出しの前に関数定義が必要

### キーワード引数
```python
def func_keyword(lang, ver):
    print(lang + ver)

func_keyword(ver = "3", lang = "Python")
# >> Python3
```
- 関数呼び出し時に対応する仮引数の名前を指定すれば、関数定義の引数の順序は自由

### オプション引数
```python
def func_exec(arg, opt_arg = "ふが"):
    print("「" + arg + "」は必須引数です")
    print("「" + opt_arg + "」はオプション引数です")
    return "実行完了"

result = func_exec("ほげ")     
print(result)                  

# >> 「ほげ」は必須引数です
# >> 「ふが」はオプション引数です
# >> 実行完了
```
- 引数にデフォルト値を設定すると、その引数はオプション引数となる
- オプション引数の後に、必須引数を定義することはきない

### 可変長引数（タプル）
```python
def func_args(*args):
    for arg in args:
        print(arg)
    return "実行完了"

print(func_args("ほげ", "ふが"))

# >> ほげ
# >> ふが
# >> 実行完了
```
- 関数定義の仮引数の先頭に「*」を付けると、実引数をタプルとして受け取ることが出来る

### 可変長引数（辞書）
```python
def func_kwargs(**kwargs):
    for key in kwargs:
        print(kwargs[key])

func_kwargs({"lang": "Python"})
# >> Python
```
- 関数定義の仮引数の先頭に「**」を付けると、実引数を辞書として受け取ることが出来る

## スコープ
```python
hoge = "グローバル"          # グローバル変数

def func_exec():
    global hoge
    hoge = "ぐろーばる"

    fuga = "ローカル"        # ローカル変数
    print(fuga)

func_exec()
# >> ローカル

print(hoge)
# >> ぐろーばる
```
||定義位置|アクセス|スコープ|
|:--|:--|:--|:--|
|グローバル変数|関数やクラスの外部|プログラムのどこからでも読み書き可|グローバルスコープ|
|ローカル変数|関数やクラスの内部|定義された関数やクラス内でのみ読み書き可|ローカルスコープ|
- ローカルスコープの中からグローバル変数の値を変更する場合は、「global」キーワードを使用する

## コンテナ
```python
# リスト
my_list = list()
my_list = []
my_list = ["Apple", "Orange", "Grape"]

print(my_list[1])
# >> Orange

# タプル
my_tuple = tuple()
my_tuple = ()
my_tuple = ("first", "second", "third")

print(my_tuple[0])
# >> first

# 辞書
my_dict = dict()
my_dict = {}
my_dict = {"Apple": "Red", "Banana": "Yellow"}

print(my_dict["Apple"])
# >> Red
```
||イテラブル(繰り返し可能)|ミュータブル(変更可能)|
|:--|:-:|:-:|
|リスト|○|○|
|タプル|○|×(イミュータブル)|
|辞書|△(順序は保証されない)|○|
- リスト、タプルのインデックスは「0」から始まる
- コンテナの中にコンテナを格納可能

## ループ
```python
for i in range(3):        # inの後にイテラブルなオブジェクト
    print(i)

# >> 0
# >> 1
# >> 2

i = 0

while i < 5:
    i += 1
    if i == 2:
        continue
    elif i == 4:
        break
    print(i)

# >> 1
# >> 3
```

## 例外処理
```python
try:
    print(2 / 0)
except ZeroDivisionError:
    print("0除算が発生したよ")
except:
    print("よく分からないエラーだよ")

# >> 0除算が発生したよ
```
tryブロック内で例外が発生すると、例外の種類に応じたexceptブロックが実行される。

---
オブジェクト指向編も書きました！
[【Python3】他言語エンジニアのためのPythonチートシート《オブジェクト指向編》](https://qiita.com/hrgm_cmk/items/5f27d48856672a9fc1d7)