day13 匿名函数,内建函数以及闭包
一 匿名函数
意义:为了简化函数代码结构而出现
特点:
1 并非没有名字,名字就是赋值的变量名
2 使用lambda关键字定义
3 lambda关键字后面直接跟形参,逗号分隔
4 函数只写一行,形参后加 :返回值
实例:
mytest=lambda a,b:a*b
print(mytest(2,3)) //此处调用匿名函数,返回值为6
二 内建函数
eval:剥去字符串的外衣,运行里面的代码
s1='1+3'
print(s1) //输出1+3
print(eval(s1)) //输出4
hash:哈希值计算函数
print(hash('aaa'))
help:打印帮助信息
callable:判断一个对象是不是函数名称,能否被调用
mytest=lambda a,b:a*b
print(mytest(2,3))
str='abc'
print(callable(mytest)) //true
print(callable(str)) //false
类型转换函数:int float bin oct hex bytes list dict
max和min:取最大/小值 //取列表l1最小值 min(l1)
三 闭包
意义:保证数据的安全。
简述:在一个外函数中定义了一个内函数,而内函数中引用了外部函数的临时变量,并且外函数的返回值是内部函数名称的引用,这样就构成了一个闭包。
实例:
整个历史中的某个商品的平均收盘价。什么叫平局收盘价呢?就是从这个商品一出现开始,每天记录当天价格,然后计算他的平均值:平均值要考虑直至目前为止所有的价格。
比如大众推出了一款新车:小白轿车。
第一天价格为:100000元,平均收盘价:100000元
第二天价格为:110000元,平均收盘价:(100000 + 110000)/2 元
第三天价格为:120000元,平均收盘价:(100000 + 110000 + 120000)/3 元
# 方案一:
# l1 = [] # 全局变量 数据不安全
# li = []
# def make_averager(new_value):
# l1.append(new_value)
# total = sum(l1)
# averager = total/len(l1)
# return averager
# print(make_averager(100000))
# print(make_averager(110000))
# # 很多代码.....
# l1.append(666)
# print(make_averager(120000))
# print(make_averager(90000))
方案二:闭包
def make_averager():
l1=[]
def averager(new_value):
l1.append(new_value)
total=sum(l1)
average = total/len(l1)
return average
return averager
myaverage=make_averager()
print(myaverage(10000))
print(myaverage(11000))
闭包总结:
简单概况就是内函数引用了外部函数的变量,同时外函数返回值为内函数的名称。