18. 函数

96 阅读4分钟

这节主要讲函数的基础概念,包括定义调用,各基础概念讲解

一,概念理解

函数可以理解为就是可以直接拿来用去实现某一目的的代码段,有很多定义好的可以直接拿来用的函数,如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)