# 11. 函数




### 背景

这一节里我们来了解一下什么是函数。

简单来说函数就是一段代码，只不过这段代码有名字，可能有输入和输出，我们可以使用函数的名字反复去调用这段代码。

函数主要做了下面3件事情

* 给一段代码命名，就像是我们之前给字符串和数字取个变量名一样
* 可以像之前我们在调用脚本时使用```argv```一样的使用传入参数
* 把上面2步结合起来，我们可以创建一些重复使用的脚本❤️

下面我们演示一下如何定义函数和调用函数

### 代码实现

新建名为```print_case.py```，内容如下

```python

# *args跟之前argv差不多
def print_case(*args):
  case_number, case_name = args
  print(f"用例编号: {case_number}")
  print(f"用例名称: {case_name}")

# 2个参数
def print_case_again(case_number, case_name):
  print(f"用例编号: {case_number}")
  print(f"用例名称: {case_name}")

# 1个参数
def print_delimiter(delimiter):
  print(delimiter * 20)

# 没有参数
def print_end():
  print('打印结束')

print_case('001', '验证GET请求的返回状态码')
print_delimiter('*')
print_case_again('002', '验证GET请求的返回值')
print_delimiter('*')
print_end()

```

详细的看一下```print_case()```函数。

* 首先我们告诉python，我们需要定义一个函数，约定好的关键字是```def```，也就是define的意思
* 然后我们为这个函数取个名字print_case，当然了，如果你觉得这个名字不好，你也可以换一个，不过我们一般在给函数取名的时候都是言简意赅的去表明这个函数到底是要做什么
* 然后我们告诉python，我们需要传入*args，就像是使用```argv```一样。*args就是函数的参数，需要放在一对小括号里```()```
* 在这一行的结束位置，不要忘了加个```:```冒号，表示引出下面的函数正文
* 另起一行，不要忘了缩进，就像使用```argv```一样，取出用例编号和名称
* 最后打印出用例名称和编号

### 运行

在命令行中使用下面的命令去执行代码

```
$ python print_case.py

```

### 你应该可以看到

按照下面展示的情况进行输入，如果没有出错的话，你应该可以看到命令行窗口显示如下的内容

```
用例编号: 001
用例名称: 验证GET请求的返回状态码
********************
用例编号: 002
用例名称: 验证GET请求的返回值
********************
打印结束
```
### 动手时间

* 给代码增加注释，解释一下这段代码做了些什么
* 函数的调用是什么意思？你能解释一下么？
* 函数的参数是什么意思？你能解释一下么？
* 缩进是什么？python中的强制缩进又是什么意思？

### 常见问题

* 给函数命名的时候，是不是任意的名字都可以？ 一般来说是这样的，跟变量名类似，函数名不能以数字开头，并且一般只能包含字母数字和下划线。

* ```*args```之前的*星号是什么意思？ 着告诉python我们会传入不确定数量的参数，1个也可以，3个也行，这属于固定套路，记住先，而且一般情况下使用频率不会很高。

* 感到代码很枯燥。 万事开头难，坚持下去吧。如果实在无聊，就想办法将代码弄的不能运行，**看明白报错**，这样进步会更快一些



原始封面

![课程图片](https://images.unsplash.com/photo-1551434678-e076c223a692?w=300)


