# A value if you don't provide one
# default parameters — fallback values for optional arguments

# ─────────────────────────────────────────────
# Your first default parameter
# ─────────────────────────────────────────────

def greet(name="stranger"):
    print(f"Hello, {name}.")

greet("Bull")     # Hello, Bull.
greet()           # Hello, stranger.

# pass a name — uses yours
# pass nothing — falls back to "stranger"

# ─────────────────────────────────────────────
# Multiple parameters — some with defaults
# ─────────────────────────────────────────────

def banner(title, char="="):
    border = char * len(title)
    print(border)
    print(title)
    print(border)

banner("RedHorn")          # uses = by default
banner("RedHorn", "*")     # uses * instead

# =======
# RedHorn
# =======
# *******
# RedHorn
# *******

# ─────────────────────────────────────────────
# Default parameters must come last
# ─────────────────────────────────────────────

# Wrong — SyntaxError
# def greet(name="stranger", role):
#     print(f"{name} — {role}")

# Right — defaults always after required parameters
def greet(name, role="developer"):
    print(f"{name} — {role}")

greet("Bull")               # Bull — developer
greet("Horn", "student")    # Horn — student

# ─────────────────────────────────────────────
# Quick reference
# ─────────────────────────────────────────────

# def function_name(required, optional="default"):
#
# pass argument    — overrides the default
# don't pass       — default is used
# defaults always after required parameters — always
