一、函数的定义及调用
1、为什么要用函数?
- 提高代码的复用性
- 提高代码的可维护性
- 将复杂的程序分而治之——模块化设计思想
2、函数的定义及调用
2.1、定义
def 函数名(参数):
函数体
return 返回值
2.2、调用
函数名(参数)
eg1:
3、参数传递
3.1 形参和实参
-
形参:函数定义时候的参数,实际上就是变量名
-
实参:函数调用时的参数,实际上就是变量的值
3.2、位置参数 -
严格按照位置顺序,用实参对形参进行赋值(关联)
-
一般在参数比较少的时候
-
实参与形参必须一 一对应
eg2:
3.3、关键字参数 -
打破位置限制,直呼其名地进行值传递(形参=实参)
-
必须遵守实参与形参在位置上的一一对应
-
多用在实参较多的场合
eg3:
-
位置参数 可以和关键字参数一起使用但是位置参数必须放在关键字参数前面。
-
不能为同一参数重复传值
eg4:重复传值
3.4、默认参数 -
在定义阶段就给形参赋值
-
机器学习中该类方法非常常见
-
调用函数时,可以不对该形参进行传值
eg5:不对默认参数进行传值
-
也可以按正常传值
eg6:正常传值
-
位置形参必须在默认前面
-
默认参数必须是不可变类型,比如数字、字符串和元组。
-
如何让参数变成可选的?把其中一个默认赋值为None
eg7:
-
可变长参数“args”(这个形参必须放在参数,列表最后面)最后的实参可以加*打散
eg8:
-
可变长**kwargs
eg9:
4、函数体与变量作用域
- 函数体就是一段只有函数被调用时,才会执行的代码
- 局部变量——仅在函数体内定义和发挥作用
- 全局变量——外部定义的都是全局变量,可以在函数体内直接被使用
- 可以通过global在函数体内定义全局变量
eg10:
5、返回值
- 一般以元组形式返回
- 执行到return就不会再执行
- 没有return,返回值是None
6、几点建议
- 要有实际意义
- 小写字母和下划线组成函数名
- 函数前后个空两行
- 单元测试用assert,返回false时出发异常
7、常用用法,sort(),sorted()
- sort()永久升序排序
- sorted暂时性升序排序
- 降序排序可以在后面加一个“reverse=True”