1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # Author:Source 4 import time,functools 5 #装饰器。本质上是函数,作用是为其它函数添加附加功能。 6 #原则:1、不能修改被装饰的函数的源代码 2、不能修改被装饰的函数的调用方式。 7 #为什么说本质上是函数呢? 8 def test():#关键字是def 9 '别害怕,仅仅只是一个测试函数而已' 10 print("Don't worry.Just test.") 11 func = test#func变量表示的是一个函数对象的实例 12 print(func)#不带括号表示一个函数 13 print(func())#带括号时候直接调用函数 14 def statistics_time(fuc): 15 '统计程序运算时间的函数' 16 time_begin = time.time() 17 fuc() 18 time_finish = time.time() 19 print("The function spend %s to run."%(time_finish-time_begin)) 20 statistics_time(test)#它违反了装饰器的第二个原则 21 def statistics_time_2(fuc): 22 print(fuc) 23 return test 24 test = statistics_time_2('ojbk') 25 test()#其中的print(fuc)作为了增加的功能 26 #高阶函数 27 #其一,在不修改函数的调用方式的情况下,返回值中包含函数名。其二,在不修改装饰函数的源代码的情况下,把一个函数名当作实参传给另一个函数 28 #满足其中一个就是高阶函数 29 def timer():#函数嵌套 30 def deco(): 31 pass 32 #高阶函数 + 函数嵌套 =》装饰器 33 def function_run_time(func): 34 '统计程序运行时间的高阶函数' 35 def internal(): 36 time_begin = time.time() 37 func() 38 time_finish = time.time() 39 print("The function spend %s to run."%(time_finish- time_begin)) 40 return internal 41 @function_run_time #类似与 test_1 = funtion_run_time(test_1) 42 def test_1(): 43 '只是一个测试小程序而已' 44 time.sleep(1) 45 print("Just test again.") 46 #test_1() 47 #匿名函数lambda 48 x_1 = lambda x:x+7 49 print(x_1(7)) 50 (lambda n:print(n))(5) 51 x_2 = lambda n:print(n) 52 x_2(5) 53 #三元运算 54 x_3 = lambda x:1 if x<5 else 2 55 print(x_3(1),x_3(5)) 56 #filter()按照一定的规则过滤+三元运算 57 res = filter(lambda n:n>5,range(10)) 58 for i in res: 59 print(i) 60 #map(),对传入的值按规律处理并覆盖原有数据。 61 x_4 = map(lambda x:x*2,range(10)) 62 for i in x_4: 63 print(i) 64 x_5 = [i*2 for i in range(10)]#列表生成式 65 print(x_5) 66 x_6= [lambda i:i*2 for i in range(10)]#不晓得为什么读出来的是地址 67 #reduce,需要先调用fuctools。函数将一个数据集合中的所有数据进行下列操作:用传给reduce中的函数function(有两个参数)先对集合 68 #中的第1、2个元素进行操作,得到的结果再与第三个数据用function函数运算,最后得到一个结果。 69 def multiplication(x,y): 70 return x*y 71 print(functools.reduce(multiplication,[1,2,3,4,5])) 72 print(functools.reduce(lambda x,y:x*y,[1,2,3,4,5])) 73 print(functools.reduce(lambda x,y:x+y,[1,2,3,4,5])) 74 #生成器,都是迭代器对象只有在调用的时候才会生成相应的数据 75 #for example 76 builder = (i*2 for i in range(3)) 77 # print(builder)#显示的是所在内存地址 78 # print(builder.__next__()) 79 # print(builder.__next__()) 80 # print(builder.__next__())#只记住当前位置,超出会报错 81 # print(next(builder)) 82 # print(next(builder)) 83 # print(next(builder)) 84 # for i in builder:#要用这种方式才可以调用 85 # print(i) 86 #斐波那契函数,第三个数等于前两个数的和。 87 '''def Fibonacci(time): 88 x,y =0,1, 89 while time>0: 90 #print(y) 91 yield y#yield 的作用就是把一个函数变成一个 generator 92 x,y = y,x+y#带有 yield 的函数不再是一个普通函数,Python解释器会将其视为一个 generator 93 time -=1#执行到 yield b 时,fab 函数就返回一个迭代值,下次迭代时,代码从 yield b 的下一条语句继续执行, 94 # 而函数的本地变量看起来和上次中断执行前是完全一样的,于是函数继续执行,直到再次遇到 yield 95 return '-----done-----' 96 g = Fibonacci(10) 97 while True: 98 try:#正常执行程序执行try下的程序,执行出错时执行except里的 99 x = next(g) 100 print("g:",x) 101 except StopIteration as e: 102 print("Generator return value:",e.value) 103 break''' 104 '''def producer(name): 105 c1 = consumer("A") 106 c2 = consumer("B") 107 c1.__next__() 108 c2.__next__() 109 print("开始准备做包子了!") 110 for i in range(10): 111 time.sleep(0) 112 print("做了两个包子。") 113 c1.send(i) 114 c2.send(i) 115 def consumer(name): 116 print("准备吃包子了.") 117 while True: 118 baozi = yield 119 print("包子[%s]来了,被[%s]吃了!"%(baozi,name)) 120 producer('Souce')''' 121 #包子程序开始从producer运行,运行到__next__()时候,唤醒yield执行含有yield的conseumer。运行到yield的时候,保存当前状态,返回 122 #继续运行producer,运行到producer的send后唤醒yield并传值给yield然后继续执行consumer。再次consumer的yield则保存状态返回到producer 123 #send继续运行 124 #迭代器,可以直接作用于for循环的数据类型。 125 #可迭代对象(iterable)for example: 126 from collections import Iterable 127 print(isinstance([],Iterable))#列表 128 print(isinstance([i*2 for i in range(10)],Iterable))#列表生成式 129 print(isinstance(builder,Iterable))#生成器 130 print(isinstance((),Iterable))#元组 131 print(isinstance(set([1,1,2,3]),Iterable))#集合 132 print(isinstance({},Iterable))#列表 133 print(isinstance('',Iterable))#字符串 134 #可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator 135 #for example: 136 from collections import Iterator 137 print(isinstance(builder,Iterator))#生成器 138 print(isinstance([],Iterator)) 139 print(isinstance(iter({}),Iterator))#iter()可以把list、dict、str等Iterable变成Iterator 140 print(isinstance('',Iterator)) 141 #为什么list、dict、str等数据类型不是Iterator 142 '''这是因为Python的Iterator对象表示的是一个数据流,Iterator对象可以被next()函数调用并不断返回下一个数据,直到没有数据 143 时抛出StopIteration错误,可以把这个数据流看做是一个有序序列,但我们却不能提前知道序列的长度,只能不断通过next()函数实 144 现按需计算下一个数据,所以Iterator的计算是惰性的,只有在需要返回时它才会计算。 145 Iterator甚至可以表示一个无限大的数据流,例如全体自然数,而使用list是永远不可能存储全体自然数的。 146 ''' 147 #for循环的本质上是通过不断调用next()函数实现的,例如: 148 #先获得Iterator对象 149 it_tor = iter([1,2,3,4,5]) 150 while True: 151 try: 152 #获得下一个值 153 x = next(it_tor) 154 print(x) 155 except StopIteration: 156 break 157 #装饰器终极版,网站页面的浏览权限限制,也就是登录验证。 158 '''user,pawd='source','123456' 159 def verification(way): 160 def select(func): 161 def verify(*args,**kwargs): 162 username = input('username:'.strip()) 163 password = input('password:'.strip()) 164 if way=='local': 165 if username == user and password == pawd: 166 print('\033[32;1mwelecome your enter!\033[0m'.capitalize()) 167 res = func(*args,**kwargs) 168 print('what?'.center(50,'*')) 169 return res 170 else: 171 print('\033[31;1minvalid username or password.\033[0m'.capitalize()) 172 elif way=='ldap': 173 print("\033[33;1mI haven't learned.\033[0m") 174 return verify 175 return select 176 def first_door(): 177 print('welcome to the first door.'.capitalize()) 178 @verification(way='local') #send_door = verify 179 def second_door(): 180 print('welcome to the second door.'.capitalize()) 181 return 'This Ok' 182 @verification(way='ldap') 183 def third_door(): 184 print('welcome to the third door.'.capitalize()) 185 first_door() 186 print(second_door()) 187 third_door()''' 188 #abs(),返回数字的绝对值 189 print(abs(-8)) 190 #all(),如果迭代器中所有元素都为真则返回真。记住一点非零为真。用于判断给定的可迭代参数 iterable 中的所有元素是否都为 TRUE, 191 # 如果是返回 True,否则返回 False。 192 #元素除了是 0、空、FALSE 外都算 TRUE。 193 print(all((-8,2,3))) 194 iterable_list = [i*2 for i in range(10)] 195 print(all(iterable_list)) 196 #all()实质上是: 197 def all_function(iterable): 198 for element in iterable: 199 if not element: 200 return False 201 return True 202 print(all_function([-2,6,0])) 203 #any(),可迭代数据里任意一个数据为真则返回真,空列表返回假。 204 print(any([0])) 205 print(any([0,1])) 206 #ascii(),把一个内存对象变为可打印字符串的形式 207 print("just test.") 208 print(ascii("just test.")) 209 #bin(),将十进制转二进制 210 for i in range(15): 211 print(bin(i)) 212 #bytearray(),能对数据进行修改。注意:字符串不能修改,二进制字节格式不能修改。bytearray() 方法返回一个新字节数组。这个数组 213 # 里的元素是可变的,并且每个元素的值范围: 0 <= x < 256。 214 #class bytearray([source[, encoding[, errors]]]) 215 print(bytearray([])) 216 a = bytearray([3,2,1])#如果 source 为整数,则返回一个长度为 source 的初始化数组 217 print(a) 218 a.append(4) 219 a[0] = 5#修改字符 220 print(a) 221 bytearray_test = 'just test.' 222 b = bytearray(bytearray_test,'utf-8')#如果 source 为字符串,则按照指定的 encoding 将字符串转换为字节序列 223 print(b[0],b[1],b[2])#打印出来的是ASCII码 224 b[0] = 97#能修改字符 225 print(b) 226 print(bytearray(iterable_list))#如果 source 为可迭代类型,则元素必须为[0 ,255] 中的整数 227 iterable_list[1]=4#修改 228 print(bytearray(iterable_list)) 229 #callable(),可不可以调用。注意:后面可以加括号的就是可以调用的。 230 print(callable(input)) 231 print(callable(type)) 232 #chr(),查看数字对应的ascall。 233 print(chr(97)) 234 #ord(),查看ascall对应的数字。 235 print(ord('d')) 236 #classmethod()修饰符对应的函数不需要实例。 237 # 化,不需要 self 参数,但第一个参数需要是表示自身类的 cls 参数,可以来调用类的属性, 238 # 类的方法,实例化对象等。 239 class A(object): 240 bar = 1 241 def func1(self): 242 print("foo") 243 @classmethod 244 def func2(cls): 245 print("func2") 246 print(cls.bar) 247 cls().func1() 248 A.func2() 249 #compile,底层的用于将代码编译的过程.将一个字符串编译为字节代码。 250 str = "for i in range(10):print(i)" 251 c = compile(str,'',mode = 'exec') 252 exec(c) 253 #delattr()函数用于删除属性。delattr(x, 'foobar') 相等于 del x.foobar。 254 class coordinate: 255 x = 10 256 y = 8 257 z = 6 258 point = coordinate() 259 print("x = ",point.x) 260 print("y = ",point.y) 261 print("z = ",point.z) 262 delattr(coordinate,'x') 263 print("del x ") 264 print("y = ",point.y) 265 print("z = ",point.z) 266 #dict(),用于创建一个字典。 267 dic = dict()#创建一个空字典 268 print(dic) 269 dict1 = dict(a = 1 ,b ='b',c = 'good')#传入关键字 270 print(dict1) 271 dict2 = dict(zip(['one','two','three'],[1,2,3]))#映射函数的方式构造字典 272 dict3 = dict([('nine',9),("eight",8),('seven',7)])#可迭代对象方式构造字典 273 print(dict2,dict3) 274 #dir(),查看有什么方法可以用。dir() 函数不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、 275 # 方法列表。如果参数包含方法__dir__(),该方法将被调用。如果参数不包含__dir__(),该方法将最大限度地收集参数信息。 276 print(dir())#返回当前范围内的变量、方法和定义的类型列表。 277 print(dir(dict))#带参数时,返回参数的属性、方法列表。 278 #divmod(a,b),相除返回商,余数。 279 print(divmod(6,3)) 280 #eval(),将字符串变成字典。注意(字符类型、加减乘除、难的不行).用来执行一个字符串表达式,并返回表达式的值。 281 x = 3 282 print(eval('3*x')) 283 print(eval('pow(2,3)'))#2**3 284 print(eval('abs(-3/x)')) 285 #exec(),能处理男的eval()。例如循环 286 def Fibonacci_test_again(TIME): 287 x,y, = 0,1 288 while TIME>0: 289 yield y 290 x,y = y,x+y 291 TIME-=1 292 return 'Over maximum.' 293 g = Fibonacci_test_again(10) 294 while True: 295 try: 296 x= next(g) 297 print('g:',x) 298 except StopIteration as e: 299 print("Generator return value:",e.value) 300 break 301 #lambda,匿名函数。 302 (lambda n:print('n:',n))(5) 303 cal = lambda n:n 304 print('n:',cal(5)) 305 (lambda n:print('n大于2时n等于',1) if n>2 else print('n小于等于2时n等于',5))(3)#三元运算 306 #frozenset()返回一个冻结的集合,冻结后集合不能再添加或删除任何元素 307 set_test = frozenset([1,2,3,4,5,6,3,4,87,6]) 308 print(set_test) 309 #globals(),返回整个文件的变量的key-value,变量名key,内容是value. 310 print(globals()) 311 #hash(),给输入的数据弄一个映射关系。用于获取取一个对象(字符串或者数值等)的哈希值 312 hash_test= hash('test') 313 print(hash_test,hash(1)) 314 #hex(),将10进制转化为16进制。 315 print(hex(10),hex(11),hex(12),hex(13),hex(14)) 316 #isinstance,函数来判断一个对象是否是一个已知的类型,类似 type()。 317 # isinstance() 与 type() 区别:type() 不会认为子类是一种父类类型,不考虑继承关系。isinstance() 会认为子类是一种父类类型, 318 # 考虑继承关系。如果要判断两个类型是否相同推荐使用 isinstance()。 319 number = 5 320 str_test = 'test' 321 number_type =int 322 str_type = str 323 print(isinstance(number,number_type)) 324 print(type(str_test)) 325 #print(isinstance(str_test,str_type))#不晓得为啥子不行的 326 #id(),返回内存地址。 327 print(id(number)) 328 print(id(str_test)) 329 #locals() 函数会以字典类型返回当前位置的全部局部变量。对于函数, 方法, lambda 函式, 类, 以及实现了 __call__ 方法的类实例, 330 # 它都返回 True。 331 def causal_test(*args): 332 z = args 333 print(locals()) 334 causal_test(5) 335 print(locals()) 336 print(globals()) 337 #max(),返回列表最大值。 338 list_test = [1,2,3,4,59,7,75,3,2,] 339 print(max(list_test)) 340 #oct(),函数将一个整数转换成8进制字符串。 341 print(oct(number)) 342 print(oct(1),oct(2),oct(3),oct(4),oct(5),oct(6),oct(8),oct(9),oct(9),oct(10)) 343 #pow(),x的n次方。 344 print(pow(3,3)) 345 #repr(),与ascii类似。将对象转化为供解释器读取的形式 346 print(repr('test')) 347 print(repr({'one':1,"two":2})) 348 #round()方法返回浮点数X的四舍五入值。 349 print(round(8.564)) 350 print(round(8.464)) 351 #slice(),函数实现切片对象,主要用在切片操作函数里的参数传递。 352 circulation = range(10) 353 cut = slice(5) 354 print(cut) 355 print(circulation) 356 print(circulation[cut]) 357 #sorted(),可以给dictionary排序。 358 #sort与sorted区别:sort是应用在list上的方法,sorted可以对所有可迭代的对象进行排序操作。list 的 sort 方法返回的是对已经存在 359 #的列表进行操作,无返回值,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。 360 list = [5,6,4,7,6,1,2,5,6,4] 361 print(list) 362 list.sort() 363 print(list) 364 dictionary_test = {1:'a',2:'b',8:'d',4:'c',5:'e'} 365 print(sorted(dictionary_test.items())) 366 print(sorted(dictionary_test.items(),key = lambda y:y[1])) 367 print(sorted(dictionary_test.items(),key = lambda y:y[1],reverse = True)) 368 #vars(),返回一个对象的所有属性名 369 #zip(),拼接 370 A_number = [0,1,2,3,4,5] 371 A_english = ['zero','one','two','three','four','five'] 372 for i in zip(A_number,A_english): 373 print(i) 374 #_import___import__() 函数用于动态加载类和函数 。如果一个模块经常变化就可以使用 __import__() 来动态载入。 375 #json序列化,所谓的序列化也就是将内存对象变为字符串 376 import json 377 info = { 378 "name":'souce', 379 'age':23 380 } 381 f = open("test.test",'w') 382 f.write(json.dumps(info)) 383 f.close() 384 f = open("test.test",'r') 385 data = json.loads(f.read()) 386 print(data['age']) 387 #有__init__的叫做包 388 # 1、json.dumps()和json.loads()是json格式处理函数(可以这么理解,json是字符串) 389 # (1)json.dumps()函数是将一个Python数据类型列表进行json格式的编码(可以这么理解,json.dumps()函数是将字典转化为字符串) 390 # (2)json.loads()函数是将json格式数据转换为字典(可以这么理解,json.loads()函数是将字符串转化为字典) 391 # 2、json.dump()和json.load()主要用来读写json文件函数
python学习之路第四周汇总
猜你喜欢
转载自www.cnblogs.com/source12/p/9792296.html
今日推荐
周排行