函数
什么是函数?
function 英文 -> 函数,功能
函数就是一个具有特定功能的语法结构。
作用:提高代码的复用率,提高开发效率,减少后期的维护成本
定义函数
【基本结构】:
def 函数名():
实现函数功能的代码
实现函数功能的代码
实现函数功能的代码
...
举个例子:
def man(name,sex):
'''
这个函数的功能是造一个奥特曼
name:这里写你给奥特曼取得名字
sex:这里写奥特曼的性别
'''
print(name)
print(sex)
man("大锤","男")
特征:
1.函数不调用不会执行
2.函数可以调用N次不受次数限制
函数名的定义:
1.推荐使用英文,可以使用拼音,不可以使用汉字
2.可以使用数字,但是不能以数字开头
3.不可以使用特殊字符,除了下划线_
4.函数名严格区分大小写
5.函数命名要有意义
6.函数名不能和系统保留关键字冲突
7.函数名尽量不要和系统已存在的内建函数同名,以免覆盖内建函数
函数的参数
(1)函数参数概念及分类
函数参数:调用时需要传递的数据.
函数参数大类分为形参和实参:
形参意思: 函数定义时的参数
实参意思: 函数调用时的参数
形实关系:函数调用时,形参和实参个数需要一一对应
形参种类: 普通参数,默认参数,普通收集参数,命名关键字参数,关键字收集参数
实参种类: 普通实参,关键字实参
(2)普通参数(位置参数)普通的参数,接收实参传递的值
(3)默认参数:位于普通参数后面,具有默认值的参数
语法:(x,y=2) y就是默认参数
(4)收集参数:
普通收集参数:用于专门收集多余普通参数的是普通收集参数,形成一个新的元组
语法:参数前面加* 例:*args
关键字收集参数:用于专门收集多余关键字实参的是关键字收集参数,形成一个新的字典
语法:参数前面加** 例:**kwargs
(5)命名关键字参数:定义时放在*号后面的参数,调用时强制必须传入指定参数名才能调用
语法:(a,*,x) x是命名关键字参数
如果函数参数中已经有了收集参数,那么收集参数后面的参数即为命名关键字参数
语法:(*args,x,y)
(6)形参声明的位置顺序:
普通参数 -> 默认参数 -> 收集参数 -> 命名关键字参数 -> 关键字收集参数
def func(a,b,c=1,*args,d,**kw)
a,b为普通参数,c是默认参数,args是收集参数,d是命名关键字参数,kw是关键字收集参数
极少出现五种参数同时出现的情况
def func(a,b=2,*,c,d,**kw)
a为普通参数,b是默认参数,c,d是命名关键字参数 ,kw是关键字收集参数
(7)#注意:实参将值传递给形参的过程,本质上就是变量赋值操作
所有参数的摆放问题:
1.实参:普通实参在前,关键字参数在后
2.形参:
关键字收集参数一定在最后出现
收集参数推荐在普通参数之后使用
推荐顺序:普通形参,收集参数,关键字收集参数
函数文档
1.使用help函数查看
help(函数名)
2.函数名.__doc__
print(id.__doc__)
接下来就使用之前的那个代码来试验一下help函数查看:
def man(name,sex):
'''
这个函数的功能是造一个奥特曼
name:这里写你给奥特曼取得名字
sex:这里写奥特曼的性别
'''
print(name)
print(sex)
man("大锤","男")
print(help(man))
函数的返回值
函数执行完毕之后可以得到一个结果,该结果可以被接受或者使用
函数划分为两大类:
执行过程函数:函数执行之后没有任何结果可以在函数之外接收到(没有return语句的函数)
res = print("你好")
print(res)
None 空值
具有返回值的函数:函数执行之后可以返回一个结果到函数之外被接收或者使用(具有return语句)
res = id(1)
print(res)
def play(name):
print(name,"要变身啦!")
return name+"变成了假面骑士"
res = play("小刚")
print(res+"小智吓傻了")
print(play("小刚"))
return:返回的意思
执行过程函数:送外卖的,把外卖送给客户,结束了(送外卖是过程,送完之后没得到任何东西)
具有返回值的函数:送外卖,把外卖送给客户,结束了得到了钱(送外卖是过程,送完之后得到了钱)
return的另外一个作用:
终止函数执行,函数运行过程中一旦执行了return语句,那么函数就会结束执行。
def play():
print("hello")
return 1
print("世界")
play()
id() 具有返回值的函数
type() 具有返回值的函数
int() 具有返回值的函数
....
所有函数都是有返回值的,只是执行过程函数的返回值是None
例:print() 执行过程函数 没有返回值 只有一个None值 (None表示没有值)
return四问:
1.可以在函数里面写多个return 语句吗? 可以,但不能是在同个作用域下
def func(name):
if name == "小红":
return "小红你来啦"
elif name == "小明":
return "小明滚出去"
elif name == "小强":
return "杀虫剂呢?"
else:
return "名字未出现在名单中"
res = func("小绿")
print(res)
2.拓展之后我们还可以写一个具有返回值的函数,模拟其他数据类型转换成字符串的函数
def str1(input_str):
return str(input_str)
list1 = [1,2,3,4]
res = str1(list1)
print(res,type(res))
3.而我们大家知道其他数据类型转换为list,int类型转换时是会报错的,但是我们可以写一段代码让它们在转换的时候不会报错
def list1(input_type):
if isinstance(input_type,int):
return "对不起,int类型无法转换成列表"
else:
return list(input_type)
num = 1
res = list1(num)
print(res)
4.return 可以返回多个值吗?可以,会组成一个元组
def func():
return "你好",1,"world",[1,2,3,4]
res = func()
print(res,type(res))