python函数
函数简介
将常用的代码以固定的格式封装(包装)成一个独立的模块,可以重复使用,这个模块就叫做函数(Function)。
定义函数。
1 | #定义个空函数,没有实际意义 |
调用函数。
1 | pass_dis() |
函数说明文档。
函数的说明文档通常位于函数内部、所有代码的最前面。
1 | #定义一个比较字符串大小的函数 |
值传递和引用传递
形式参数:在定义函数时,函数名后面括号中的参数就是形式参数。
实际参数:在调用函数时,函数名后面括号中的参数称为实际参数。
- 值传递:适用于实参类型为不可变类型(字符串、数字、元组);
- 引用(地址)传递:适用于实参类型为可变类型(列表,字典);
函数参数进行值传递后,若形参的值发生改变,不会影响实参的值;而函数参数继续引用传递后,改变形参的值,实参的值也会一同改变。
值传递,其本质就是将实际参数值复制一份,将其副本传给形参。这意味着,采用值传递方式的函数中,无论其内部对参数值进行如何修改,都不会影响函数外部的实参。
传参解包
当传入列表或元组时,其名称前要带一个 * 号,当传入字典时,其名称前要带有 2 个 * 号。
1 | def dis_str(name,add) : |
函数返回多值
2 种方式:
- 在函数中,提前将要返回的多个值存储到一个列表或元组中,然后函数返回该列表或元组;
- 函数直接返回多个值,之间用逗号( , )分隔,Python 会自动将多个值封装到一个元组中,其返回值仍是一个元组。
序列解包,使用对应数量的变量,直接接收函数返回列表或元组中的多个值。
1 | def retu_list() : |
变量作用域
局部变量
仅限于函数内部,出了函数就不能使用。
在函数执行完毕后,这块临时存储空间随即会被释放并回收,该空间中存储的变量无法再被使用。
全局变量
在所有函数的外部定义变量,这样的变量称为全局变量(Global Variable)。
全局变量的默认作用域是整个程序,即全局变量既可以在各个函数的外部使用,也可以在各函数内部使用。
- 在函数体外定义的变量。
- 在函数体内使用 global 关键字对变量进行修饰。
函数高级
赋值、作为其他函数的参数以及作为其他函数的返回值。
将函数赋值给其它变量。
1 | def my_def (): |
将函数以参数的形式传入其他函数中。
1 | def multi(a,b): |
返回值为函数。
1 | def my_def (): |
闭包
外部函数返回的不是一个具体的值,而是一个函数。一般情况下,返回的函数会赋值给一个变量,这个变量可以在后面被继续执行调用。
1 | #闭包函数,其中 exponent 称为自由变量 |
闭包比普通的函数多了一个 closure 属性,该属性记录着自由变量的地址。
匿名函数
lambda 表达式,又称匿名函数,常用来表示内部仅包含 1 行表达式的函数。
- 对于单行函数,使用 lambda 表达式可以省去定义函数的过程,让代码更加简洁;
- 对于不需要多次复用的函数,使用 lambda 表达式可以在用完之后立即释放,提高程序执行的性能
1 | add = lambda x,y:x+y |