How different languages handle the flow of execution, through conditional statements, loops and errors.
Control Flow
Python Language
Conditional Statements
Control the flow of execution based on conditions.
def check_number(num: int) -> str: if num > 0: return "Positive" elif num < 0: return "Negative" else: return "Zero" print(check_number(10)) # "Positive" print(check_number(-5)) # "Negative" print(check_number(0)) # "Zero"
Error Loading
Missing
Ternary Operator or Select
A shorthand for conditional expressions.
Ternary Operator
result = "Positive" if num > 0 else "Negative" if num < 0 else "Zero"
Missing
Switch / Case
A control structure for multi-way branching.
A control structure for multi-way branching.
Missing
Loop Over - Iterables
Iterate over elements in a collection or iterable.
Python supports multiple looping constructs.
Basic for
loop (iterates over a range of numbers):
for i in range(5): print(i)
Loop over lists (for...in
):
numbers = [1, 2, 3] for num in numbers: print(num)
Loop over dictionary keys and values:
user = {"id": 1, "name": "Alice"} for key, value in user.items(): print(f"{key}: {value}")
Enumerate iteration (index + value):
fruits = ["apple", "banana", "cherry"] for index, fruit in enumerate(fruits): print(index, fruit)
Missing
Loop Conditional Exit
Exit a loop based on a condition.
Python does not have a built-in do...while loop like some other programming languages. However, you can achieve similar functionality using a while loop with a condition that is checked after the first iteration.
Example: Using a while loop for conditional exit:
count = 0 while count < 5: print(count) count += 1
Emulating a do...while loop:
To emulate a do...while loop (where the condition is checked after the first iteration), you can use a while True loop with a break statement:
count = 0 while True: print(count) count += 1 if count >= 5: break
for i in range(10): if i == 5: break print(i) # Output: 0, 1, 2, 3, 4
for i in range(5): if i == 2: continue print(i) # Output: 0, 1, 3, 4
Missing
Co-Routine - Yield
Pause and resume execution at specific points.
Coroutines and `yield`
Coroutines in Python are a special type of function that can pause and resume execution. They are often used for asynchronous programming and cooperative multitasking. The yield
keyword is used to create generators, which are a type of coroutine.
Using yield
to Create Generators: - The yield
keyword allows a function to return a value and pause its execution, resuming from where it left off when called again.
def count_up_to(n): count = 0 while count < n: yield count count += 1 # Using the generator for num in count_up_to(5): print(num) # Output: 0, 1, 2, 3, 4
Coroutines are functions that can consume values sent to them using the send()
method. They are defined using the yield
keyword.
def coroutine_example(): print("Coroutine started") while True: value = yield print(f"Received: {value}") # Using the coroutine coro = coroutine_example() next(coro) # Start the coroutine coro.send(10) # Send a value to the coroutine coro.send(20) # Send another value
yield from
for Delegating Generators. The yield from
statement is used to delegate part of a generator's operations to another generator.
def sub_generator(): yield 1 yield 2 yield 3 def main_generator(): yield from sub_generator() yield 4 # Using the generator for value in main_generator(): print(value) # Output: 1, 2, 3, 4
Asynchronous Coroutines with async def
. In modern Python, coroutines are often used with async def
and await
for asynchronous programming.
import asyncio async def async_example(): print("Start") await asyncio.sleep(1) # Simulate an asynchronous operation print("End") # Running the coroutine asyncio.run(async_example())
Missing
Exceptions
Handle errors or exceptional conditions in a structured way.
Exception Handling
Python provides a robust mechanism for handling runtime errors using try
, except
, else
, and finally
blocks. This allows you to gracefully handle errors and ensure proper cleanup.
Basic Exception Handling: - the try
block lets you test a block of code for errors, and the except
block lets you handle the error.
try: result = 10 / 0 except ZeroDivisionError as e: print(f"Error: {e}") # Output: Error: division by zero
Catching Multiple Exceptions. You can catch multiple exceptions by specifying them in a tuple.
try: num = int("abc") result = 10 / 0 except (ValueError, ZeroDivisionError) as e: print(f"Error: {e}") # Output: Error: invalid literal for int() with base 10: 'abc'
Using else
with try
. The else
block runs if no exceptions are raised in the try
block.
try: result = 10 / 2 except ZeroDivisionError as e: print(f"Error: {e}") else: print(f"Result: {result}") # Output: Result: 5.0
Using finally
for Cleanup. The finally
block always executes, regardless of whether an exception was raised or not. It is typically used for cleanup operations.
try: file = open("example.txt", "r") content = file.read() except FileNotFoundError as e: print(f"Error: {e}") finally: print("Closing the file.") if 'file' in locals() and not file.closed: file.close() # Output: Error: [Errno 2] No such file or directory: 'example.txt' # Closing the file.
Raising Exceptions: - You can raise exceptions explicitly using the raise
keyword.
def check_positive(num): if num < 0: raise ValueError("Number must be positive") return num try: check_positive(-5) except ValueError as e: print(f"Error: {e}") # Output: Error: Number must be positive
Custom Exceptions: - You can define your own exceptions by creating a custom class that inherits from the Exception
class.
class CustomError(Exception): pass try: raise CustomError("This is a custom error") except CustomError as e: print(f"Error: {e}") # Output: Error: This is a custom error