Spaces:
Sleeping
Sleeping
| # Python Programming: Complete Guide from Basics to Advanced | |
| ## Introduction to Python | |
| Python is a high-level, interpreted, and general-purpose programming language created by Guido van Rossum and first released in 1991. Known for its clear syntax and readability, Python has become one of the most popular programming languages in the world, especially in fields like data science, web development, automation, and artificial intelligence. | |
| ### Why Python? | |
| **Advantages**: | |
| - **Easy to Learn**: Simple, readable syntax resembling natural language | |
| - **Versatile**: Used in web development, data science, AI, automation, and more | |
| - **Large Community**: Extensive documentation and community support | |
| - **Rich Ecosystem**: Thousands of libraries and frameworks | |
| - **Cross-Platform**: Runs on Windows, macOS, Linux | |
| - **Open Source**: Free to use and distribute | |
| - **High-Level**: Automatic memory management | |
| - **Interpreted**: No compilation needed, quick development cycle | |
| **Use Cases**: | |
| - Data Science and Machine Learning | |
| - Web Development (Django, Flask) | |
| - Automation and Scripting | |
| - Scientific Computing | |
| - Game Development | |
| - Desktop Applications | |
| - DevOps and System Administration | |
| ## Python Basics | |
| ### Installation and Setup | |
| ```python | |
| # Check Python version | |
| python --version # or python3 --version | |
| # Install packages using pip | |
| pip install package_name | |
| # Create virtual environment | |
| python -m venv myenv | |
| # Activate virtual environment | |
| # Windows: | |
| myenv\Scripts\activate | |
| # macOS/Linux: | |
| source myenv/bin/activate | |
| ``` | |
| ### Variables and Data Types | |
| ```python | |
| # Variables (no declaration needed) | |
| name = "Alice" # String | |
| age = 25 # Integer | |
| height = 5.6 # Float | |
| is_student = True # Boolean | |
| empty = None # NoneType | |
| # Type checking | |
| print(type(name)) # <class 'str'> | |
| # Type conversion | |
| num_str = "42" | |
| num_int = int(num_str) # 42 | |
| num_float = float(num_str) # 42.0 | |
| str_num = str(num_int) # "42" | |
| ``` | |
| ### Basic Data Structures | |
| #### Lists (Mutable, Ordered) | |
| ```python | |
| # Creating lists | |
| fruits = ["apple", "banana", "cherry"] | |
| numbers = [1, 2, 3, 4, 5] | |
| mixed = [1, "two", 3.0, True] | |
| # Accessing elements | |
| first = fruits[0] # "apple" | |
| last = fruits[-1] # "cherry" | |
| slice = fruits[1:3] # ["banana", "cherry"] | |
| # Modifying lists | |
| fruits.append("orange") # Add to end | |
| fruits.insert(1, "grape") # Insert at index | |
| fruits.remove("banana") # Remove item | |
| popped = fruits.pop() # Remove and return last | |
| fruits[0] = "pear" # Change item | |
| # List operations | |
| length = len(fruits) | |
| sorted_fruits = sorted(fruits) | |
| fruits.reverse() | |
| fruits.sort() | |
| # List comprehension | |
| squares = [x**2 for x in range(10)] | |
| evens = [x for x in range(20) if x % 2 == 0] | |
| ``` | |
| #### Tuples (Immutable, Ordered) | |
| ```python | |
| # Creating tuples | |
| coordinates = (10, 20) | |
| single = (42,) # Single element tuple | |
| empty = () | |
| # Accessing elements | |
| x = coordinates[0] # 10 | |
| y = coordinates[1] # 20 | |
| # Unpacking | |
| x, y = coordinates | |
| a, *rest, b = (1, 2, 3, 4, 5) # a=1, rest=[2,3,4], b=5 | |
| # Tuples are immutable | |
| # coordinates[0] = 15 # This raises an error | |
| ``` | |
| #### Dictionaries (Key-Value Pairs) | |
| ```python | |
| # Creating dictionaries | |
| person = { | |
| "name": "Alice", | |
| "age": 25, | |
| "city": "New York" | |
| } | |
| # Accessing values | |
| name = person["name"] | |
| age = person.get("age") | |
| city = person.get("country", "Unknown") # Default value | |
| # Modifying dictionaries | |
| person["email"] = "alice@example.com" # Add | |
| person["age"] = 26 # Update | |
| del person["city"] # Delete | |
| person.pop("email") # Remove and return | |
| # Dictionary operations | |
| keys = person.keys() | |
| values = person.values() | |
| items = person.items() | |
| # Dictionary comprehension | |
| squares = {x: x**2 for x in range(6)} | |
| ``` | |
| #### Sets (Unique, Unordered) | |
| ```python | |
| # Creating sets | |
| fruits = {"apple", "banana", "cherry"} | |
| numbers = set([1, 2, 2, 3, 3, 3]) # {1, 2, 3} | |
| empty = set() | |
| # Set operations | |
| fruits.add("orange") | |
| fruits.remove("banana") | |
| fruits.discard("grape") # No error if doesn't exist | |
| # Mathematical set operations | |
| a = {1, 2, 3, 4} | |
| b = {3, 4, 5, 6} | |
| union = a | b # {1, 2, 3, 4, 5, 6} | |
| intersection = a & b # {3, 4} | |
| difference = a - b # {1, 2} | |
| symmetric_diff = a ^ b # {1, 2, 5, 6} | |
| ``` | |
| ### Control Flow | |
| #### Conditional Statements | |
| ```python | |
| # if-elif-else | |
| age = 18 | |
| if age < 13: | |
| print("Child") | |
| elif age < 20: | |
| print("Teenager") | |
| else: | |
| print("Adult") | |
| # Ternary operator | |
| status = "Adult" if age >= 18 else "Minor" | |
| # Multiple conditions | |
| if age >= 18 and has_license: | |
| print("Can drive") | |
| if name == "Alice" or name == "Bob": | |
| print("Welcome!") | |
| ``` | |
| #### Loops | |
| ```python | |
| # For loops | |
| for i in range(5): | |
| print(i) # 0, 1, 2, 3, 4 | |
| for fruit in ["apple", "banana", "cherry"]: | |
| print(fruit) | |
| for i, fruit in enumerate(fruits): | |
| print(f"{i}: {fruit}") | |
| for key, value in person.items(): | |
| print(f"{key}: {value}") | |
| # While loops | |
| count = 0 | |
| while count < 5: | |
| print(count) | |
| count += 1 | |
| # Break and continue | |
| for i in range(10): | |
| if i == 3: | |
| continue # Skip 3 | |
| if i == 7: | |
| break # Stop at 7 | |
| print(i) | |
| # Else clause (runs if loop completes normally) | |
| for i in range(5): | |
| print(i) | |
| else: | |
| print("Loop completed") | |
| ``` | |
| ### Functions | |
| ```python | |
| # Basic function | |
| def greet(name): | |
| return f"Hello, {name}!" | |
| result = greet("Alice") | |
| # Default parameters | |
| def power(base, exponent=2): | |
| return base ** exponent | |
| print(power(3)) # 9 | |
| print(power(3, 3)) # 27 | |
| # Variable arguments | |
| def sum_all(*args): | |
| return sum(args) | |
| print(sum_all(1, 2, 3, 4)) # 10 | |
| # Keyword arguments | |
| def person_info(**kwargs): | |
| for key, value in kwargs.items(): | |
| print(f"{key}: {value}") | |
| person_info(name="Alice", age=25, city="NYC") | |
| # Lambda functions | |
| square = lambda x: x**2 | |
| add = lambda x, y: x + y | |
| # Higher-order functions | |
| numbers = [1, 2, 3, 4, 5] | |
| squared = list(map(lambda x: x**2, numbers)) | |
| evens = list(filter(lambda x: x % 2 == 0, numbers)) | |
| from functools import reduce | |
| product = reduce(lambda x, y: x * y, numbers) | |
| ``` | |
| ### Object-Oriented Programming | |
| ```python | |
| # Class definition | |
| class Dog: | |
| # Class variable | |
| species = "Canis familiaris" | |
| # Constructor | |
| def __init__(self, name, age): | |
| self.name = name # Instance variable | |
| self.age = age | |
| # Instance method | |
| def bark(self): | |
| return f"{self.name} says Woof!" | |
| # String representation | |
| def __str__(self): | |
| return f"{self.name} is {self.age} years old" | |
| # Creating instances | |
| buddy = Dog("Buddy", 5) | |
| miles = Dog("Miles", 3) | |
| print(buddy.bark()) # Buddy says Woof! | |
| print(miles) # Miles is 3 years old | |
| # Inheritance | |
| class GoldenRetriever(Dog): | |
| def __init__(self, name, age, color): | |
| super().__init__(name, age) | |
| self.color = color | |
| def fetch(self): | |
| return f"{self.name} is fetching!" | |
| max_dog = GoldenRetriever("Max", 2, "golden") | |
| # Encapsulation | |
| class BankAccount: | |
| def __init__(self, balance): | |
| self.__balance = balance # Private attribute | |
| def deposit(self, amount): | |
| if amount > 0: | |
| self.__balance += amount | |
| def get_balance(self): | |
| return self.__balance | |
| # Polymorphism | |
| class Cat: | |
| def speak(self): | |
| return "Meow" | |
| class Dog: | |
| def speak(self): | |
| return "Woof" | |
| def animal_sound(animal): | |
| print(animal.speak()) | |
| animal_sound(Cat()) # Meow | |
| animal_sound(Dog()) # Woof | |
| ``` | |
| ## Advanced Python Concepts | |
| ### Decorators | |
| ```python | |
| # Function decorator | |
| def uppercase_decorator(func): | |
| def wrapper(*args, **kwargs): | |
| result = func(*args, **kwargs) | |
| return result.upper() | |
| return wrapper | |
| @uppercase_decorator | |
| def greet(name): | |
| return f"hello, {name}" | |
| print(greet("alice")) # HELLO, ALICE | |
| # Decorator with parameters | |
| def repeat(times): | |
| def decorator(func): | |
| def wrapper(*args, **kwargs): | |
| for _ in range(times): | |
| result = func(*args, **kwargs) | |
| return result | |
| return wrapper | |
| return decorator | |
| @repeat(3) | |
| def say_hello(): | |
| print("Hello!") | |
| ``` | |
| ### Generators | |
| ```python | |
| # Generator function | |
| def count_up_to(n): | |
| count = 1 | |
| while count <= n: | |
| yield count | |
| count += 1 | |
| counter = count_up_to(5) | |
| for num in counter: | |
| print(num) # 1, 2, 3, 4, 5 | |
| # Generator expression | |
| squares = (x**2 for x in range(10)) | |
| # Fibonacci generator | |
| def fibonacci(): | |
| a, b = 0, 1 | |
| while True: | |
| yield a | |
| a, b = b, a + b | |
| fib = fibonacci() | |
| first_10 = [next(fib) for _ in range(10)] | |
| ``` | |
| ### Context Managers | |
| ```python | |
| # File handling with context manager | |
| with open('file.txt', 'r') as file: | |
| content = file.read() | |
| # File automatically closed | |
| # Custom context manager | |
| class DatabaseConnection: | |
| def __enter__(self): | |
| print("Opening connection") | |
| return self | |
| def __exit__(self, exc_type, exc_val, exc_tb): | |
| print("Closing connection") | |
| def query(self, sql): | |
| print(f"Executing: {sql}") | |
| with DatabaseConnection() as db: | |
| db.query("SELECT * FROM users") | |
| ``` | |
| ### Exception Handling | |
| ```python | |
| # Try-except | |
| try: | |
| result = 10 / 0 | |
| except ZeroDivisionError: | |
| print("Cannot divide by zero!") | |
| except Exception as e: | |
| print(f"An error occurred: {e}") | |
| else: | |
| print("No errors!") | |
| finally: | |
| print("Cleanup code") | |
| # Raising exceptions | |
| def divide(a, b): | |
| if b == 0: | |
| raise ValueError("Denominator cannot be zero") | |
| return a / b | |
| # Custom exceptions | |
| class InsufficientFundsError(Exception): | |
| pass | |
| def withdraw(balance, amount): | |
| if amount > balance: | |
| raise InsufficientFundsError("Not enough funds") | |
| return balance - amount | |
| ``` | |
| ### List, Dict, and Set Comprehensions | |
| ```python | |
| # List comprehension | |
| squares = [x**2 for x in range(10)] | |
| evens = [x for x in range(20) if x % 2 == 0] | |
| matrix = [[i*j for j in range(3)] for i in range(3)] | |
| # Dictionary comprehension | |
| square_dict = {x: x**2 for x in range(6)} | |
| flipped = {v: k for k, v in person.items()} | |
| # Set comprehension | |
| unique_squares = {x**2 for x in [-2, -1, 0, 1, 2]} | |
| # Nested comprehension | |
| flattened = [num for row in matrix for num in row] | |
| ``` | |
| ### Itertools and Collections | |
| ```python | |
| from itertools import * | |
| from collections import * | |
| # Itertools | |
| combinations_list = list(combinations([1, 2, 3], 2)) | |
| permutations_list = list(permutations([1, 2, 3], 2)) | |
| product_list = list(product([1, 2], ['a', 'b'])) | |
| # Infinite iterators | |
| counter = count(start=10, step=2) | |
| cycler = cycle(['A', 'B', 'C']) | |
| repeater = repeat(10, times=3) | |
| # Collections | |
| counter = Counter(['a', 'b', 'a', 'c', 'b', 'a']) | |
| # Counter({'a': 3, 'b': 2, 'c': 1}) | |
| default_dict = defaultdict(list) | |
| default_dict['key'].append('value') | |
| ordered_dict = OrderedDict() | |
| ordered_dict['first'] = 1 | |
| ordered_dict['second'] = 2 | |
| named_tuple = namedtuple('Point', ['x', 'y']) | |
| p = named_tuple(10, 20) | |
| print(p.x, p.y) | |
| ``` | |
| ## File Handling | |
| ```python | |
| # Reading files | |
| with open('file.txt', 'r') as f: | |
| content = f.read() # Read entire file | |
| lines = f.readlines() # Read lines into list | |
| for line in f: # Iterate line by line | |
| print(line.strip()) | |
| # Writing files | |
| with open('output.txt', 'w') as f: | |
| f.write("Hello, World!\n") | |
| f.writelines(["Line 1\n", "Line 2\n"]) | |
| # Appending | |
| with open('output.txt', 'a') as f: | |
| f.write("Appended text\n") | |
| # Working with CSV | |
| import csv | |
| with open('data.csv', 'r') as f: | |
| reader = csv.reader(f) | |
| for row in reader: | |
| print(row) | |
| with open('output.csv', 'w', newline='') as f: | |
| writer = csv.writer(f) | |
| writer.writerow(['Name', 'Age']) | |
| writer.writerows([['Alice', 25], ['Bob', 30]]) | |
| # Working with JSON | |
| import json | |
| data = {'name': 'Alice', 'age': 25} | |
| # Write JSON | |
| with open('data.json', 'w') as f: | |
| json.dump(data, f, indent=2) | |
| # Read JSON | |
| with open('data.json', 'r') as f: | |
| data = json.load(f) | |
| ``` | |
| ## Popular Python Libraries | |
| ### NumPy (Numerical Computing) | |
| ```python | |
| import numpy as np | |
| # Arrays | |
| arr = np.array([1, 2, 3, 4, 5]) | |
| matrix = np.array([[1, 2, 3], [4, 5, 6]]) | |
| # Operations | |
| print(arr * 2) | |
| print(arr + 10) | |
| print(np.mean(arr)) | |
| print(np.std(arr)) | |
| # Array creation | |
| zeros = np.zeros((3, 3)) | |
| ones = np.ones((2, 4)) | |
| range_arr = np.arange(0, 10, 2) | |
| linspace = np.linspace(0, 1, 5) | |
| ``` | |
| ### Pandas (Data Manipulation) | |
| ```python | |
| import pandas as pd | |
| # DataFrames | |
| df = pd.DataFrame({ | |
| 'name': ['Alice', 'Bob', 'Charlie'], | |
| 'age': [25, 30, 35], | |
| 'city': ['NYC', 'LA', 'Chicago'] | |
| }) | |
| # Operations | |
| print(df.head()) | |
| print(df.describe()) | |
| print(df['age'].mean()) | |
| # Filtering | |
| adults = df[df['age'] >= 30] | |
| # Reading data | |
| df = pd.read_csv('data.csv') | |
| df = pd.read_excel('data.xlsx') | |
| df = pd.read_json('data.json') | |
| ``` | |
| ### Requests (HTTP Library) | |
| ```python | |
| import requests | |
| # GET request | |
| response = requests.get('https://api.example.com/data') | |
| data = response.json() | |
| # POST request | |
| payload = {'key': 'value'} | |
| response = requests.post('https://api.example.com/submit', json=payload) | |
| # With headers | |
| headers = {'Authorization': 'Bearer token'} | |
| response = requests.get('https://api.example.com/protected', headers=headers) | |
| ``` | |
| ### Matplotlib (Visualization) | |
| ```python | |
| import matplotlib.pyplot as plt | |
| # Line plot | |
| x = [1, 2, 3, 4, 5] | |
| y = [1, 4, 9, 16, 25] | |
| plt.plot(x, y) | |
| plt.xlabel('X-axis') | |
| plt.ylabel('Y-axis') | |
| plt.title('Line Plot') | |
| plt.show() | |
| # Bar chart | |
| categories = ['A', 'B', 'C'] | |
| values = [10, 20, 15] | |
| plt.bar(categories, values) | |
| plt.show() | |
| # Scatter plot | |
| plt.scatter(x, y) | |
| plt.show() | |
| ``` | |
| ## Best Practices | |
| 1. **PEP 8 Style Guide**: Follow Python's style conventions | |
| 2. **Meaningful Names**: Use descriptive variable and function names | |
| 3. **Documentation**: Write docstrings for functions and classes | |
| 4. **Error Handling**: Use try-except blocks appropriately | |
| 5. **Virtual Environments**: Isolate project dependencies | |
| 6. **Type Hints**: Use type annotations for clarity | |
| 7. **List Comprehensions**: Use when appropriate for readability | |
| 8. **Context Managers**: Use 'with' statements for resource management | |
| 9. **DRY Principle**: Don't Repeat Yourself | |
| 10. **Testing**: Write unit tests for your code | |
| ## Conclusion | |
| Python's simplicity, readability, and extensive ecosystem make it an ideal language for beginners and experts alike. Whether you're building web applications, analyzing data, training machine learning models, or automating tasks, Python provides the tools and libraries to get the job done efficiently. | |
| Continuous learning and practice are key to mastering Python. Explore different libraries, contribute to open-source projects, and build your own applications to deepen your understanding and skills. |