1、python中函数的定义:
函数其实就是带名字的代码块,用于完成一些具体的工作。如果我们在写一段程序的时候,需要多次用到同样的一个功能,如果每次都要重复写相同的代码,不仅会增加我们的代码量,更会让我们写出的代码让别人看起来觉得很low,而如果我们把功能作为一个代码块封装在一个函数里,每次仅需要调用这个函数,是不是就很方便了?这就是函数的意义所在。
1.1函数的定义方式
def test(x):
"The function defination"
x+=1
return x
###解释
test:函数名
():内可定义形参
“”:文档描述(非必要,最好写)
x+=1:泛指代码块或程序处理逻辑 #
return:定义返回值
调用运行:可以带参数也可以不带
函数名()
2、使用函数的好处
(1)减少代码重用
(2)保护一致性,易维护
(3)可扩展性
3、函数和过程的区别
过程就是没有返回值的函数(即没有return)
def test01(): msg='hello the little green grass' print(msg) def test02(): msg='hello the beautiful girl' print(msg) return msg def test03(): msg='the girl is gorgeous' print(msg) return 1,2,3,'a',['alex'],{'name':'czd'} t1=test01() t2=test02() t3=test03() print(t1) print(t2) print(t3)
explain:
返回值数=0:返回none;(没有返回值,即过程)
返回值数=1:返回object;
返回值数>1:返回tuple;
4、函数参数
4.1.形参和实参
实参是一个实实在在存在的参数,是实际占用内存地址的,而形参只是意义上的一种参数,在定义的时候是不占内存地址的。
函数的调用中,可能存在多个实参,在给函数传递参数的时候只要有两种方式,位置实参和关键字实参,每个实参都由变量名和值组成,实参还可以是列表、字典。
4.2 改用函数写
def calc(x,y): #(x,y)为形参 res=x**y return res res=calc(a,b) #(a,b)为实参 print(res)
4.3 位置参数和关键字参数
def calc(x,y): res=x**y return res res=calc(2,3) print(res) 位置参数必须一一对应,缺一不行多一也不行 def test(x,y,z): print(x) print(y) print(z) test(1,2) # 报错 关键字参数无需一一对应,但缺一不行多一也不行 def test(x,y,z): print(x) print(y) print(z) test(y=1,x=2,z=4) test(x=2,z=4) #缺一报错 位置参数必须在关键词左边 def test(x,y,z): print(x) print(y) print(z) test(1,y=2,3) # 报错 test(1,2,y=3) # 报错 test(1,2,z=3) test(1,2,z=3,y=4) # 报错
4.4 默认参数
def handle(x,type='None'): print(x) print(type) handle('hello') # type默认‘None’ handle('hello',type='squile') handle('hello','squile') # 位置参数
4.5 参数组
def test(x, *args): # 列表 print(x) print(args) test(1, *['x', 'y', 'z']) test(1, ['x', 'y', 'z']) # 没有*时,把列表当成一个整体传给args def test(x,**kwargs): #字典 print(x) print(kwargs) test(1,y=2,z=3) test(1,y=2,z=3,z=4) # 报错,一个参数不能穿2个值
4.6 默认参数与参数组联合使用
# *args必须在前,**kwargs在后 def test(x,*args,**kwargs): print(x) print(args) print(kwargs) test(1,1,2,11,x=1,y=2,z=4) #报错,x重了 test(1,1,2,11,y=2,z=4) def test(x,*args,**kwargs): print(x) print(args,args[-1]) print(kwargs,kwargs.get('y')) test(1,1,2,11,y=2,z=4) test(1,*[1,2,3],**{'y':1})