这节主要讲函数的基础概念,包括定义调用,各基础概念讲解
一,概念理解
函数可以理解为就是可以直接拿来用去实现某一目的的代码段,有很多定义好的可以直接拿来用的函数,如print(),也可以自定义自己想要的函数。
二,定义和调用
1,定义
函数的定义,以def为开头,后接函数标识符名称和圆括号,要传入的参数等放在圆括号里。格式如下:
def 函数名([参数1,参数2...]):
函数体 #可能是执行什么操作,可能是需要返回什么值
#实例如下
def count(a,b):
return(a + b) #返回a+b的值
#使用
c = cout(1,2)
print(c) #输出3
2,调用
如上过程的输出,观察这个函数的返回值是否需要保存,然后传入这个函数中所需要的参数即可。
类似于变量赋值那节说的,变量名其实是建立了一个和内存地址的指向关系,那么重复对这个内存地址赋予指向关系,也可以正常调用此内存地址存放的函数,如下:
def count(a,b):
return(a + b)
c = count
print(c(1,2))
输出为
3
在调用其他函数的时候,第一个要注意如果此函数不属于内置函数,是在某个包里面别人定义的函数,要注意先导入这个包;第二个就是如果要读懂一个函数的意思,要看它需要的参数、内部程序逻辑、返回值即可
3,返回值
经常在讲函数的返回值,那么函数的返回值是什么意思。
返回值一般会和return这个语句相关,其作用如下:
- 把return后面跟的值返回给调用方
- 结束对应的函数
如上例中,return后接了a+b,那么在执行这个语句时,就会把a+b的值返回,并且结束操作
return可以结束对应的函数,可以看下例更深的理解
def count0():
for i in range(3):
print(i)
return
print("end")
def count1():
for i in range(3):
print(i)
break
print("end")
count0()
print("-------------------")
count1()
输出为
0
-------------------
0
end
可以看出在count0()函数中,在i=0的循环中,打印了i然后通过return结束了函数,而不是再去执行“end”的打印
在实际函数定义中,如果函数里面没有特意写返回值,也会默认加上一个return None,所以对于这类函数其实也会返回一个None
三,函数参数
1,形参和实参
分形参和实参两种类型,形参理解为就是在定义时声明出来的参数,实参理解为就是在调用函数过程中实际传入的参数。如在本文的第一个例子中a、b为形参,传入的1、2为实参。
2, 必须参数
就是必须要传的参数,否则报错,例如在第一个例子中的a和b,不传就会报错
3,关键字参数
允许实参和形参顺序不一致,因为是通过关键字确定传入的值
def count(a,b):
return(a + b)
c = count(1,2)
d = count(b=2, a=1) #通过关键字来进行赋值
print(c,d) #输出3 3
4,默认参数
就是在函数的定义中即有了默认赋值的形参,起到的作用就是在实参未指定的时候会使用这个默认值
def count(a, b=2): #b给默认值2
return(a + b)
c = count(1) #b未指定赋值即给默认值2
d = count(1, 3)
print(c,d) #输出3 4
5,不定长参数
分为两种,*args和**kwargs,第一个代表元组类型,第二个代表字典类型;
用法:就是给其传入一系列元素,会给打包成元组或字典给函数调用,如果没给传值,则返回的元组或字典为空;注意此参数一定要放到最后
def count0(a, b, *args):
print(a, b, args)
def count1(a, b, **kwargs):
print(a, b, kwargs)
count0(1, 2)
count0(1, 2, 3, 4, 5)
print('----------------------')
count1(1, 2)
count1(1, 2, name='tom', age=2.5)
输出为
1 2 ()
1 2 (3, 4, 5)
----------------------
1 2 {}
1 2 {'name': 'tom', 'age': 2.5}
四,匿名函数
这是代表这一类型的函数,它常用在只需要使少次的,用完即丢弃的场景中。
格式为:lambda arg1[arg2....] : express
用法:在arg1、arg2...中传入参数,然后返回express的执行结果(不需要return),如下
count = lambda a, b : a+b
count(1,2)
输出为3,而如果再执行一次count(1,2)