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))
 
闭包总结:
简单概况就是内函数引用了外部函数的变量,同时外函数返回值为内函数的名称。
 
posted @ 2020-06-04 15:28  武林人捕鱼为业  阅读(119)  评论(0编辑  收藏  举报