## What is an embedded function?

Embedded functions are functions that come ready with the Python installation, unlike the functions we have created. Since these functions were previously developed by Python developers, we do not need to define these functions. E.g; These functions that we have used before, such as `print()`

, `len()`

, `type()`

, `input()`

, are embedded functions. We can directly call and use these functions without defining them. In this lesson, we will cover some important embedded functions that will be useful to us.

### Some Embedded Functions

In this lesson, I will cover the most used embedded functions, if you wish, you can find other functions here.

`map()`

This function provides convenience in the operations you want to do with functions on variables, let me show you with an example before you get too confused, then you will understand very well. Before that, let’s see the general outline of the `map()`

function first.

`map(function,iter1,iter2)`

What we call an iterator can be a `list`

, a `tuple`

, or any other data type.

Let’s have a list, and we square all the elements of this list.

```
list = [1,2,3,4,5,6,7,8,9,10]
def getSquare(number):
return number**2
map1 = map(getSquare,list)
```

As you can see, we have assigned the `map()`

function to the variable named `map1`

and let’s print it out immediately.

```
print(map1)
# <map object at 0x000002DFD0A76860>
```

As you can see, we got a `map()`

object, so we can see it, so let’s convert the variable to a list type or another data type. Let’s convert it to list type.

```
map1 = list(map1)
print(map1)
# [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
```

As you can see, we have squared all the elements of the list. We said that we can apply embedded functions much more easily with the `lambda()`

function that we have processed in our previous lesson. Let’s do the same example with the lambda function, then you will understand much better.

```
list = [1,2,3,4,5,6,7,8,9,10]
map2 = map(lambda number:number**2,list)
print(list(map2))
```

As you can see, we can do it much more easily with the `lambda()`

function.

If we make a concise explanation, the `map()`

function takes multiple parameters, the first being a `function`

, and applies the function to other parameters. So it’s not limited to applying to just one data type. Let’s show it with an example.

```
list1 = [1,3,5,9,7,6]
list2 = [6,8,7,9,4,6]
list3 = [8,4,9,3,1,5]
map2 = map(lambda x,y,z:x*y*z,list1,list2,list3)
print(list(map2))
```

As you can see, we can apply the `map()`

function on more than one data at the same time.

`reduce()`

The structure of this function is almost similar to the structure of the `map()`

function. In this function, the other parameter, the list, etc., is the function that it takes as a parameter. Applies on the first two apples of data. I know you are confused, you will understand better if we show it with an example.

`reduce(function,iter1,iter2)`

Before explaining the example, we need to include the `reduce()`

function in the project after the later versions, so let’s include the `reduce()`

function in the project first.

`from functools import reduce`

Don’t get confused, I will cover the subject of import in the project in the next lessons. For now, focus on the general structure of the `reduce`

function.

```
list = [0,1,2,3,4,5,6]
reduce1 = reduce(lambda x,y:x+y,list)
print(reduce1)
```

Let me explain briefly;

Adds the first element first, then sums the result with the next element, and so on.

```
0+1 = 1
1+2 = 3
3+3 = 6
6+4 = 10
10+5 = 15
15+6 = 21
```

Let’s move on to the next function by doing another example.

```
from functools import reduce
list = [1,2,3,4,5]
reduce1 = reduce(lambda x,y:x*y,list)
print(reduce1)
```

```
1*2 = 2
2*3 = 6
6*4 = 24
24*5 = 120
```

You will see that the result is the factorial of the list element.

`filter()`

The `filter()`

function is almost the same as the `reduce()`

function, but the function in the parameter given to the `filter()`

function should only return a logical (`True`

, `False`

) value. As a result, the filter function returns a list of `true`

values. In this way, it creates a filter on the list. You can think of it like query operations in SQL. You will understand very well with examples.

Let’s say we have a list of 20 numbers, let’s take the even numbers in this list. In this way, we will obtain a list with numbers that have created a filter on the list and only satisfy the condition of being an even number.

```
list = range(20)
filter1 = filter(lambda number:number%2==0,list)
print(list(filter1))
# [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
```

You will understand much better with another example. This time, let’s have a list with numbers from 0 to 1000, let’s find the prime numbers in this list. This time, I will use a normal function, not a `lambda()`

function, because as I mentioned before, we cannot write complex functions with the `lambda()`

function.

```
list = range(100)
def primeNumber(number):
i = 2
if number ==2:
return True
elif number<2:
return False
else:
while(i<number):
if number%i==0:
return False
i +=1
return True
filter2 = filter(primeNumber,list)
print(list(filter2))
# [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
```

In addition, there is another point we need to pay attention to here, the `filter()`

function returns an object type value like the `map()`

function, so we can convert it to a list type and access it this way.

`zip()`

The use of the `zip()`

function, which is an embedded function, is slightly different from other functions. The parameters it takes in the `zip()`

function are also not functions. In short, we can say that the `zip()`

function does the grouping process. Let’s show it with an example.

Let’s have two different lists, the first list is the student’s school number, and the second is the student’s name, let’s group them.

```
numbers = [13,42,45,21,74,52,32,11]
names = ["Baransel","Batuhan","Alex","Andrew","Eva","Emma","Joe","Steve"]
zip1 =zip(numbers,names)
print(list(zip1))
# [(13, 'Baransel'), (42, 'Batuhan'), (45, 'Alex'), (21, 'Andrew'), (74, 'Eva'), (52, 'Emma'), (32, 'Joe'), (11, 'Steve')]
```

The `zip()`

function returns an object value like any other function, so we typed it.

The `zip()`

function does not only do grouping, but is also used when more than one value needs to be checked.

```
list1 = [1,6,8,9,25,36,14,52,69,21]
list2 = [3,5,25,14,41,36,58,60,20,30]
for i,j in zip(list1,list2):
filter1 = filter(lambda i:i%3==0,list1)
filter2 = filter(lambda j:j%5==0,list2)
print("multiples of 3",list(filter1))
print("multiples of 5",list(filter2))
# multiples of 3 [6, 9, 36, 69, 21]
# multiples of 5 [5, 25, 60, 20, 30]
```

In this way, we learned our `zip()`

function. We have discussed the most used functions in the concept of embedded functions in Python.