Define a function, add a docstring, and use default parameter values:

def greet(name, greeting="Hello"):
    """Return a greeting string for the given name."""
    return f"{greeting}, {name}!"

print(greet("Alice"))           # Hello, Alice!
print(greet("Bob", "Hi"))       # Hi, Bob!
print(greet(greeting="Hey", name="Carol"))  # keyword args

Use *args and **kwargs to accept a variable number of arguments:

def total(*numbers):
    return sum(numbers)

print(total(1, 2, 3, 4))    # 10

def show_info(**details):
    for key, value in details.items():
        print(f"{key}: {value}")

show_info(name="Alice", age=30, city="London")

Lambda expressions create small anonymous functions inline:

double = lambda x: x * 2
print(double(5))     # 10

numbers = [3, 1, 4, 1, 5, 9, 2, 6]
numbers.sort(key=lambda x: -x)    # sort descending
print(numbers)

evens = list(filter(lambda x: x % 2 == 0, numbers))
squared = list(map(lambda x: x ** 2, numbers))