认识函数
函数的介绍及结构
def 函数名(参数1,参数2,参数3,参数4,....):
函数体
[返回值]
注意:
- 函数主要有两部分组成: 函数的声明部分和函数的实现部分
- def 是define的简写,表示定义函数
- 函数名需要遵循标识符的定义规则,尽量做到见名知意
- 函数名后面的():表示参数列表,参数列表可以为空
- 返回值:一般用于结束函数的执行过程。如果有返回值,该返回值则表示函数执行的结果,如果没有,就相当于返回了一个None
- 函数定义后并不会自动执行,需要进行调佣才会执行函数
- 函数必须先定义,才能进行调用
- 一个函数可以进行多次调用
- 在一个程序中,如果有两个相同的函数名,后面的函数会覆盖前面的函数内容。
示例
def test():
print('Hello World')
test()
def test():
print('你好')
test()
test()
test()
函数的分类
- 函数根据定义方式分为:
- 内置函数:如input()、print()等Python自带的函数
- 自定义函数:需要自己定义功能的函数 - 函数根据有无参数分为:
- 有参数函数:顾名思义,函数定义了参数列表,函数定义时传输的参数叫做形参,函数调用时传入的参数叫做实参
- 没有参数的函数:就是函数定义时没有设置形参 - 根据有无函数名分为:
- 有名的函数:以上说的种种皆为有名的函数,需要给定义的函数设置函数名
- 匿名函数:即乜有名字的函数,通过lambda进行定义 - 根据有无返回值分为:
- 有返回值的函数:函数中通过return结束进行,并返回某个值
- 无返回值的函数:函数运行中不会自动,直到知道函数运行完毕
示例
# 内置函数
print('这是Python内置的函数')
# 自定义函数
def fn1():
print('这是一个没有参数,没有返回值的自定义函数')
fn1()
# 有参数的函数
# a,b 是形参--只是一个容器,并不确定是什么类型的数据,具体是什么数据
def fn2(a,b):
print(a+b)
# 里面的1,3是实参--实际的参数,知道具体的数据
fn2(1,3)
# 传参:是指实际参数传给形式参数的一个过程
# 有返回值的函数
def fn3():
return '这是一个没有参数但有返回值的函数'
print(fn3())
注意:
- 在有返回值的函数中,返回数据使用return关键字返回,如果想直观的看到返回的数据,可以直接使用print()方法输出函数,也可以通过定义变量来接收函数返回的结果
- 函数的返回结果可以是一个,也可以是多个,若返回多个结果,则需要通过逗号隔开,返回的结果是一个元组的形式
- 在函数执行过程中遇到return就会直接返回结果,结束函数的执行,不会执行return后面的程序
- 在函数中若没有return或者return后面没有返回的结果,则默认返回None
- 一般情况下形参和实参的数量是保持一致的
- 在函数中,形参和实参的变量名可以一样,也可以不一样,这不会产生任何影响,因为两者本质上是独立内存
函数中参数的类型
必须参数
在调用函数时,必须按照正确的顺序传入参数,且实参的数量必须和形参保持一致
def Stu(name,age):
print(f'我的姓名是:{name},年龄是{age}')
Stu('张三',25) # 正确
Stu(25) # 报错
关键字参数
函数中如果使用了关键字参数,那么在函数调用时,允许实参和形参的顺序不同,关键字参数会通过关键字自动进行匹配参数
def Stu(name,age):
print(f'我的姓名是:{name},年龄是{age}')
Stu(name='张三',age=25)
Stu(age=25,name='张三')
默认参数
函数在定义时,给形参进行了赋值,如果在函数调用时没有传入该参数,则使用默认参数,如果传入了该参数,则使用传入的参数
注意,如果参数列表中有默认参数,那么需要把默认参数放在参数列表最后
def fn(a,b=53):
print(a+b)
fn(10,20)
fn(20)
不定长参数
不定长参数有两种类型:
- *args:用来接收多个数据,得到的参数会以元组的形式传入
- **kwargs:用来接收多个关键字参数,得到的参数会以字典的形式传入
注意:函数中如果有普通参数和不定长参数时,不定长参数必须在普通参数列表后面
def fn1(*args):
print(*args)
fn1(12,20,45,30)
def fn2(**kwargs):
print(**kwargs)
fn2(name='Mike',age=40,gender='Female')
def fn3(*args,x):
print(*args,x)
fn3(1,False,10.2,2)
参数顺序:普通参数、默认参数、不定长参数
函数的嵌套
函数之间可以互相嵌套,执行函数时,会在遇到嵌套函数时,从最底层的函数开始执行
def fn1():
fn2()
print(1111)
def fn2():
fn3()
print(2222)
def fn3():
fn4()
print(3333)
def fn4()
print(4444)
fn1()
'''
输出结果为:
4444
3333
2222
1111
'''
匿名函数
匿名函数即定义的函数没有函数名,创建函数时需要使用lambda表达式
特点:
lambda只是一个表达式,函数简单
lambda一般情况下只会有一行,有参数、函数实现体、返回值
表达式:
lambda 参数列表:函数体部分(包括返回值)
# 普通函数
def fn(x):
return x**2
print(fn(4))
# 匿名函数
res = lambda x: x**2
print(res(3))
res2 = lambda x,y : x+y
print(res(2,6))
# 匿名函数中也可以使用默认参数
res3 = lambda x,y =6: x*y
print(res(3))
print(res(2,5))
回调函数
回调函数是将一个函数的函数名作为参数传入另一个函数,在另一个函数中,通过调用这个函数的函数名来实现调用函数
# 加法
def jia(x,y):
print(x+y)
# 减法
def jian(x,y):
print(x-y)
# 乘法
def cheng(x,y):
print(x*y)
# 除法
def chu(x,y):
print(x/y)
# 回调函数
def jisuan(x,y,fn)
fn(x,y)
# 加法
jisuan(2,6,jia)
# 减法
jisuan(5,2,jian)
# 乘法
jisuan(2,8,cheng)
# 除法
jisuan(8,1,chu)