函数是代码封装中非常重要的一部分,当工程量越来越大时,重复的代码会使得整个程序看上去非常繁琐,而函数的使用就可以减轻这个效果。
函数的本质
函数(function),一个函数可以理解为一个打包好的事件,里面有预先写好的代码,在需要时直接使用。
基本使用
def function():
pass
function()
函数在使用之前需要先定义,中间输入预先设好的代码,需要使用时输入函数的名称即可直接调用。
在代码执行时,定义函数的代码部分不会执行,只有在被调用时才会执行
函数的格式
def 函数名(参数1,参数2):
'''函数注释'''
函数体代码
return 返回值
def | def用于定义函数,必须添加 |
函数名 | 函数名的使用和注意事项与变量名相同,简洁易懂,不能使用python已有的关键词 |
参数 | 用于把函数外的数据输入到函数内,与函数建立一个临时链接,参数也可以不写 |
注释 | 用于说明代码功能,避免遗忘 |
代码 | 组成函数核心的代码 |
return返回值 | 将函数执行完的结果输出到函数外,函数执行完之后只会把return部分输出到函数外,在函数内的其他赋值等操作在函数执行完之后会重置。 |
函数的分类
一般python中的函数分为三种函数
内置函数 | python中已经定义好的函数和内置方法,如len() .split() |
无参函数 | 括号内没有参数的函数,该函数没有输入输出,可以直接调用 |
有参函数 | 括号内带有参数的函数,需要在括号内添加对应的参数,可以是数据值也可以是变量名 |
函数的返回值
返回值是函数执行完毕之后产生的结果,可以加也可以不添加,如果添加了return要注意用变量获取函数的返回值,否则返回值没有赋值会当成垃圾清除。
return的添加与否也会对结果产生不同的影响
1.没有return
def func():
print('function')
a = func()
print(a)
此时会先执行print,然后因为函数的返回值为空,输出None并赋值给变量a
function
None
2.有return 但是后面没有输出目标
def func():
print('function')
return
a = func()
print(a)
由于没有明确输出目标,最后函数同样输出None
function
None
3.有return 有一个输出对象
def func():
num = 100
return 123
a = func()
print(a)
def func():
num = 100
return num
a = func()
print(a)
return后面写什么就输出什么,写数据值就输出数据值,写变量名就输出变量存储的内容。
4.有return 有多个输出对象
def func():
return 1,2,3,4
a = func()
print(a)
当有多个输出对象时,每个对象之间以逗号隔开,最后的输出结果默认以元组的形式输出
(1, 2, 3, 4)
当输出对象为不同的数据类型,均以元组的形式输出,如果是列表等复合数据时,以元组的单个数据值的形式输出
5.return下面有其他代码
执行return后会立即结束函数,与break和continue相同,后面的代码不会被执行
函数的参数
参与函数输入输出的数据称为函数的参数,参数分为两类
1.形式参数
形式参数是定义函数时括号内的参数,作用是从外界输入数据给函数。
def 函数名(参数1,参数2,......):
2.实际参数
实际参数是函数执行完之后return的参数,作用是作为函数运行结束后的输出值。
两种参数都只会在函数执行时临时绑定数据值,在函数结束之后就会解除绑定。
return 参数1,参数2,......
参数的特性
1.位置参数
定义阶段括号内从左往右依次填写的称为位置参数
def func(a,b,c,d):
pass
return a,b,c,d
位置参数传入输出的数量和位置必须一致,多一个少一个都会报错。
2.关键字参数
调用函数时括号内给变量写明了具体赋值的称为关键字参数
def func(a,b,c,d):
pass
return a,b,c,d
func(a=1,b=2,c=3,d=4)
func(1,2,c=3,d=4)
关键字参数相比位置参数,可以自由调换位置,但是两者都必须遵循短的在前,长的在后的原则。
3.默认值参数
定义函数时括号内写明了变量的默认赋值的称为默认值函数
def func(a,b,c,d=4):
pass
return a,b,c,d
func(a,b,c)
func(a,b,c,d=8)
添加默认值的变量在调用时如果没有设定赋值就会使用设置好的默认数值,也可以在调用时手动修改数值。
4.可变参数
当输入参数与输出不对等时,可以使用可变参数将多余的参数组合输出
def func(a,*x):
print(x)
func(1,2,3)
可变参数是在变量名前面加上*,但是不会改变原有的变量名,可变参数会把多余的参数组合成元组的形式输出
def func(**y):
print(y)
func('name' = 'jack',age = 18)
当可变参数使用**时,可变参数会把多余的参数组合成字典的形式输出。