Functions

Huh? Why are there two parentheses in add_5(x)()?

def shell_with_pearl():
    return 'pearl'

This function shell_with_pearl takes in no arguments and returns the string 'pearl'.

>>> a = shell_with_pearl
>>> a
<function shell_with_pearl at 0x1078ff268>

Here, the function shell_with_pearl is assigned to a. Note that we have not yet called the function, so there is no returning of values.

>>> b = shell_with_pearl()
>>> b
'pearl'

Here, shell_with_pearl is being called and it returns the string 'pearl'. So b takes the value 'pearl'.

def wrapper():
    return shell_with_pearl

This function takes in no arguments and returns the function shell_with_pearl.

>>> c = wrapper
>>> c
<function wrapper at 0x109543ea0>

Here, c is assigned the function wrapper.

>>> d = wrapper()
>>> d
<function shell_with_pearl at 0x1078ff268>

Here, wrapper is being called with no arguments. It returns the function shell_with_pearl; the value of d is not a string, but a function that returns a string when called. Now, let's call that inner function to obtain the string 'pearl':

>>> e = wrapper()()
>>> e
'pearl'

In this line, we can think of the first function call (denoted by the first parentheses pair) as serving to 'unwrap' and reveal the function shell_with_pearl. The second function call is made to the 'unwrapped' function shell_with_pearl and 'pearl' is returned. Thus, the value of e is 'pearl'.

results matching ""

    No results matching ""