概要
- 関数の中にif文で条件分岐する際に、Dictionaryを使う場合と使わない場合で比較をし、その違いを紹介する
目的
- PythonにおけるDictionary、関数の理解
- ヒューマンリーダブルなコードを書く意識を高める
Dictionaryとは
- キーと値をペアで管理できるデータタイプ
dict_test = {"key": "value"}
print(dict_test["key"]) # キーを指定して値へアクセスできる
# "value"
今回実装するのは自宅電話番号のバリデーション
- 市外局番が050で始まる場合は11桁のみを許容する。
- 市外局番がそれ以外で始まる場合は10桁のみを許容する。
Dictionaryを使用しないケース
base.py
# 上にはクラスの定義とpydanticのデコレータでバリデーションを記述している
# 省略↑
def home_phone_number_local_area_code_split(self):
if self.home_phone_number[0:3] == "050":
local_area_code = self.home_phone_number[3:7]
else:
local_area_code = self.home_phone_number[3:6]
return local_area_code
def home_phone_number_subscriber_number_split(self):
if self.home_phone_number[0:3] == "050":
subscriber_number = self.home_phone_number[7:11]
else:
subscriber_number = self.home_phone_number[6:10]
return subscriber_number**
receive.py
# 値を受け取るファイル
# payloadの中の該当部分↓
"home_phone_no1": base_credit.home_phone_number[0:3],
"home_phone_no2": base_credit.home_phone_number_local_area_code_split(),
"home_phone_no3": base_credit.home_phone_number_subscriber_number_split(),
- base.pyにおいて定義したクラスの中でdef関数を2つ作成する
- それぞれ050から始まるか否かで条件分岐をし、3つの分割の仕方を変化させている
- receive.pyにおいて入力を受け取るときは関数をそのまま呼び出している
Dictionaryを使った場合
base.py
# 上にはクラスの定義とpydanticのデコレータでバリデーションを記述している
# 省略↑
def parse_phone_number(phone_number):
parsed = {}
parsed["area"] = phone_number[0:3]
if parsed["area"] == "050":
parsed["local_area"] = phone_number[3:7]
parsed["subscriber"] = phone_number[7:11]
else:
parsed["local_area"] = phone_number[3:6]
parsed["subscriber"] = phone_number[6:10]
return parsed
receive.py
# 値を受け取るファイル
# payloadの中の該当部分
phone_number = base.parse_phone_number
"home_phone_no1": phone_number["area"],
"home_phone_no2": phone_number["local_area"],
"home_phone_no3": phone_number["subscriber"],
- base.pyにおいてDictionaryを用いて条件分岐をさせている
- こうすることで1つの関数ですむ
- また、受け取る際にも具体的な変数名を指定して値を取ってこれるので非常に明示的であり、受け取るフィールド(ここでは"home_phone_no1"など)との対応関係が意味合い的に確認できる
結論
- Dictionaryはヒューマンリーダブルなコードを書く際に必要不可欠なもの
- ぜひ、応用して美しいコードを書いていこうぜ!!!
参考
- 参考にした記事はありません