• 函数补充


    1. 今日内容大纲

      • 如何学习?

      • 一定要把预习加上!

      • 分配比例:

        • 2/3 总结,

          • 文字总结,格式,1/3 晚上8~9之前 完成总结以及代码练习。

          • 8~9之后,写作业。

             

    2. 昨日内容回顾作业讲解

      • 生成器:生成器就是迭代器,生成器是自己用python代码构建的。

        • 1,生成器函数

        • 2,生成器表达式

        • 3,python内部提供的。

      • 如何判断你函数,还是生成器函数?

        • yield

        • yield return

      • 吃包子。敲三遍。

      • yield from 将一个可迭代对象,变成一个生成器。

      • 列表推导式,生成器表达式。

        • 循环模式: [变量(加工后的变量) for 变量 in iterable]

        • 筛选模式: [变量(加工后的变量) for 变量 in iterable if 条件]

      • 内置函数?68.

      •  

    3. 今日内容

      1. 匿名函数:一句话函数,比较简单的函数。

         

        1. 此函数不是没有名字,他是有名字的,他的名字就是你给其设置的变量,比如func.

        2. lambda 是定义匿名函数的关键字,相当于函数的def.

        3. lambda 后面直接加形参,形参加多少都可以,只要用逗号隔开就行。

        4. 返回值在冒号之后设置,返回值和正常的函数一样,可以是任意数据类型。

        5. 匿名函数不管多复杂.只能写一行.且逻辑结束后直接返回数据

        课上练习:

        1  def func(a,b):
        2      return a + b
        3  # 构建匿名函数
        4  func1 = lambda a,b: a + b
        5  print(func1(1,2))
        6
        • 接收一个可切片的数据,返回索引为0与2的对应的元素(元组形式)。

        • 1  func2 = lambda a: (a[0],a[2])
          2  print(func2([22,33,44,55]))
        • 写匿名函数:接收两个int参数,将较大的数据返回。

        •  
          1 lambda a,b: a if a > b else b
      2. 内置函数

          1  # # python 提供了68个内置函数。
          2  # # 今天讲的这部分大部分了解即可。
          3  # # eval 剥去字符串的外衣运算里面的代码,有返回值。  **
          4  # s1 = '1 + 3'
          5  # # print(s1)
          6  # # print(eval(s1))  **
          7  # # s = '{"name": "alex"}'
          8  # # print(s,type(s))
          9  # # print(dict(s)) # 不行
         10  # # print(eval(s),type(eval(s)))
         11  # # 网络传输的str input 输入的时候,sql注入等等绝对不能使用eval。
         12  #
         13  # # exec 与eval几乎一样, 代码流。
         14  # msg = """
         15  # for i in range(10):
         16  #     print(i)
         17  # """
         18  # # print(msg)
         19  # # exec(msg)
         20  # # hash 哈希值
         21  # # print(hash('fsjkdafsda'))
         22  #
         23  # # help 帮助  **
         24  # # s1 = 'fjdsls'
         25  # # print(help(str))
         26  # # print(help(str.upper))
         27  # # s1 = 'sfsda'
         28  # # s1.upper()
         29  #
         30  #
         31  # s1 = 'fdsklfa'
         32  # # s1()
         33  # def func():
         34  #     pass
         35  # # func
         36  # # # callable 判断一个对象是否可被调用  ***
         37  # # print(callable(s1))
         38  # # print(callable(func))
         39  40  # int
         41  # print(int(3.6))
         42  43  # float
         44  # print(type(3.6))
         45  46  # print(complex(1,2))  # (1+2j)
         47  48  # bin:将十进制转换成二进制并返回。  **
         49  # print(bin(100))
         50  # # oct:将十进制转化成八进制字符串并返回。  **
         51  # print(oct(10))
         52  # # hex:将十进制转化成十六进制字符串并返回。  **
         53  # print(hex(10))
         54  # print(hex(13))
         55  56  # divmod  **
         57  # print(divmod(10,3))
         58  # round:保留浮点数的小数位数  **
         59  # print(round(3.141592653, 2))  # 3.14
         60  # pow:求x**y次幂。(三个参数为x**y的结果对z取余)
         61  # print(pow(2,3))  **
         62  # print(pow(2,3,3))  #   2**3 % 3
         63  64  # bytes ***
         65  s1 = '太白'
         66  # b = s1.encode('utf-8')
         67  # print(b)
         68  # b = bytes(s1,encoding='utf-8')
         69  # print(b)
         70  71  # ord:输入字符找该字符编码的位置
         72  # ascii Unicode
         73  # print(ord('a'))  #
         74  # print(ord(''))  # 20013  Unicode
         75  # # chr:输入位置数字找出其对应的字符 #  **
         76  # # print(chr(97))
         77  # print(chr(20013))  # Unicode
         78  79  # repr:返回一个对象的string形式(原形毕露)。  ***
         80  # s1 = '存龙'
         81  # # # print(s1)
         82  # # print(repr(s1))
         83  # # msg = '我叫%s' %(s1)
         84  # msg = '我叫%r' %(s1)
         85  # print(msg)
         86  # all:可迭代对象中,全都是True才是True
         87  # l1 = [1, 2, '太白', True, [1,2,3], '']
         88  # print(all(l1))
         89  # any:可迭代对象中,有一个True 就是True
         90  # l1 = [ 0, '太白', False, [], '',()]
         91  # print(any(l1))
         92  93  # print(self, *args, sep=' ', end='
        ', file=None)
         94  # print(1,2,3,4)
         95  # print(1,2,3,4,sep='&')
         96  # print(1, end=' ')
         97  # print(2)
         98  99  # list
        100  # l1 = [1,2,3,4]
        101  # l2 = list()
        102  # l2 = list('fjfdsklagjsflag')
        103  # print(l2)
        104 105  # dict 创建字典的几种方式
        106  # 直接创建
        107  # 元组的解构
        108  # dic = dict([(1,'one'),(2,'two'),(3,'three')])
        109  # dic = dict(one=1,two=2)
        110  # print(dic)
        111  # fromkeys
        112  # update
        113  # 字典的推导式
        114 115  # abs()  ***
        116  # print(abs(-6))
        117 118  # sum  ***
        119  # l1 = [i for i in range(10)]
        120  # s1 = '12345'
        121  # print(sum(l1))
        122  # print(sum(l1,100))
        123  # print(sum(s1))  # 错误
        124 125  # reversed  返回的是一个翻转的迭代器  ***
        126  # l1 = [i for i in range(10)]
        127  # # l1.reverse()  # 列表的方法
        128  # # print(l1)
        129  # l1 = [i for i in range(10)]
        130  # obj = reversed(l1)
        131  # print(l1)
        132  # print(list(obj))
        133 134  # zip 拉链方法  ***
        135  # l1 = [1, 2, 3, 4, 5]
        136  # tu1 = ('太白', 'b哥', '德刚')
        137  # s1 = 'abcd'
        138  # obj = zip(l1,tu1,s1)
        139  # # # print(obj)
        140  # # for i in obj:
        141  # #     print(i)
        142  # print(list(obj))
        143  # *************  以下方法最最最重要
        144  # min max
        145  l1 = [33, 2, 3, 54, 7, -1, -9]
        146  # print(min(l1))
        147  # 以绝对值的方式去最小值
        148  # l2 = []
        149  # func = lambda a: abs(a)
        150  # for i in l1:
        151  #     l2.append(func(i))
        152  # print(min(l2))
        153  # def abss(a):
        154  #     '''
        155  #     第一次:a = 33  以绝对值取最小值  33
        156  #     第二次:a = 2  以绝对值取最小值  2
        157  #     第三次:a = 3  以绝对值取最小值  2
        158  #     ......
        159  #     第六次:a = -1   以绝对值取最小值  1
        160  #
        161  #     '''
        162  #     return abs(a)
        163  # print(min(l1,key=abss))
        164  # 凡是可以加key的:它会自动的将可迭代对象中的每个元素按照顺序传入key对应的函数中,
        165  # 以返回值比较大小。
        166  dic = {'a': 3, 'b': 2, 'c': 1}
        167  # 求出值最小的键
        168  # print(min(dic))  # min默认会按照字典的键去比较大小。
        169  # def func(a):
        170  #     return dic[a]
        171  # func = lambda a:dic[a]
        172  print(min(dic,key=lambda a: dic[a]))
      3. 闭包:

        整个历史中的某个商品的平均收盘价。什么叫平局收盘价呢?就是从这个商品一出现开始,每天记录当天价格,然后计算他的平均值:平均值要考虑直至目前为止所有的价格。

        比如大众推出了一款新车:小白轿车。

        第一天价格为:100000元,平均收盘价:100000元

        第二天价格为:110000元,平均收盘价:(100000 + 110000)/2 元

        第三天价格为:120000元,平均收盘价:(100000 + 110000 + 120000)/3 元

    4. 今日总结

      • 匿名函数。

      • 内置函数。*** 一定要记住,敲3遍以上。 ** 尽量记住,2遍。

      • 闭包:

          1  # 封闭的东西: 保证数据的安全。
          2   3  # 方案一:
          4  # l1 = []  # 全局变量 数据不安全
          5  # li = []
          6  # def make_averager(new_value):
          7  #     l1.append(new_value)
          8  #     total = sum(l1)
          9  #     averager = total/len(l1)
         10  #     return averager
         11  # print(make_averager(100000))
         12  # print(make_averager(110000))
         13  # # 很多代码.....
         14  # l1.append(666)
         15  # print(make_averager(120000))
         16  # print(make_averager(90000))
         17  18  # 方案二: 数据安全,l1不能是全局变量。
         19  # 每次执行的时候,l1列表都会重新赋值成[]
         20  # li = []
         21  # def make_averager(new_value):
         22  #     l1 = []
         23  #     l1.append(new_value)
         24  #     total = sum(l1)
         25  #     averager = total/len(l1)
         26  #     return averager
         27  # print(make_averager(100000))
         28  # print(make_averager(110000))
         29  # # 很多代码.....
         30  # print(make_averager(120000))
         31  # print(make_averager(90000))
         32  33  # 方案三: 闭包
         34  35  #
         36  def make_averager():
         37      l1 = []
         38      def averager(new_value):
         39          l1.append(new_value)
         40          print(l1)
         41          total = sum(l1)
         42          return total/len(l1)
         43      return averager
         44  45  # avg = make_averager()  # averager
         46  # print(avg(100000))
         47  # print(avg(110000))
         48  # print(avg(120000))
         49  # print(avg(190000))
         50  51  # def func():
         52  #     return 666
         53  #
         54  # ret = func()
         55  # print(globals())
         56  57  # 闭包: 多用于面试题: 什么是闭包? 闭包有什么作用。
         58  # 1,闭包只能存在嵌套函数中。
         59  # 2, 内层函数对外层函数非全局变量的引用(使用),就会形成闭包。
         60  # 被引用的非全局变量也称作自由变量,这个自由变量会与内层函数产生一个绑定关系,
         61  # 自由变量不会再内存中消失。
         62  # 闭包的作用:保证数据的安全。
         63  64  # 如何判断一个嵌套函数是不是闭包
         65  66  # 1,闭包只能存在嵌套函数中。
         67  # 2, 内层函数对外层函数非全局变量的引用(使用),就会形成闭包。
         68  # 例一:
         69  # def wrapper():
         70  #     a = 1
         71  #     def inner():
         72  #         print(a)
         73  #     return inner
         74  # ret = wrapper()
         75  76  #
         77  # # 例二:
         78  # a = 2
         79  # def wrapper():
         80  #     def inner():
         81  #         print(a)
         82  #     return inner
         83  # ret = wrapper()
         84  85  86  # # 例三:
         87  #   也是闭包!
         88  # def wrapper(a,b):
         89  #     def inner():
         90  #         print(a)
         91  #         print(b)
         92  #     return inner
         93  # a = 2
         94  # b = 3
         95  # ret = wrapper(a,b)
         96  # print(ret.__code__.co_freevars)  # ('a', 'b')
         97  # 如何代码判断闭包?
         98  99  def make_averager():
        100      l1 = []
        101      def averager(new_value):
        102          l1.append(new_value)
        103          print(l1)
        104          total = sum(l1)
        105          return total/len(l1)
        106      return averager
        107 108  avg = make_averager()  # averager
        109  print(avg.__code__.co_freevars)

         

        1  闭包: 多用于面试题: 什么是闭包? 闭包有什么作用。
        2  1,闭包只能存在嵌套函数中。
        3  2, 内层函数对外层函数非全局变量的引用(使用),就会形成闭包。
        4  被引用的非全局变量也称作自由变量,这个自由变量会与内层函数产生一个绑定关系,
        5  自由变量不会再内存中消失。
        6  闭包的作用:保证数据的安全。
    5. 预习内容:装饰器。

    6.  

  • 相关阅读:
    fixed与sticky的区别
    自我介绍以及web课程目标
    DOM&BOM
    web中常用单位的使用
    Oracle 使用 DBLINK详解(转载) 挪威
    Sql server 无法删除用户的处理办法(转载) 挪威
    ICMP类型
    makefile笔记
    [笔记]Makefile wildcard
    在Visual Studio 2005下配置WinPcap开发环境
  • 原文地址:https://www.cnblogs.com/zhangxiangning/p/10220613.html
Copyright © 2020-2023  润新知