python-crash-course-book/chap8_functions.md

103 lines
2.8 KiB
Markdown
Raw Permalink Normal View History

2020-09-04 23:31:55 +10:00
# Chapter 8. Functions
## Passing an Arbitrary Number of Arguments
* Function uses `*arg_name` to collects arbitrary number of arguments.
* `*` in parameter tells Python to make an empty tuple called `arg_name` and pack whatever values it receives into this tuple
NOTE: `*args` is open used as **generic parameter** name
```python
def make_pizza(*toppings):
"""Summarize the pizza we are about to make."""
print("\nMaking a pizza with the following toppings:")
for topping in toppings:
print(f"- {topping}")
make_pizza('pepperoni')
make_pizza('mushrooms', 'green peppers', 'extra cheese')
```
## Mixing Positional and Arbitrary Arguments
* If function accept different kinds of arguments, Arbitrary Arguments must be placed at last.
```python
def make_pizza(size, *toppings):
"""Summarize the pizza we are about to make."""
print(f"\nMaking a {size}-inch pizza with the following toppings:")
for topping in toppings:
print(f"- {topping}")
make_pizza(16, 'pepperoni')
make_pizza(12, 'mushrooms', 'green peppers', 'extra cheese')
```
## Using Arbitrary Keyword Arguments
* Function can use double asterisks `**` to cause Python to create an empty dictionary called **user_info** and pack whatever name-value pairs.
```python
def build_profile(first, last, **user_info):
"""Build a dictionary containing everything we know about a user."""
user_info['first_name'] = first
user_info['last_name'] = last
return user_info
user_profile = build_profile('albert', 'einstein',
location='princeton',
field='physics')
print(user_profile)
{'location': 'princeton', 'field': 'physics',
'first_name': 'albert', 'last_name': 'einstein'}
```
## Storing Your Functions in Modules
Functions can be stored in different modules (python scripts) for better management.
### Importing an Entire Module
```python
import pizza
pizza.make_pizza(16, 'pepperoni')
pizza.make_pizza(12, 'mushrooms', 'green peppers', 'extra cheese')
```
### Importing Specific Functions
```python
from module_name import function_name
```
### Using as to Give a Function an Alias
```python
from module_name import function_name as fn
```
### Using as to Give a Module an Alias
```python
import pizza as p
p.make_pizza(16, 'pepperoni')
p.make_pizza(12, 'mushrooms', 'green peppers', 'extra cheese')
```
### Importing All Functions in a Module
```python
from module_name import *
```
## Styling Functions
* Functions should have descriptive names, and function names should be lowercase letters and underscores.
* Every function should have a comment that explain concisely what the function does.
* If specify a default value, no space separation `def function_name(parameter_0, parameter_1='default value')`
Generally follow PEP8