# 数字作为参数
def avg(x,y): #定义一个函数avg,用来求两个数的平均数
return (x+y)/2
result1=avg(x=2,y=8) #用result1变量名来存储结果
print(result1)
# 字符串作为参数
def say(name):
return name+'永远18岁'
result2=say(name='王老师')
print(result2)
# 请大家一起拥有一个大胆的想法,函数名能不能作为参数?
# 先说答案:能!必须能!
# 先看个例子
# 上面我们定义了avg()函数用来求两个数的平均数
# 这里我们再定义一个函数,也是求平均值
# 那我是不是可以调用上面的avg()函数
def avg_(a,b):
return avg(a,b) #调用上面的avg()函数
result3=avg_(10,30)
print(result3)
#但是我们一般这样写成回调函数的形式:
def call_avg(avg,a,b):
return avg(a,b)
# def 函数名(avg,a,b):
# return 函数名(a,b)
result4=call_avg(avg,10,30)
print(result4)
# 结果依旧正确
# 所以请大家记住两件事
# 第一件事,函数名可以做参数,通过函数名就可以调用这个函数,实现这个函数的功能;
# 第二件事,这样的函数叫做回调函数
# 被叫做回调函数,不是说这个函数有特别之处,只是被当作参数使用而已
# 概念很简单,但是用法很精妙
# 比如
# 到了7点就播放起床音乐铃
# def playmusic():
# 播放音乐的代码
# 可是程序怎么知道时间刚好到了7点呢?
# 比较笨的方法:
# 搞一个循环,不停的查看系统的时间。
# while true:
#获取现在的时间,如果现在是早上7点
#调用函数playmusic()
# 虽能达到目的,但是绝大多数时间都在循坏里折腾,无意义的消耗
# 好的办法:
# # 利用系统提供的定时服务
import threading
timer=threading.Timer(3,playmusic)
# 这里的秒数就是距离当前时间距离7点还有多少秒
# playmusic函数名也作为了参数传给了系统,就是告诉系统,时间到的时候,就调用这个函数就行了
# 在系统内部自有一套计时的方法,于是在3秒之后就会调用这个函数
# 显然,这是一个回调函数
# 回调函数的作用:
# 1.恰当的时机去做某件事
# 2.让程序设计更灵活
# 你到一个商店买东西,刚好你要的东西没有货
# 于是你在店员那里留下了你的电话
# 过了几天店里有货了,店员帮你买了。
# 在这个例子里,你的电话号码就叫回调函数,
# 你把电话留给店员就叫登记回调函数,
# 店里后来有货了叫做触发了回调关联的事件,
# 店员帮你买了叫做调用回调函数。
# 再举个例子
# 有一个列表,列表里面是你们班和1班的学号
# 前四个数字2022代表年级,第五六个数字代表班级号,01班和02班
# 第七个数字代表男生还是女生,数字0为女生,数字1为男生
# 最后两个数字是每个人都不一样的序号
lst=['202202003','202201101','202202105','2022021006','202201109']
# 我们想根据班级号01和02来做出排序
# 首先,我们知道排序的函数是sorted(参数,key=规则)
# 那我们针对lst进行排序的时候,还要给出规则,规则就是依据学号的第五六个字符来排序
# 那我们是不是可以先写一个函数,只要输入一个学号,就选中他的第五六个数字
def byclass(x): # 定义一个byclass(),只要往里面传x
return x[4:6] # 就返回这个x的第五六个字符(从0开始索引,所以是[4:6],左边的4是闭区间,右边的6是开区间)
result5=sorted(lst,key=byclass) # 用sorted排序,规则就是byclass函数的返回值,sorted就会根据第五六个数字来排序
print(result5)
# 在这里面,我们就是使用sorted的时候调用了其他函数作为我们排序的规则!
素材依据:b站up主偶尔有点小迷糊的回调函数视频。