Pythonのステップアップをしたい人に贈る便利テクニック(適時更新)

## 概要

仕事でPythonを使用してLambda開発を行っています。
その中で自分で使っていたり、チームメンバーに教えているテクニックを記載しました。
ただ、テクニック1つだけで1記事かけてしまうくらい奥が深いものなのでここでは簡単な使い方のみ記載しています。
もっと詳しく知りたい！と思った人のために、[Python (テクニック名)]で検索すると詳細な情報が見れるような名前になっています。

また、私の主観ではありますが[便利度・難易度]を振りました。星が多くなるほど便利・難しくなります。

### 対象者

- Pythonの基本を一通り勉強した人
- もっとPythonのことを詳しく知りたい人

## 三連引用符

### 評価

便利度：☆
難易度：☆

### 概要

複数行の文字列を使用したい時(SQL文の記述など)に使用しています。

### 使用例

```python:三連引用符
mojis = """
書き方はダブルクォーテーションで
文章を囲めばOKです。
"""
print(mojis)

# => 書き方はダブルクォーテーションで
# => 文章を囲めばOKです。

mojis = """\
改行もそのまま反映されるため、先頭行の改行を消したい場合は
バックスラッシュを使用すると消えます。
"""
print(mojis)
# => 改行もそのまま反映されるため、先頭行の改行を消したい場合は
# => バックスラッシュを使用すると消えます。

mojis_f = f"""
後述するフォーマット済み文字列リテラルにも応用が利きます。
mojis:{mojis}
"""

print(mojis_f)

# => 後述するフォーマット済み文字列リテラルにも応用が利きます。
# => mojis:改行もそのまま反映されるため、先頭行の改行を消したい場合は
# => バックスラッシュを使用すると消えます。
```




## フォーマット済み文字列リテラル

### 評価

便利度：☆☆☆☆☆
難易度：☆

### 概要

変数を文字列の中に埋め込むことができます。+でつなげたり、format関数を使用する必要がなくなります。
簡単で使い勝手が良く、必ず覚えておくべき書き方です。ただし、使用できるのはPython3.6以降です。

公式：https://docs.python.org/ja/3/reference/lexical_analysis.html#f-strings

### 使用例
```python:
name = "田中"

# 文字列の前にfを記述します。
message = f"あなたの名前は{name}です。"
print(message)
# => あなたの名前は田中です。
```

## アンパック

### 評価

便利度：☆☆
難易度：☆☆

### 概要

非常に説明しづらいです。リストやタプルで使用できます。私はそれぞれの要素を分割できるイメージで使用しています。

公式：https://docs.python.org/ja/3/tutorial/controlflow.html#tut-unpacking-arguments

### 使用例
```python:
x, y, z = (1, 2, 3)
print(x)
print(y)
print(z)
# => 1
# => 2
# => 3
```

## 可変長引数

### 評価

便利度：☆☆
難易度：☆☆☆☆

### 概要

引数を無限大にしてくれます。便利は便利ですが、使いすぎるとバグを生みやすくなってしまうので使いどころに悩みます。
私はテストでモック関数を作成するときによく使っています。ただ、以外で使用したことはありません。
また、可変長引数は2種類あります。

- タプルで受け取る方法。
-  辞書型として受け取る方法。

引数の名前には慣例があり、タプルの方は`args`、辞書型の方は`kwargs`が使用されることが多いです。
こちらはどちらか一方ではなく、両方同時に使用することが可能です。

### 使用例
```python:
def hoge(*args):
  # 関数の引数に*をつけると可変長引数となります。
  print(args)

hoge("Aさん", "Bさん", "Cさん")
# => ('Aさん', 'Bさん', 'Cさん')


def fuga(**kwargs):
  # *を二つ繋げると可変長引数となります。
  # kwargsはkey word argumentの意味だと思います。
  print(kwargs)

fuga(A=1000, B=2000, C= 3000)
# => {'A': 1000, 'B': 2000, 'C': 3000}


def hogefuga(*args, **kwargs):
  # 組み合わせ可能です
  print(args)
  print(kwargs)

hogefuga(1, 2, 3, 4, A='a', B='b', C='c')
# => (1, 2, 3, 4)
# => {'A': 'a', 'B': 'b', 'C': 'c'}
```

## キーワード引数の強制

### 評価

便利度：☆
難易度：☆☆☆☆

### 概要

デフォルト値の無いキーワード引数を使用する際に使います。正直どのように活用していいのかわかりません。ただ、知っておくことも大事なのでとりあえず知識として蓄えています。

### 使用例
```python:
def hoge(a, b, *, c, d):
  # アスタリスクを一つ引数に加えると、以降の引数はキーワード引数扱いとなる
  print(a, b, c, d)

hoge(1, 2, c='c', d='d')
# => 1 2 c d

# 引数を指定しない場合はTypeError
hoge(1, 2)
# => Traceback (most recent call last):
# =>   File "<stdin>", line 1, in <module>
# => TypeError: hoge() missing 2 required keyword-only arguments: 'c' and 'd'
# cとdのキーワード引数は必須です。的なエラーですね。
```

<!-- 
## 引数の展開

### 評価

便利度：☆☆
難易度：☆

### 概要


### 使用例
```python:

```

## リスト定義のアスタリスク

### 評価

便利度：☆
難易度：☆

### 概要


### 使用例
```python:

```

## 命名規約

### 評価

便利度：☆
難易度：☆

### 概要


### 使用例
```python:

```

## pydoc

### 評価

便利度：☆
難易度：☆

### 概要


### 使用例
```python:

```

## items()

### 評価

便利度：☆
難易度：☆

### 概要


### 使用例
```python:

```

## enu

### 評価

便利度：☆
難易度：☆

### 概要


### 使用例
```python:

```

## True・Falseの定義

### 評価

便利度：☆
難易度：☆

### 概要


### 使用例
```python:

```

## join()

### 評価

便利度：☆
難易度：☆

### 概要


### 使用例
```python:

```
-->