函数补充
-
-
如何学习?
-
一定要把预习加上!
-
分配比例:
-
-
文字总结,格式,1/3 晚上8~9之前 完成总结以及代码练习。
-
8~9之后,写作业。
-
-
-
-
昨日内容回顾作业讲解
-
生成器:生成器就是迭代器,生成器是自己用python代码构建的。
-
1,生成器函数
-
2,生成器表达式
-
3,python内部提供的。
-
-
如何判断你函数,还是生成器函数?
-
yield
-
yield return
-
-
吃包子。敲三遍。
-
yield from 将一个可迭代对象,变成一个生成器。
-
列表推导式,生成器表达式。
-
循环模式: [变量(加工后的变量) for 变量 in iterable]
-
筛选模式: [变量(加工后的变量) for 变量 in iterable if 条件]
-
-
内置函数?68.
-
-
-
今日内容
-
匿名函数:一句话函数,比较简单的函数。
-
此函数不是没有名字,他是有名字的,他的名字就是你给其设置的变量,比如func.
-
lambda 是定义匿名函数的关键字,相当于函数的def.
-
lambda 后面直接加形参,形参加多少都可以,只要用逗号隔开就行。
-
返回值在冒号之后设置,返回值和正常的函数一样,可以是任意数据类型。
-
匿名函数不管多复杂.只能写一行.且逻辑结束后直接返回数据
课上练习:
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
-
-
内置函数
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]))
-
闭包:
整个历史中的某个商品的平均收盘价。什么叫平局收盘价呢?就是从这个商品一出现开始,每天记录当天价格,然后计算他的平均值:平均值要考虑直至目前为止所有的价格。
比如大众推出了一款新车:小白轿车。
第一天价格为:100000元,平均收盘价:100000元
第二天价格为:110000元,平均收盘价:(100000 + 110000)/2 元
第三天价格为:120000元,平均收盘价:(100000 + 110000 + 120000)/3 元
-
-
今日总结
-
匿名函数。
-
内置函数。
***
一定要记住,敲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 闭包的作用:保证数据的安全。
-
-
预习内容:装饰器。
-