Free Interactive Python Course

Python Tutorial — Learn Python Step by Step

Key takeaway: Master Python programming from scratch — variables, loops, functions, OOP, file handling, and libraries — with clear human-readable explanations and runnable code examples.

50+ Structured Lessons
Runnable Code Examples
100% Free No Registration
Updated October 2026

Python Function Arguments

Python offers flexible ways to pass data into functions: positional arguments, keyword arguments, default values, and variable-length argument lists.

Positional and Keyword Arguments

# Positional arguments — order matters
def greet(name, greeting):
    return f"{greeting}, {name}!"

print(greet("Alice", "Hello"))  # Hello, Alice!

# Keyword arguments — order does not matter
print(greet(greeting="Hi", name="Bob"))  # Hi, Bob!

# Mix positional and keyword (positional must come first)
print(greet("Charlie", greeting="Hey"))  # Hey, Charlie!

Default Parameter Values

def create_user(name, role="viewer", active=True):
    return {"name": name, "role": role, "active": active}

# Use defaults
print(create_user("Alice"))
# {"name": "Alice", "role": "viewer", "active": True}

# Override defaults
print(create_user("Bob", role="admin"))
# {"name": "Bob", "role": "admin", "active": True}

# CAUTION: Never use mutable default arguments!
# BAD:
def append_to(item, lst=[]):  # shared across calls!
    lst.append(item)
    return lst

# GOOD: Use None as sentinel
def append_to_safe(item, lst=None):
    if lst is None:
        lst = []
    lst.append(item)
    return lst

*args — Variable Positional Arguments

# *args collects extra positional arguments into a tuple
def total(*numbers):
    return sum(numbers)

print(total(1, 2, 3))        # 6
print(total(10, 20, 30, 40)) # 100

# Practical: flexible logging function
def log(message, *tags):
    tag_str = " ".join(f"[{t}]" for t in tags)
    print(f"{tag_str} {message}")

log("Server started", "INFO", "SERVER")
# [INFO] [SERVER] Server started

**kwargs — Variable Keyword Arguments

# **kwargs collects extra keyword arguments into a dictionary
def build_profile(name, **details):
    profile = {"name": name}
    profile.update(details)
    return profile

user = build_profile("Alice", age=30, city="NYC", job="Engineer")
print(user)
# {"name": "Alice", "age": 30, "city": "NYC", "job": "Engineer"}

# Combining all argument types (order matters)
def full_example(required, *args, key="default", **kwargs):
    print(f"required: {required}")
    print(f"args: {args}")
    print(f"key: {key}")
    print(f"kwargs: {kwargs}")

full_example("hello", 1, 2, 3, key="custom", x=10, y=20)

Unpacking Arguments

# Unpack a list/tuple into positional arguments with *
def add(a, b, c):
    return a + b + c

numbers = [1, 2, 3]
print(add(*numbers))  # 6

# Unpack a dict into keyword arguments with **
config = {"host": "localhost", "port": 8080, "debug": True}

def start_server(host, port, debug=False):
    print(f"Starting {host}:{port} (debug={debug})")

start_server(**config)  # Starting localhost:8080 (debug=True)

Keyword-Only and Positional-Only Parameters

# Keyword-only: parameters after * must be passed by name
def fetch(url, *, timeout=30, verify=True):
    print(f"GET {url} (timeout={timeout}, verify={verify})")

fetch("https://api.example.com", timeout=10)  # OK
# fetch("https://api.example.com", 10)  # TypeError!

# Positional-only (Python 3.8+): parameters before / must be positional
def pow(base, exp, /):
    return base ** exp

print(pow(2, 10))  # 1024
# pow(base=2, exp=10)  # TypeError!
  • Order of parameters: positional, *args, keyword with defaults, **kwargs.
  • Never use mutable objects (lists, dicts) as default values — use None instead.
  • Use * to unpack sequences and ** to unpack dicts when calling functions.
  • Use keyword-only arguments (after *) for clarity in functions with many options.

Python Programming Tutorial — Learn Python in a practical, step-by-step way. According to the official Python documentation, Python emphasizes code readability and simplicity, making it ideal for beginners.

Related tools: Python Online Compiler | Python Examples | JavaScript Tutorial | Java Tutorial

Python Career & Learning Guide

Python is the world's most popular programming language for beginners, data science, AI/ML, web development, and automation. This tutorial teaches Python step-by-step with clear explanations and runnable code examples in our free Python Compiler.

Why Learn Python in 2026?

  • #1 Most Popular Language: Ranked first on TIOBE, Stack Overflow, and GitHub.
  • AI and Data Science: The primary language for machine learning (TensorFlow, PyTorch, scikit-learn) and data analysis (Pandas, NumPy).
  • Web Development: Django and Flask power scalable backends at companies like Instagram and Spotify.
  • Automation & Scripting: Automate files, emails, web scraping, and data processing in minutes.

Python vs Other Languages

FeaturePythonJavaJavaScriptC++
SyntaxVery clean, readableVerboseModerateComplex
TypingDynamic, strongStatic, strongDynamic, weakStatic, strong
Best ForAI/ML, Data, WebEnterprise, AndroidWeb Frontend/BackendSystems, Games
Learning Time2–4 weeks basics4–6 weeks basics3–4 weeks basics8–12 weeks basics

Frequently Asked Questions

Do I need prior programming experience to learn Python?

No! Python is specifically designed to be beginner-friendly. This tutorial starts from zero and builds up gradually.

Which Python version should I use?

Python 3.10+ is recommended. All examples in this tutorial use Python 3 syntax.

Is this Python tutorial completely free?

Yes, 100% free with no registration or sign-up required. Access all lessons and code examples anytime.