2.1 Lambda Expressions

Lambda expressions are expressions that evaluate to functions by specifying two things: the parameters and a return expression.

lambda <parameters>: <return expression>

While both lambda expressions and def statements create function objects, there are some notable differences. lambda expressions work like other expressions; much like a mathematical expression just evaluates to a number and does not alter the current environment, a lambda expression evaluates to a function without changing the current environment. Let's take a closer look.

lambdadef
TypeExpression that evaluates to a valueStatement that alters the environment
Result of executionCreates an anonymous lambda function with no intrinsic name.Creates a function with an intrinsic name and binds it to that name in the current environment.
Effect on the environmentEvaluating a lambda expression does not create or modify any variables.Executing a def statement both creates a new function object and binds it to a name in the current environment.
UsageA lambda expression can be used anywhere that expects an expression, such as in an assignment statement or as the operator or operand to a call expression.After executing a def statement, the created function is bound to a name. You should use this name to refer to the function anywhere that expects an expression.
  • lambda example

    # A lambda expression by itself does not alter
    # the environment
    lambda x: x * x
    
    # We can assign lambda functions to a name
    # with an assignment statement
    square = lambda x: x * x
    square(3)
    
    # Lambda expressions can be used as an operator
    # or operand
    negate = lambda f, x: -f(x)
    negate(lambda x: x * x, 3)
    
    # We can directly call a lambda expression
    # just created
    # Make sure the lambda expression wrapped in a
    # pair of parenthesis or between `(`, `,`, and `)`
    # in order not to let Python misunderstand you
    (lambda x: x * 2 ** x)(5) # evaluates to 160
    
  • def example

    def square(x):
        return x * x
    
    # A function created by a def statement
    # can be referred to by its intrinsic name
    square(3)