0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Zen Of Python 和訳と例示

Last updated at Posted at 2024-12-23

概要

改善されたPythonコーディングルール

  1. 美しさ優先: 醜さよりも美しいコードを追求します。 (美しさ>醜さ)

  2. 明示性優先: 暗黙的なものよりも明示的なコードを記述します。 (明示的>暗黙的)

  3. シンプルさの追求:複雑さよりもシンプルさを追求します。 (単純>複雑)

  4. 簡潔さ維持:複雑なコードよりも簡潔なコードを維持します。 (簡潔>複雑)

  5. 平面構造: 入れ子構造よりも平面的な構造を好みます。 (平面 > 入れ子)

  6. 希少性維持: 密なコードよりも希少なコードを維持します。 (希少>密)

  7. 可読性優先: コードの読みやすさを最優先事項として考えます。 (可読性の重要)

  8. 実用性優先:純粋さよりも実用性を優先します。 (実用 > 純粋)

  9. 例外処理: エラーは明確に処理し、意図的に沈黙させない限り無視しません。 (エラークリア処理、サイレントX)

  10. 曖昧さ回避:あいまいな状況から推測せず、明確な解決策を探します。 (曖昧さ回避、明確な解決)

  11. 単一方法: 問題を解決する明確で単一の方法を追求します。 (単一方法を追求)

  12. ネームスペースの活用: ネームスペースを積極的に活用してコードのモジュール性を高めます。(名前空間積極活用)

  13. 良いコードの基準: 実装を説明しやすい場合は、良いコードである可能性が高いです。 (説明しやすいコード)

  14. 例外は慎重に: 特別な場合が規則を破るほど特別であるか慎重に判断します。

詳細

  1. 美しさ優先:
# 醜いコード(読みやすくなる)
def calculate_area(x, y, z): return x*y if z == 1 else x*y*z

# 美しいコード(可読性が高い)
def calculate_area(length, width, height_or_one=1):
  if height_or_one == 1:
    return length * width
  else:
    return length * width * height_or_one
  1. 明示性優先:
# 暗黙のコード(意味が明確ではありません)
def process(data):
  if data:
    return data * 2
  return 0

# 明示的なコード(意味が明確です)
def double_positive_number(number):
  if isinstance(number, int) and number > 0:
    return number * 2
  return 0
  1. シンプルさの追求:
# 複雑なロジック(不要な条件文のネスト)
def check_number(value):
  if isinstance(value, int):
    if value > 0:
      if value % 2 == 0:
        return "正と偶数です。"
      else:
        return "正と奇数です。"
    else:
      return "正の数ではありません。"
  else:
    return "数値ではありません。"

# 単純なロジック(単一条件文として処理)
def check_number_simple(number):
  if not isinstance(number, int):
    return "数値ではありません。"

  if number <= 0:
    return "正の数ではありません。"

  return "正と偶数です。" if number %2 == 0 else "正で奇数です。"
  1. 簡潔さの維持:
# 複雑なコード(長い関数)
def process_data(data):
  result=[]
  for item in data:
    if item > 0:
      new_item=item*2
    result.append(new_item)
  return result

# 簡潔なコード(関数の分離とリストの実装)
def double_positive(item):
  return item*2

def process_data_simple(data):
  return [double_positive(item) for item in data if item > 0]
  1. 平面構造:
# 入れ子になった構造(辞書内の辞書)
nested_dict = {
  'level1': {
    'level2': {
      'level3': 'value'
    }
  }
}

# フラット構造
flat_dict = {
  'level1.level2.level3': 'value'
}
  1. 希少性維持:
# 密集したコード
a=1; b=2; c=3; print(a,b,c)

# 希少なコード
a = 1
b = 2
c = 3
print(a, b, c)
  1. 可読性優先:
# 読みやすさの低いコード
def f(x,y): return x * y + x - y

# 読みやすいコード
def calculate_result(first_number, second_number):
  product = first_number * second_number
  result = product + first_number - second_number
  return result
  1. 実用性優先:
# 純粋さを追求したコード
def pure_function(x):
  return x + 2

# 実用性を追求したコード(必要に応じて副作用を含む)
counter = 0
def increment_counter_and_get(x):
  # グローバルカウンター
  counter += 1
  print('counter value', counter) # 副作用 (print)
  return x + 2
  1. 例外処理:
def divide(a, b):
  try:
    if b == 0:
      raise ValueError("0 で除算できません。")
      return a/b
  except ValueError as e:
    print("エラー発生:", e) # エラーログ
  return None # エラー状況の適切な値を返す
  1. 曖昧さ回避:
# あいまいなコード(意味が不明)
def process_input(input):
  if input:
    return input * 2
  return False

# 明確なコード(タイプと条件の明確さ)
def double_number_or_return_false(input_value):
  if isinstance(input_value, int):
    return input_value * 2
  return False
  1. 単一方法:
# 問題を解決するいくつかの方法(混乱の原因)
def sum_numbers_1(numbers):
  total=0
  for number in numbers:
    total += number
  return total

def sum_numbers_2(numbers):
  return sum(numbers)

# シングルメソッド(sum関数を使用)
def sum_numbers(numbers):
  return sum(numbers)
  1. 名前空間の活用:
# 名前空間なしでグローバルスコープ汚染
utility1={
  'add': lambda a, b: a + b
}

utility2 = {
  'add': lambda a, b: a + b
}

# 名前空間を活用してモジュール化
class MathUtils:
  @staticmethod
  def add(a, b):
    return a + b

  @staticmethod
  def subtract(a, b):
    return a - b

class StringUtils:
  @staticmethod
  def capitalize(text):
    return text[0].upper() + text[1:]

  @staticmethod
  def reverse(text):
    return text[::-1]
  1. 良いコードの基準:
# 説明が難しいコード(複雑なロジック)
def some_function(a, b, c, d):
  result = 0
  if a > 0:
    if b > 0:
      if c > 0:
        result = a + b + c + d
  return result

# 説明しやすいコード
def calculate_sum_of_positive_numbers(a, b, c, d):
  if a <= 0 or b <= 0 or c <= 0:
    return 0
  return a+b+c+d
  1. 例外は慎重に:
# 一般的な規則に従うコード
def common_logic(number):
  return number * 2

# 特別な場合にルールを破るコード (注意が必要)
def special_logic(number):
  if number == 0:
    return 0 # 0の特別な処理
  return number / 2

# 特別なケースを分離して処理
def process_number(number):
  if number == 0:
    return 0 # 例外処理
  return common_logic(number)
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?