函数
1、什么是函数
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
用人话来说就是:需要某块代码多次,为了提高编写的效率以及代码的重用,把具有独立功能的代码段组织为一个小模块,需要时就可以直接调用,这就是函数
函数能提高应用的模块性,和代码的重复利用率
Python 定义函数使用 def 关键字,一般格式如下:
def函数名(参数列表):
......
函数体
......return 返回值
def:表示函数的关键字
函数名:函数的名称,日后根据函数名调用函数
函数体:函数中进行一系列的逻辑计算,如:发送邮件、计算出 [11,22,38,888,2]中的最大数等...
参数:为函数体提供数据
返回值:当函数执行完毕后,可以给调用者返回数据。
其中参数和返回值不是必须的
2、函数的定义和调用
自定义一个函数,求和
#自定义一个函数求两个数 之和
defmy_func(a,b):return a +b#调用函数
f = my_func(3,88)#打印结果
print(f)
运行结果:91
每次调用函数时,函数会从头开始执行,当这个函数中的代码执行完毕,也意味着调用结束
如果函数中执行到了return也会结束函数
3、函数的参数
3.1、实参和形参
#自定义一个函数求两个数 之和
defmy_func(a,b):return a +b#调用函数
f = my_func(3,88)
其中,上面代码,定义时小括号中的参数,用来接收参数用的,称为 “形参”;调用时小括号中的参数,用来传递给函数用的,称为 “实参”
3.2、按调用函数时参数的书写方式 分为:位置参数与关键字参数
位置参数
#自定义一个函数求两个数 之和
defmy_func(a,b):return a +b#调用函数时实参只输入一个
f = my_func(3)
上面代码运行时会报错,因为定义函数时有两个形参,而调用时只输入了一个实参
结论:使用位置参数调用函数 需要注意实参的位置,实参的位置和形参的位置要一一对应,少传一个实参会报错
关键字参数
#定义一个函数
defmy_print(name, age, no):print("我的名字:%s" %name)print("我的年龄:%d" %age)print("学号:%s" %no)#使用关键字参数方式调用函数
my_print(age=23,name='洗涤',no=1)
调用函数的时候使用的是函数的形参名;若关键字参数与位置参数混合使用,需要让位置参数在前 ,关键字参数再后,某个参数使用了关键字参数,后面的都要使用关键字参数
3.3、默认参数(缺省参数)
默认参数即定义时给形参设置一个默认值,后面调用的时候这个参数就可以不写,直接取默认值;也可以后面把一个新的值给到此参数,调用时不给值则默认
#定义一个有默认参数的函数
def my_print(name, no, age=20):print("我的名字:%s" %name)print("我的年龄:%d" %age)print("学号:%s" %no)#调用函数
my_print('小明','007')
运行结果:
我的名字:小明
我的年龄:20
学号:007
此时调用函数时可以不写默认的那个参数,定义有默认参数的时候,需要把默认参数写在最后
3.4、可变参数(可以实现函数定义,以及函数调用时,参数个数不匹配的情况)
待补充..................
4、函数的返回值(return+表达式)
用于退出函数,选择性地向调用方返回一个表达式。不带参数值的return语句返回None
4.1、单个返回值
#定义一个求和函数
defsmqh(a,b):
re= a +b#有一个返回值
returnre
d= smqh(23,2)print(d)
# 如果有一个return+数值,称之为这个函数有返回值
4.2、多个返回值
defmy_func(score):if score <0:print("您传入的分数有误!!!")#函数的执行提前结束
return
#return后面没有值,什么都不返回,这是性能才考虑到的,因为分数小于0 ,后面的不需要再比较,无意义
#对分数进行判断
if score >= 90:return "优"
elif score >= 80:return "良"
elif score >= 60:return "中"
elif score >=0:return "差"
#他不会执行 因为在前面已经执行了return
print("测试")
return的作用:1、作为函数的返回值
2、执行的函数提前结束(一个函数中可以有多个return语句,只要有一个return语句被执行到,这个函数就会结束了,因此后面的return没有什么用处)
5、函数的嵌套
#写一个函数打印一条横线
defp_one_d():print('-'*20)#打印自定义函数的横线
defp_line(num):for i inrange(num):
p_one_d()#调用函数
p_line(3)
运行结果:
--------------------
--------------------
--------------------
函数p_one_d()嵌套在函数p_line()里面,调用函数p_line()时,p_line()函数多次调用了p_one(),这就是函数的嵌套调用
6、函数的文档说明
看文档说明需要用到python的内置函数help(),用来查看python函数的文档说明
若自定义函数没有文档说明,使用help时默认会打印函数附近的注释
其作用:1、可以在时间过了很久后 快速读懂自己的代码;2、便于工作的交接
格式:help(函数名称)
defsumhe(num1,num2):'''这是求和的
:param num1:数字1
:param num2: 数字2
:return: 返回两个数字相加'''
return num1 +num2
help(sumhe)
==================================================
代码运行结果:
sumhe(num1, num2)
这是求和的
:param num1:数字1
:param num2: 数字2
:return: 返回两个数字相加
7、匿名函数
在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便.(匿名函数没有函数名)
匿名函数用关键字lambda定义
7.1、定义普通函数和定义lambda函数的方法和区别:
###########普通函数##############定义一个普通求和函数
defsuma(a,b):return a +bprint(suma(3,4))###########lambda#############
f = lambda a,b: a+b
ret= f(3,2)print(ret)
lambda的意义就是为了简洁的表达函数
解释:lambda a,b : a + b
冒号左边的lambda 相当于函数的名字(),a,b就是函数的形参;冒号右边的内容就是函数的返回值
匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果
7.2、把函数当做参数传递
defsanf(a,b,c):print('a = %d' %a)print('b = %d' %b)print('result:%d' % c(a,b))#c是一个函数,当做参数来用
f = lambda a,b : a +b
sanf(1, 3, f)
运行结果:
a = 1
b = 3
result:4