# 12. 函数与变量




### 背景

对于初学者来说函数的概念比较的烧脑，刚开始理解起来会各种困难，不过没关系，继续多多练习，习惯之后就不会有太多问题了。

这一节里我们解决一个小问题，就是函数里的变量名和函数外的变量名是不是会冲突的问题。

结论是不冲突，下面我们演示一下具体情况。

### 代码实现

新建名为```print_case01.py```，内容如下

```python

def print_case_count(success, failed):
    total_count = success + failed
    print(f"一共{total_count}个用例, 成功{success}个, 失败{failed}个")

def print_end():
  print('打印结束')

print('第一次运行')
print_case_count(95, 5)

print('第二次运行')
success = 101
failed = 0
print_case_count(success, failed)

print('第三次运行')
total = 100
failed = 7
print_case_count(total - failed, failed)

print_end()

```

上面的代码说明了一些问题

* 函数调用有很多的方式，传参的时候我们可以直接传值，传变量，甚至是合法的表达式(```total - failed```)
* 函数外的变量名不会影响函数内的，另一种说法是我们可以在函数内用函数外相同的变量名

### 运行

在命令行中使用下面的命令去执行代码

```
$ python print_case01.py

```

### 你应该可以看到

按照下面展示的情况进行输入，如果没有出错的话，你应该可以看到命令行窗口显示如下的内容

```
第一次运行                       
一共100个用例, 成功95个, 失败5个       
第二次运行                       
一共101个用例, 成功101个, 失败0个      
第三次运行                       
一共100个用例, 成功93个, 失败7个       
打印结束                       

 ```

### 动手时间

* 修改```print_case_count()```函数，使其可以输出用例的通过率
* 自行去了解一下python中变量的作用域，推荐搜索关键字**python variable scope**
* 自行去了解什么是全局变量，什么是局部变量

### 常见问题

* 为什么搜索的时候推荐英文关键字？ 英文关键字可以使我们找到第一手官方的解释，准确性更高。另外阅读一些英文文档也不是啥坏事。

* 怎么去计算用例的通过率？ 公式大概是```success_count / total_count```，注意算出来的结果应该是浮点型

* 什么是浮点型？ 简单理解为带有小数位的数，如果你对这个答案不满意，你可以看一下[这里](https://en.wikipedia.org/wiki/Floating-point_arithmetic)




原始封面

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


