# Fuctions¶

• A function is a block of code which only runs when it is called.
• You can pass data, known as parameters, into a function.
• A function can return data as a result.

### Arbitrary Arguments, `*args`¶

If the number of arguments is unknown, add a * before the parameter name:

``````def my_function(*kids):
print("The youngest child is " + kids)

my_function("Emil", "Tobias", "Linus")
``````

### Keyword Arguments¶

You can also send arguments with the key = value syntax.

``````def my_function(child3, child2, child1):
print("The youngest child is " + child3)

my_function(child1 = "Emil", child2 = "Tobias", child3 = "Linus")
``````

### Arbitrary Keyword Arguments, `**kwargs`¶

If you do not know how many keyword arguments that will be passed into your function, add two asterisk: ** before the parameter name in the function definition.

This way the function will receive a dictionary of arguments, and can access the items accordingly:

``````def my_function(**kid):
print("His last name is " + kid["lname"])

my_function(fname = "Tobias", lname = "Refsnes")
``````

### Default Parameter Value¶

If we call the function without argument, it uses the default value:

``````def my_function(country = "Norway"):
print("I am from " + country)

my_function("Sweden")
my_function("India")
my_function()
my_function("Brazil")
``````

### return and pass¶

• To let a function return a value, use the `return` statement
• function definitions cannot be empty, but if you for some reason have a function definition with no content, put in the `pass`statement to avoid getting an error.
``````def myfunction():
pass
``````

### Recursion¶

• Python also accepts function recursion, which means a defined function can call itself.
• Recursion is a common mathematical and programming concept. It means that a function calls itself. This has the benefit of meaning that you can loop through data to reach a result.
• The developer should be very careful with recursion as it can be quite easy to slip into writing a function which never terminates, or one that uses excess amounts of memory or processor power. However, when written correctly recursion can be a very efficient and mathematically-elegant approach to programming.

In this example, tri_recursion() is a function that we have defined to call itself ("recurse"). We use the k variable as the data, which decrements (-1) every time we recurse. The recursion ends when the condition is not greater than 0 (i.e. when it is 0).

To a new developer it can take some time to work out how exactly this works, best way to find out is by testing and modifying it.

``````def tri_recursion(k):
if(k > 0):
result = k + tri_recursion(k - 1)
print(result)
else:
result = 0
return result

print("\n\nRecursion Example Results")
tri_recursion(6)
Recursion Example Results
1
3
``````