本节我们将要讲解python的函数部分,主要包括函数的三要素,形参实参及面向过程面向对象的内容。
1.函数定义及调用
1.1 函数定义
函数可以看作一个白箱子,包括输入、处理、输出三个过程,包含三个要素,参数,参数体、返回值。
函数形式:
def 函数名(参数):
函数体
return 返回值
为什么使用函数
(1)提高代码的复用性(复用功能,封装函数)
(2)将复杂的大问题化解成一系列的小问题(模块化设计)
(3)利用代码的维护和管理
1.2 函数调用
函数调用方式:函数名(参数)
# 顺序代码
a = 10
b = 5
c = 3
d = a + b + c
# 函数代码
def cal(a, b, c):
return a + b + c
a = 10
b = 5
c = 3
d = cal(a, b, c)
2.参数传递
2.1 形参与实参
形参(形式参数):函数定义时的参数,实际上就是变量名
实参(实际参数):函数调用时候的参数,实际上就是变量的值
2.2 位置参数
严格按照位置顺序,用实参对形参进行赋值,一般用在参数比较少的时候,且实参和形参必须一一对应,一个不能多,一个不能少。
def function(a, b, c):
print(c)
function(1, 2, 3)
2.3 关键字参数
打破位置限制,直呼其名的进行值得传递的方式,必须遵守实参与形参数量上一一对应,多数用在参数比较多的场景。
def function(a, b, c):
print(c)
function(b=1, a =2, c=3)
位置参数和关键字参数混合使用,但是位置参数必须放在关键字参数的前面,且不能为同一个形参反复传值。
2.4 默认参数
在定义阶段就给形参赋值,在机器学习库中的方法非常常见,在调用函数时,可以不对该形参传值,也可以按照正常的形参传值。
注意:位置形参必须在默认形参前面,默认参数应该设置为不可变类型(数字、字符串、元组)
def function(a, b, c=6):
print(c)
function(b=1, a =2, c=3)
让参数变为可选的方式,采用None的赋值方式
def function(a, b, c=None):
if c:
print(c)
else:
print(a)
function(b=1, a =2, c=3)
function(b=1, a =2)
2.5 可变长参数*args
有时不确定会传递多少,使用参数*args,该形参必须放在参数列表的最后
def fun(x, y, z, *args):
print(x, y, z)
print(args)
# 多余的参数,打包传递给args
fun(1, 2, 3, 4, 5, 6)
# 实参打散
fun(1, 2, 3, [4, 5, 6])
fun(1, 2, 3, *[4, 5, 6])
2.6 可变长参数**kwargs
有时不确定会传递多少,使用参数**kwargs,该形参必须放在参数列表的最后
def fun(x, y, z, **kwargs):
print(x, y, z)
print(kwargs)
# 多余的参数,以字典的形式打包传递给kwargs
fun(1, 2, 3, a=4, b=5, c=6)
# 字典实参打散
fun(1, 2, 3, **{”a“=4, "b"=5, "c"=6})
2.7 可变长参数组合使用
同时使用*args和**kwargs
def fun(*args, **kwargs):
print(args)
print(kwargs)
fun(1, 2, 3, a=4, b=5, c=6)
3.函数体与变量作用域
函数体是只当函数被调用时,才会执行代码,代码构成与其他代码相同。
局部变量:仅在函数体内定义和发挥作用
全局变量:外部定义的变量,在函数体内可以直接被使用,可以通过global在函数体内定义全局变量
4.返回值
返回值通常使用return进行单个返回值的过程,多个返回值以元组的形式进行返回,函数内可以存在多个return语句,一旦其中一个执行,就代表函数结束运行,无return语句,返回值为None
5.断言
单元测试过程中,可以使用assert进行断言进行,当表达式结果为False的时候触发异常。
assert expression
6.匿名函数
基本形式
lambda 参数:函数返回值
匿名函数用法在参数列表中常用,尤其与key进行搭配
ls = [(93, 88), (79, 100), (65, 58), (21, 33), (45, 75)]
ls.sort()
ls.sort(key = lambda x: x[1])
ls.sort(key = lambda x: x[0] + x[1])
7.面向过程和面向对象
面向过程:以过程为中心的编程思想,以”什么正在发生“为主要目标进行编程。
面向对象:将现实世界的目标抽象成对象,更关注”谁在受影响“,更加贴近现实。
领取专属 10元无门槛券
私享最新 技术干货