ఫంక్షన్స్ ఫండమెంటల్స్ & ఆర్గ్యుమెంట్స్

🌐 Modern Python 3.12+ 📖 Chapter 16 of 25 📁 Phase 04: ఫంక్షన్స్, మాడ్యూల్స్ & ఫైల్ I/O 🗓️ 2026 Edition
📌 Covered in this chapter: def కీవర్డ్ · పారామీటర్లు vs ఆర్గ్యుమెంట్స్ · return స్టేట్‌మెంట్ & మల్టిపుల్ రిటర్న్స్ · Positional vs Keyword Arguments · Default Parameters · Type Hints · Call Stack & Activation Frames · return Statements & Early Exits · Positional vs Keyword Arguments · The Infamous Mutable Default Parameter Trap · Modern Python 3.8+ Positional-Only (/) & Keyword-Only (*) · Type Annotations (PEP 484) · Enterprise Payroll Engine Project
మీరు రాసే పైథాన్ స్క్రిప్ట్ వందల లైన్ల నుండి వేల లైన్లకు పెరిగినప్పుడు, ఒకే లాజిక్‌ను పదే పదే కాపీ-పేస్ట్ చేయడం కోడ్‌ను అస్తవ్యస్తంగా మారుస్తుంది. ఏదైనా ఒక చిన్న ఫార్ములా మారినా సరే, స్క్రిప్ట్ మొత్తం వెతికి డజన్ల కొద్దీ చోట్ల మాన్యువల్‌గా మార్చాల్సి వస్తుంది. సాఫ్ట్‌వేర్ ఇంజనీరింగ్‌లో ఈ సమస్యను అధిగమించడానికి ఉన్న అత్యున్నత సూత్రం — DRY (Don't Repeat Yourself)!

ఈ DRY సిద్ధాంతానికి అసలైన ప్రాణం పోసేది ఫంక్షన్స్ (Functions). ఒక పెద్ద సంక్లిష్టమైన సమస్యను చిన్న చిన్న స్వతంత్ర భాగాలుగా విభజించి, ఒకే కోడ్‌ను ఎన్ని వేల సార్లైనా నిశ్చింతగా పునర్వినియోగించుకునే అద్భుతమైన సామర్థ్యం ఫంక్షన్ల సొంతం. పైథాన్‌లో ఫంక్షన్స్ కేవలం స్టేట్‌మెంట్ల సమూహం మాత్రమే కాదు — అవి First-Class Citizens! అంటే వేరియబుల్స్ లాగే ఫంక్షన్లను ఇతర ఫంక్షన్లకు పాస్ చేయవచ్చు, వేరియబుల్స్‌లో స్టోర్ చేయవచ్చు. ఈ అధ్యాయంలో మనం def సింటాక్స్ నుండి కాల్ స్టాక్ ఫ్రేమ్‌ల అంతర్గత పనితీరు, ప్రమాదకరమైన మ్యూటబుల్ డిఫాల్ట్ బగ్, పైథాన్ 3.8+ పొజిషనల్-ఓన్లీ సింటాక్స్, మరియు కార్పొరేట్ ఉద్యోగుల జీతాలను లెక్కించే పూర్తి స్థాయి ఎంటర్‌ప్రైజ్ పేరోల్ ఇంజిన్ వరకు సమగ్రంగా నేర్చుకుందాం!

1 ఫంక్షన్ అంటే ఏమిటి? (What is a Function in Python?)

పైథాన్‌లో ఫంక్షన్ (Function) అనేది ఒక నిర్దిష్టమైన పనిని (Specific Task) పూర్తి చేయడానికి రూపొందించబడిన, పేరు పెట్టబడిన కోడ్ బ్లాక్. అవసరమైనప్పుడు దానికి డేటాను ఇన్‌పుట్‌గా పంపవచ్చు, అది ఆ డేటాను ప్రాసెస్ చేసి మనకు కావలసిన ఫలితాన్ని (Output) తిరిగి అందిస్తుంది.

ఫంక్షన్ల ప్రధాన ప్రయోజనాలు:

2 CPython లో ఫంక్షన్ ఎలా పనిచేస్తుంది? (Call Stack & Frames)

మీరు ఒక ఫంక్షన్‌ను కాల్ చేసినప్పుడు CPython అంతర్గతంగా ఆపరేటింగ్ సిస్టమ్ మెమరీలో కాల్ స్టాక్ (Call Stack) పై ఒక ప్రత్యేకమైన స్టాక్ ఫ్రేమ్ (Stack Frame / Activation Record) ను సృష్టిస్తుంది.

[CPython Call Stack Frame Flow]
main_script() ──▶ Calls calculate_tax(salary=75000)
    │
    ▼ PUSH Frame onto Call Stack
    ┌─────────────────────────────────────────────────────────┐
    │ Frame: calculate_tax() │
    │ Local Variables: { salary: 75000, rate: 0.10, tax: 7500 }│
    │ Return Value: 7500 │
    └─────────────────────────────────────────────────────────┘
    │
    ▼ POP Frame from Call Stack (Memory Freed!)
main_script() ◀── Receives 7500 and Continues! ⚡

3 ఫంక్షన్ డిక్లరేషన్ & సింటాక్స్ (The def Keyword)

పైథాన్‌లో ఫంక్షన్‌ను డిక్లేర్ చేయడానికి def (define కు సంక్షిప్త రూపం) కీవర్డ్‌ను ఉపయోగిస్తాము.

ప్రాథమిక సింటాక్స్:

def function_name(parameter_1, parameter_2):
    """ఐచ్ఛికమైన డాక్యుమెంటేషన్ స్ట్రింగ్ (Docstring)"""
    # ఫంక్షన్ బాడీ (4-స్పేస్ ఇండెంటేషన్ తప్పనిసరి)
    return result

ముఖ్యమైన నియమాలు: ఫంక్షన్ పేరు తప్పనిసరిగా వేరియబుల్ నామకరణ నియమాలను పాటించాలి (చిన్న అక్షరాలు, పదాల మధ్య అండర్‌స్కోర్ — snake_case). పారాంథసిస్ () చివర కాలన్ : ఉండటం తప్పనిసరి.

4 పారామీటర్లు (Parameters) vs ఆర్గ్యుమెంట్స్ (Arguments)

ఈ రెండు పదాలను బిగినర్స్ తరచూ ఒకే అర్థంలో వాడుతుంటారు, కానీ వాటి మధ్య చాలా స్పష్టమైన సాంకేతిక వ్యత్యాసం ఉంది:

1. పారామీటర్లు (Parameters)

ఫంక్షన్‌ను డిఫైన్ (నిర్వచించేటప్పుడు) బ్రాకెట్లలో రాసే ప్లేస్‌హోల్డర్ వేరియబుల్స్.

def greet(user_name): # user_name is Parameter
    print(f"హలో, {user_name}!")

2. ఆర్గ్యుమెంట్స్ (Arguments)

ఫంక్షన్‌ను కాల్ (పిలిచేటప్పుడు) వాస్తవంగా లోపలికి పంపే అసలైన విలువలు లేదా డేటా.

greet("కళ్యాణ్") # "కళ్యాణ్" is Argument

5 return స్టేట్‌మెంట్ & ఎర్లీ ఎగ్జిట్ (Early Return Guard Clauses)

ఫంక్షన్ తన లెక్కింపు పూర్తయిన తర్వాత ఫలితాన్ని పిలిచిన చోటుకి తిరిగి పంపడానికి return స్టేట్‌మెంట్‌ను ఉపయోగిస్తుంది.

6 మల్టిపుల్ రిటర్న్స్ (Multiple Returns via Tuples)

C లేదా Java వంటి భాషల్లో ఒక ఫంక్షన్ కేవలం ఒకే ఒక విలువను మాత్రమే రిటర్న్ చేయగలదు. కానీ పైథాన్‌లో కామాలతో వేరుచేసి ఎన్ని విలువలనైనా ఒకేసారి రిటర్న్ చేయవచ్చు!

తెరవెనుక పైథాన్ వాటన్నింటినీ ఒక ఇమ్మ్యుటబుల్ టుపుల్ (Tuple) గా ప్యాక్ చేసి రిటర్న్ చేస్తుంది. కాలర్ సైడ్ వాటిని నేరుగా అన్‌ప్యాక్ చేసుకోవచ్చు:

def calculate_min_max(numbers):
    return min(numbers), max(numbers), sum(numbers) # టుపుల్ రిటర్న్

lowest, highest, total = calculate_min_max([10, 45, 92, 18])
print(f"కనిష్టం: {lowest}, గరిష్టం: {highest}, మొత్తం: {total}")

7 పొజిషనల్ వర్సెస్ కీవర్డ్ ఆర్గ్యుమెంట్స్ (Positional vs Keyword)

ఫంక్షన్‌కు ఆర్గ్యుమెంట్లను పంపేటప్పుడు రెండు ముఖ్యమైన మార్గాలు ఉన్నాయి:

8 డిఫాల్ట్ పారామీటర్లు & The Mutable Default Parameter Trap ⚠️

ఒక ఫంక్షన్ కాల్ చేసేటప్పుడు కొన్ని ఆర్గ్యుమెంట్లు ఇవ్వకపోయినా పనిచేసేలా వాటికి డిఫాల్ట్ విలువలు (Default Values) కేటాయించవచ్చు:

def connect_server(host="localhost", port=5432):
    print(f"Connecting to {host}:{port}...")
⚠️ పైథాన్‌లో అత్యంత ప్రమాదకరమైన బగ్: Mutable Default Argument Trap!
పైథాన్‌లో డిఫాల్ట్ ఆర్గ్యుమెంట్స్ ఫంక్షన్ కాల్ అయిన ప్రతిసారీ కాకుండా, ఫంక్షన్ డిఫైన్ అయినప్పుడు కేవలం ఒక్కసారి మాత్రమే మెమరీలో క్రియేట్ చేయబడతాయి!

కాబట్టి మీరు డిఫాల్ట్ విలువగా ఒక లిస్ట్ [] లేదా డిక్షనరీ {} ని పెడితే — ఆ ఫంక్షన్ కాల్స్ అన్నింటి మధ్య ఆ లిస్ట్ పంచుకోబడుతుంది! ఒక కాల్‌లో చేర్చిన ఎలిమెంట్ తర్వాతి కాల్స్‌లో కూడా అలాగే మిగిలిపోయి డేటా కరప్ట్ అవుతుంది!

# ❌ ప్రమాదకరమైన తప్పు:
def add_task(task, tasks=[]):
    tasks.append(task)
    return tasks
# ✅ ప్రొడక్షన్ పరిష్కారం (None Idiom):
def add_task(task, tasks=None):
    if tasks is None:
        tasks = []
    tasks.append(task)
    return tasks

9 కోడ్ డెమో 1: లైవ్ బ్యాంకింగ్ ట్రాన్సాక్షన్స్ & క్యాలిక్యులేషన్స్

పారామీటర్లు, కీవర్డ్ ఆర్గ్యుమెంట్లు, మరియు సేఫ్ డిఫాల్ట్ పారామీటర్లను ఉపయోగించి బ్యాంకింగ్ లావాదేవీల ఫంక్షన్‌ను పరిశీలిద్దాం:

01_banking_functions_demo.py
# =====================================================================
# చాప్టర్ 16 డెమో 1: ఫంక్షన్స్, గార్డ్ క్లాజ్ & సేఫ్ డిఫాల్ట్ పారామీటర్లు
# =====================================================================

def calculate_simple_interest(principal: float, rate_pct: float = 7.5, tenure_years: int = 1):
    """సాధారణ వడ్డీ మరియు మెచ్యూరిటీ మొత్తాన్ని లెక్కిస్తుంది."""
    if principal <= 0 or tenure_years <= 0:
        return 0.0, 0.0  # Guard clause for invalid inputs

    interest = (principal * rate_pct * tenure_years) / 100.0
    total_maturity = principal + interest
    return round(interest, 2), round(total_maturity, 2)

# 1. డిఫాల్ట్ వడ్డీ రేటుతో కాల్ చేయడం (Positional)
interest_1, total_1 = calculate_simple_interest(100000, tenure_years=3)
print(f"డిపాజిట్: ₹1,00,000 | వడ్డీ: ₹{interest_1:,.2f} | మొత్తం: ₹{total_1:,.2f}")

# 2. కీవర్డ్ ఆర్గ్యుమెంట్లతో కస్టమ్ వడ్డీ రేటు ఇవ్వడం
interest_2, total_2 = calculate_simple_interest(rate_pct=8.2, principal=250000, tenure_years=5)
print(f"డిపాజిట్: ₹2,50,000 | వడ్డీ: ₹{interest_2:,.2f} | మొత్తం: ₹{total_2:,.2f}")

10 Modern Python 3.5+ Type Hints & PEP 484

పైథాన్ డైనమిక్ టైప్డ్ లాంగ్వేజ్ అయినప్పటికీ, పెద్ద కార్పొరేట్ ప్రాజెక్టులలో కోడ్ క్వాలిటీ మరియు ఎడిటర్ ఆటోకంప్లీషన్ కోసం Type Hints ప్రామాణికంగా మారాయి.

# Type Annotations ఉదాహరణ:
def calculate_gst(amount: float, rate: float = 0.18) -> float:
    """రెండు ఫ్లోట్ విలువలను తీసుకుని ఫ్లోట్ ఫలితాన్ని ఇస్తుంది."""
    return round(amount * rate, 2)

గుర్తుంచుకోండి: టైప్ హింట్స్ రన్‌టైమ్‌లో ఎర్రర్స్ ఇవ్వవు (పైథాన్ స్పీడ్ తగ్గదు), కానీ mypy లేదా VS Code వంటి టూల్స్ ద్వారా కోడ్ రన్ అవ్వకముందే బగ్‌లను పట్టుకోవడానికి ఎంతగానో తోడ్పడతాయి.

11 Python 3.8+ Positional-Only (/) & Keyword-Only (*)

పైథాన్ 3.8 లో API డిజైనర్ల కోసం సరికొత్త పారామీటర్ రూల్స్ ప్రవేశపెట్టబడ్డాయి:

02_positional_and_keyword_only.py
# Modern Python 3.8+ API డిజైన్ ప్యాటర్న్
# a, b -> Positional-Only (/)
# c    -> Standard (పొజిషనల్ లేదా కీవర్డ్ ఏదైనా కావచ్చు)
# key  -> Keyword-Only (*)
def secure_transfer(sender_acc, amount, /, note="NEFT", *, auth_token):
    print(f"బదిలీ ఖాతా : {sender_acc} | మొత్తం : ₹{amount}")
    print(f"వివరణ      : {note} | టోకెన్ : {auth_token}")

# సరైన కాల్:
secure_transfer("ACC-101", 50000, "ఫీజు చెల్లింపు", auth_token="SEC-9981")

# తప్పుడు కాల్స్ (రన్ చేస్తే ఎర్రర్స్ వస్తాయి):
# secure_transfer(sender_acc="ACC-101", amount=50000, auth_token="SEC-9981") # TypeError: Positional-only!
# secure_transfer("ACC-101", 50000, "ఫీజు", "SEC-9981") # TypeError: Keyword-only auth_token needed!

12 కామన్ బిగినర్స్ మిస్టేక్స్ & ప్రొడక్షన్ బెస్ట్ ప్రాక్టీసెస్

13 రియల్-వరల్డ్ ప్రాజెక్ట్: "Enterprise Payroll & Salary Calculation Engine"

ఈ పదహారవ అధ్యాయంలో నేర్చుకున్న అన్ని ఫంక్షన్ కాన్సెప్టులను (def, Type Hints, మల్టిపుల్ రిటర్న్స్, గార్డ్ క్లాజెస్, కీవర్డ్ ఆర్గ్యుమెంట్స్, క్యాలిక్యులేషన్ మాడ్యులారిటీ) అనుసంధానిస్తూ — కార్పొరేట్ ఉద్యోగుల జీతాలు, అలవెన్సులు, పన్నులు మరియు టేక్-హోమ్ శాలరీని లెక్కించే పూర్తి స్థాయి Enterprise Payroll & Salary Calculation Engine ను నిర్మిద్దాం!

03_enterprise_payroll_engine.py
# =====================================================================
# చాప్టర్ 16 మినీ ప్రాజెక్ట్: Enterprise Payroll & Salary Calculation Engine
# కాన్సెప్ట్స్: Modular Functions, Type Annotations, Multiple Returns,
#             Guard Clauses, Keyword Arguments, Default Parameters
# =====================================================================

def calculate_allowances(basic_salary: float, metro_city: bool = True) -> tuple[float, float, float]:
    """HRA, DA, మరియు స్పెషల్ అలవెన్సులను లెక్కిస్తుంది."""
    hra_rate = 0.50 if metro_city else 0.40  # మెట్రో నగరాల్లో 50% HRA
    hra = basic_salary * hra_rate
    da = basic_salary * 0.15                  # 15% DA
    special_allowance = basic_salary * 0.20   # 20% Special Allowance
    return hra, da, special_allowance

def calculate_pf_deduction(basic_salary: float, pf_rate: float = 0.12) -> float:
    """ప్రావిడెంట్ ఫండ్ (PF) డిడక్షన్‌ను లెక్కిస్తుంది."""
    return round(basic_salary * pf_rate, 2)

def calculate_income_tax(annual_gross: float) -> float:
    """వార్షిక స్థూల జీతంపై ఆదాయపు పన్నును లెక్కిస్తుంది (కొత్త పన్ను విధానం)."""
    if annual_gross <= 700000:
        return 0.0  # ₹7 లక్షల వరకు పన్ను మినహాయింపు (Rebate)
    elif annual_gross <= 1000000:
        return (annual_gross - 700000) * 0.10
    elif annual_gross <= 1500000:
        return 30000 + (annual_gross - 1000000) * 0.15
    else:
        return 105000 + (annual_gross - 1500000) * 0.20

def generate_employee_payslip(
    emp_id: str,
    emp_name: str,
    designation: str,
    monthly_basic: float,
    *,
    is_metro: bool = True,
    performance_bonus: float = 0.0
) -> dict:
    """ఉద్యోగికి పూర్తి స్థాయి పేస్లిప్ డేటాను గణించి డిక్షనరీగా రిటర్న్ చేస్తుంది."""
    # గార్డ్ క్లాజ్: తప్పుడు శాలరీ చెక్
    if monthly_basic <= 0:
        return {"error": "తప్పుడు బేసిక్ శాలరీ!"}

    hra, da, special = calculate_allowances(monthly_basic, metro_city=is_metro)
    monthly_gross = monthly_basic + hra + da + special + performance_bonus

    pf_deduction = calculate_pf_deduction(monthly_basic)
    annual_gross = monthly_gross * 12
    annual_tax = calculate_income_tax(annual_gross)
    monthly_tax = round(annual_tax / 12.0, 2)

    total_deductions = pf_deduction + monthly_tax
    net_take_home = round(monthly_gross - total_deductions, 2)

    return {
        "emp_id": emp_id,
        "name": emp_name,
        "designation": designation,
        "basic": monthly_basic,
        "hra": hra,
        "da": da,
        "special": special,
        "bonus": performance_bonus,
        "gross": monthly_gross,
        "pf": pf_deduction,
        "tax": monthly_tax,
        "deductions": total_deductions,
        "net_pay": net_take_home
    }

def print_payslip_card(slip: dict):
    """అందమైన కార్పొరేట్ పేస్లిప్ ప్రింటింగ్."""
    print("\n" + "=" * 70)
    print(f"{'💼 మన సాఫ్ట్‌వేర్ సొల్యూషన్స్ — అధికారిక శాలరీ స్లిప్ 2026':^70}")
    print("=" * 70)
    print(f"ఉద్యోగి ID   : {slip['emp_id']:<20} పేరు     : {slip['name']}")
    print(f"హోదా        : {slip['designation']:<20} జీతం నెల : అక్టోబర్ 2026")
    print("-" * 70)
    print(f"{'ఆర్జనలు (Earnings)':<35} | {'తగ్గింపులు (Deductions)':<30}")
    print("-" * 70)
    print(f"బేసిక్ శాలరీ      : ₹{slip['basic']:>10,.2f}  | ప్రావిడెంట్ ఫండ్ (PF) : ₹{slip['pf']:>10,.2f}")
    print(f"ఇంటి అద్దె (HRA)   : ₹{slip['hra']:>10,.2f}  | ప్రొఫెషనల్ ట్యాక్స్ (TDS): ₹{slip['tax']:>10,.2f}")
    print(f"కరువు భత్యం (DA)   : ₹{slip['da']:>10,.2f}  |")
    print(f"స్పెషల్ అలవెన్స్  : ₹{slip['special']:>10,.2f}  |")
    if slip['bonus'] > 0:
        print(f"పర్ఫార్మెన్స్ బోనస్ : ₹{slip['bonus']:>10,.2f}  |")
    print("-" * 70)
    print(f"మొత్తం స్థూల జీతం (Gross) : ₹{slip['gross']:>10,.2f}  | మొత్తం తగ్గింపులు   : ₹{slip['deductions']:>10,.2f}")
    print("=" * 70)
    print(f"👉 నికర చెల్లింపు (Net Take-Home Salary) : ₹{slip['net_pay']:>12,.2f} 💵")
    print("=" * 70 + "\n")

# లైవ్ టెస్టింగ్
emp1_slip = generate_employee_payslip(
    emp_id="EMP-1044",
    emp_name="రాజేష్ వర్మ",
    designation="సీనియర్ క్లౌడ్ ఆర్కిటెక్ట్",
    monthly_basic=65000.0,
    is_metro=True,
    performance_bonus=15000.0
)

emp2_slip = generate_employee_payslip(
    emp_id="EMP-2091",
    emp_name="స్వప్న ప్రియ",
    designation="పైథాన్ డేటా ఇంజనీర్",
    monthly_basic=45000.0,
    is_metro=False
)

print_payslip_card(emp1_slip)
print_payslip_card(emp2_slip)

★ ఈ అధ్యాయంపై ప్రాక్టీస్ క్విజ్ (Knowledge Check)

1. పారామీటర్లు (Parameters) మరియు ఆర్గ్యుమెంట్స్ (Arguments) మధ్య తేడా ఏమిటి?
సమాధానం: ఫంక్షన్‌ను నిర్వచించేటప్పుడు (def func(x, y):) బ్రాకెట్లలో రాసే వేరియబుల్స్ పారామీటర్లు. ఫంక్షన్‌ను పిలిచేటప్పుడు (func(10, 20)) వాస్తవంగా లోపలికి పంపే అసలైన విలువలు ఆర్గ్యుమెంట్స్.
2. ఫంక్షన్‌లో ఎటువంటి return స్టేట్‌మెంట్ లేకపోతే అది ఏమి రిటర్న్ చేస్తుంది?
సమాధానం: ఫంక్షన్ చివరలో ఎటువంటి రిటర్న్ లేకపోతే పైథాన్ తెరవెనుక స్వయంచాలకంగా return None ను ఎగ్జిక్యూట్ చేస్తుంది. ఫలితంగా ఆ ఫంక్షన్ కాల్ విలువ None అవుతుంది.
3. def func(item, items=[]): అని రాయడం ఎందుకు తీవ్రమైన తప్పు?
సమాధానం: పైథాన్‌లో డిఫాల్ట్ ఆర్గ్యుమెంట్లు ఫంక్షన్ డిఫైన్ అయినప్పుడు కేవలం ఒక్కసారి మాత్రమే సృష్టించబడతాయి. మ్యూటబుల్ అయిన లిస్ట్‌ను డిఫాల్ట్‌గా పెడితే, తదుపరి ఫంక్షన్ కాల్స్ అన్నీ పాత లిస్ట్‌నే పంచుకుంటాయి. దీనిని అధిగమించడానికి ఎల్లప్పుడూ items=None పెట్టి, ఫంక్షన్ లోపల if items is None: items = [] అని రాయాలి.
4. పైథాన్ 3.8 లో ప్రవేశపెట్టిన / మరియు * సింబల్స్ అర్థం ఏమిటి?
సమాధానం: / కి ముందున్న పారామీటర్లు Positional-Only (వాటిని పేరుతో పాస్ చేయలేము). * కి తర్వాత ఉన్న పారామీటర్లు Keyword-Only (వాటిని తప్పనిసరిగా పేరుతో మాత్రమే పాస్ చేయాలి).
5. పైథాన్‌లో ఒక ఫంక్షన్ నుండి ఒకేసారి బహుళ విలువలను ఎలా రిటర్న్ చేస్తాము?
సమాధానం: కామాలతో వేరుచేస్తూ return a, b, c అని రాయడం ద్వారా. తెరవెనుక పైథాన్ వాటన్నింటినీ ఒక టుపుల్ (Tuple) రూపంలో ప్యాక్ చేసి పంపుతుంది. కాల్ చేసిన చోట వాటిని వేర్వేరు వేరియబుల్స్‌లోకి తక్షణమే అన్‌ప్యాక్ చేసుకోవచ్చు.
← మునుపటి అధ్యాయం: 15. అడ్వాన్స్‌డ్ కలెక్షన్స్ తర్వాతి అధ్యాయం: 17. *args, **kwargs & Scope →

ఈ Enterprise Payroll Engine ని లైవ్‌గా మన కంపైలర్‌లో రన్ చేయండి!

ఎటువంటి లోకల్ సెటప్ లేకుండా, బ్రౌజర్‌లోనే Modern Python 3 కంపైలర్‌లో ఈ కోడ్‌ను ఎగ్జిక్యూట్ చేసి అవుట్‌పుట్ తనిఖీ చేయండి.