> For the complete documentation index, see [llms.txt](https://thamizhiniyancs.gitbook.io/writeups/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://thamizhiniyancs.gitbook.io/writeups/hackerrank/python/closures-and-decorators.md).

# Closures and Decorators

## Standardize Mobile Number Using Decorators

<figure><img src="https://3452970062-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhMewGT4PbQ5e1zQPC4Ko%2Fuploads%2FMrm1nQjiW0LEH4xavZTS%2Fimage.png?alt=media&amp;token=f45e580f-20b3-42de-847e-681255ae5674" alt=""><figcaption></figcaption></figure>

```python
def wrapper(f):
    def fun(l):
        return f(f'+91 {each[-10:-5]} {each[-5:]}' for each in l)

    return fun


@wrapper
def sort_phone(l):
    print(*sorted(l), sep='\n')


if __name__ == '__main__':
    l = [input() for _ in range(int(input()))]
    sort_phone(l)
```

***

## Decorators 2 - Name Directory

<figure><img src="https://3452970062-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhMewGT4PbQ5e1zQPC4Ko%2Fuploads%2FajDxAT9XFckxM49x1e25%2Fimage.png?alt=media&amp;token=0f178a70-8b82-40bb-8e78-558e0697aa17" alt=""><figcaption></figcaption></figure>

```python
def person_lister(f):
    def inner(people):
        return [f(each) for each in sorted(people, key=lambda x: int(x[2]))]

    return inner


@person_lister
def name_format(person):
    return ("Mr. " if person[3] == "M" else "Ms. ") + person[0] + " " + person[1]


if __name__ == '__main__':
    people = [input().split() for i in range(int(input()))]
    print(*name_format(people), sep='\n')
```
