函数补充

  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='\n', 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.  

posted @ 2019-01-11 16:23  .如影随行  阅读(172)  评论(0编辑  收藏  举报