초보자라도 읽을 수 있는 Python 함수를 작성하는 방법

초보자라도 읽을 수 있는 Python 함수를 작성하는 방법

초보자라도 읽을 수 있는 Python 함수를 작성하는 방법초보자라도 읽을 수 있는 Python 함수를 작성하는 방법
작성자별 이미지

# 소개

당신은 당신의 첫 번째 글을 썼습니다 파이썬 기능. 작동합니다. 실행해 보면 올바른 결과가 나오며, 성취감이 쇄도하는 것을 느낄 수 있습니다. 그러다가 2주 후에 다시 보면 “이게 무슨 역할을 하는 거지?”라고 생각하게 됩니다.

읽을 수 있는 Python 함수를 작성하는 것은 똑똑하거나 고급스러워지기 위한 것이 아닙니다. 의도를 명확하게 전달하고 책임을 깔끔하게 처리하며 다음 사람의 작업을 더 쉽게 만드는 기능을 작성하는 것입니다.

독자들이 머리를 감싸기 어려운 난해한 퍼즐이 아닌, 좋은 산문처럼 읽히는 함수를 작성하는 방법을 배우자.

🔗 GitHub에서 코드를 찾을 수 있습니다..

# 1. 친구에게 설명하는 것처럼 기능 이름을 지정하세요.

함수 이름은 사람들이 가장 먼저 읽는 것입니다. 좋은 이름은 내부 코드를 읽지 않고도 함수가 수행하는 작업을 정확하게 알려줍니다.

나쁜 예:

def proc(d):
    return sum(d) / len(d)

좋은 예:

def calculate_average(numbers):
    return sum(numbers) / len(numbers)

함수 이름 calculate_average 동작을 수행함을 알려주는 동사(“계산”)와 계산한 내용(“평균”)을 사용합니다. 매개변수 숫자는 숫자 값 모음이 필요함을 명확하게 나타냅니다.

함수 본문이 사용하는 것 sum(numbers) 모든 값을 추가하고 len(numbers) 개수를 세고 나누어서 평균을 구합니다. 이 코드를 읽는 사람은 주석이나 문서 없이도 코드가 수행하는 작업을 즉시 이해할 수 있습니다.

# 2. 설명이 포함된 매개변수 이름을 사용하세요.

단일 문자 변수는 입력을 절약할 수 있지만 이해하는 데 비용이 듭니다. 매개변수는 함수의 입력이므로 기대하는 바를 명확하게 설명하세요.

나쁜 예:

def discount(p, r):
    return p * (1 - r)

좋은 예:

def apply_discount(original_price, discount_rate):
    return original_price * (1 - discount_rate)

이제 누구든지 읽으세요 apply_discount(100, 0.2) 100에서 20% 할인을 받는다는 것을 알고 있습니다. 코드는 자체 문서화되어 있습니다. 전달할 인수를 이해하기 위해 함수 정의를 확인할 필요가 없습니다.

# 3. 기능을 짧고 집중적으로 유지하세요

함수는 한 가지 일을 잘 수행해야 합니다. 함수에 여러 가지 책임이 있는 경우 테스트, 재사용 및 이해가 어려워집니다. 따라서 복잡한 논리를 더 작고 집중된 기능으로 나누십시오.

나쁜 예:

def process_order(items, customer_email, discount_code):
    # Calculate total

    subtotal = sum(item["price"] * item["quantity"] for item in items)

    # Apply discount

    if discount_code == "SAVE10":
        discount = 0.10
    elif discount_code == "SAVE20":
        discount = 0.20
    else:
        discount = 0
    total = subtotal * (1 - discount)

    # Send email

    subject = f"Order Confirmation"
    body = f"Your order total is ${total:.2f}"
    send_email(customer_email, subject, body)

    return total

좋은 예:

def calculate_order_subtotal(items):
    return sum(item["price"] * item["quantity"] for item in items)


def get_discount_rate(discount_code):
    discount_rates = {"SAVE10": 0.10, "SAVE20": 0.20}
    return discount_rates.get(discount_code, 0)


def apply_discount_to_subtotal(subtotal, discount_rate):
    return subtotal * (1 - discount_rate)


def send_order_confirmation_email(customer_email, total):
    subject = "Order Confirmation"
    body = f"Your order total is ${total:.2f}"
    send_email(customer_email, subject, body)


def process_order(items, customer_email, discount_code):
    subtotal = calculate_order_subtotal(items)
    discount_rate = get_discount_rate(discount_code)
    total = apply_discount_to_subtotal(subtotal, discount_rate)
    send_order_confirmation_email(customer_email, total)
    return total

이제 각 기능에는 하나의 명확한 목적이 있습니다. 주요 process_order 함수는 레시피처럼 읽습니다. 소계 계산, 할인 받기, 적용하기, 이메일 보내기, 총액 반환하기 등이 있습니다.

# 4. 목적을 설명하기 위해 Docstring을 추가하십시오.

함수 이름은 함수가 수행하는 작업을 알려주지만, 독스트링은 그것이 존재하는 이유, 기대하는 것, 반환하는 것을 설명합니다.. 이는 복잡한 논리나 명확하지 않은 동작에 특히 유용합니다.

좋은 예:

def calculate_shipping_cost(weight_kg, distance_km, is_express=False):
    """
    Calculate shipping cost based on package weight and distance.

    Args:
        weight_kg (float): Package weight in kilograms
        distance_km (float): Shipping distance in kilometers
        is_express (bool): Whether to use express shipping (default: False)

    Returns:
        float: Total shipping cost in dollars

    Example:
        >>> calculate_shipping_cost(5.0, 100, is_express=True)
        45.50
    """
    base_rate = 2.50
    per_kg_rate = 1.20
    per_km_rate = 0.15
    express_multiplier = 2.0 if is_express else 1.0

    cost = (
        base_rate + (weight_kg * per_kg_rate) + (distance_km * per_km_rate)
    ) * express_multiplier
    return round(cost, 2)

독스트링은 각 매개변수의 의미, 매개변수의 유형, 함수가 반환하는 내용을 설명합니다. 이 함수를 사용하는 사람은 구현을 읽지 않고도 함수를 호출하는 방법을 정확히 알 수 있습니다.

# 5. 함수 내부에서 명확한 변수 이름 사용

매개변수와 마찬가지로 내부 변수도 설명적이어야 합니다. 사람들이 약어를 해독하거나 무엇을 추측하게 만들지 마세요. tmp 또는 x 나타냅니다.

나쁜 예:

def calc_bmi(w, h):
    h_m = h / 100
    res = w / (h_m**2)
    return round(res, 1)

좋은 예:

def calculate_bmi(weight_kg, height_cm):
    height_meters = height_cm / 100
    bmi = weight_kg / (height_meters**2)
    return round(bmi, 1)

변수 height_meters 정확히 어떤 전환이 일어났는지 알려줍니다. 그리고 보시다시피 변수는 bmi 체질량지수(BMI) 계산을 보유하고 있습니다.

# 6. 매직 넘버를 피하세요. 대신 명명된 상수를 사용하세요

코드 전체에 흩어져 있는 숫자는 “마법”입니다. 즉, 그 목적이 불분명하다는 의미입니다. 독자들이 그 의미를 이해할 수 있도록 의미 있는 이름을 지정하십시오.

나쁜 예:

def calculate_late_fee(days_overdue):
    if days_overdue 

좋은 예:

def calculate_late_fee(days_overdue):
    DAILY_FEE_FIRST_WEEK = 2
    GRACE_PERIOD_DAYS = 7
    BASE_FEE_AFTER_GRACE = 14
    DAILY_FEE_AFTER_GRACE = 5

    if days_overdue 

이제 수수료 구조가 명확해졌습니다. 상수는 비즈니스 규칙을 문서화합니다. 요금이 변경되면 알 수 없는 숫자를 검색하는 대신 명확하게 명명된 값 하나를 업데이트합니다.

# 7. 명확성을 위해 유형 힌트를 사용하세요

유형 힌트는 독자에게 알려줍니다. 함수가 기대하고 반환하는 유형. 이는 혼란을 방지하고 버그를 조기에 잡아냅니다. 함수에 유형 힌트를 추가하는 것이 좋습니다.

좋은 예:

def format_user_greeting(user_name: str, age: int, is_member: bool = False) -> str:
    membership_status = "member" if is_member else "guest"
    return f"Hello {user_name}, age {age}. You are a {membership_status}."

유형 힌트를 보면 다음과 같이 명확해집니다. user_name 문자열입니다. age 는 정수이고, is_member 기본값은 부울입니다. False함수는 문자열을 반환합니다. 통합 개발 환경(IDE)은 이 정보를 사용하여 더 나은 자동 완성 및 오류 검사를 제공할 수 있습니다.

# 결론

읽기 가능한 함수는 작성하기 어렵지 않습니다. 단지 사용자에 대해 생각하면 됩니다. 이름, 구조, 설명 등 모든 선택은 이해를 돕거나 방해합니다.

목표는 완벽한 코드가 아닙니다. 명확하게 전달되는 코드입니다. 다음 사람이 “이게 진짜 뭐하는 거지?” 대신 “아, 알겠습니다”라고 말하게 만드는 코드입니다. 이는 읽을 수 있는 코드이므로 첫날부터 작성할 수 있습니다.

다음 기사에서는 깔끔한 Python 클래스를 작성하는 방법을 배우겠습니다. 그때까지 계속 코딩하세요!

발라 프리야 C 인도 출신의 개발자이자 기술 작가입니다. 그녀는 수학, 프로그래밍, 데이터 과학, 콘텐츠 제작의 교차점에서 일하는 것을 좋아합니다. 그녀의 관심 분야와 전문 분야에는 DevOps, 데이터 과학, 자연어 처리가 포함됩니다. 그녀는 읽기, 쓰기, 코딩, 커피를 즐깁니다! 현재 그녀는 튜토리얼, 방법 가이드, 의견 등을 작성하여 개발자 커뮤니티에서 자신의 지식을 학습하고 공유하는 데 힘쓰고 있습니다. Bala는 또한 매력적인 리소스 개요와 코딩 튜토리얼을 만듭니다.

출처 참조

Post Comment

당신은 놓쳤을 수도 있습니다