1. 装饰器 装饰器他人的器具,本身可以是任意可调用对象,被装饰者也可以是任意可调用对象. 强调装饰器的原则:1 不修改被装饰对象的源代码 2 不修改被装饰对象的调用方式 装饰器的目标:在遵循1和2的前提下,为被装饰对象添加上新功能 开放封闭原则:对修改封闭,对扩展开放 import time def timmer(fun): start_time=time.time() fun() end_time=time.time() def fun1(): print("in func1")…
装饰器: 定义:本质是函数(装饰其它函数) 为其它函数添加附加功能 原则: 1 不能修改被装饰函数源代码    2 不修改被装饰函数调用方式 实现装饰器知识储备: 1 函数即‘’变量‘’ 2 高阶函数 a 把一个函数名当实参传给另外一个函数(在不修改被装饰函数的情况下 为其添加功能) b 返回值中包含函数名(不修改函数的调用方式) 3嵌套函数 高阶函数 + 嵌套函数 => 装饰器 简单版高阶函数 import time def bar(): time.sleep(3) print('in the…
Python三大器之装饰器 开放封闭原则 一个良好的项目必定是遵守了开放封闭原则的,就比如一段好的Python代码必定是遵循PEP8规范一样.那么什么是开放封闭原则?具体表现在那些点? 开放封闭原则的核心的思想是软件实体是可扩展,而不可修改的. 也就是说,对扩展是开放的,而对修改是封闭的. 即使迫不得已要进行修改,也最好不要改变它原本的代码. 具体表现的点: 1.写好的项目,后期可以很方便的为其添加新的功能 2.项目修改应该尽量少的改动原本逻辑代码.而是通过某种补丁的形式完善其功能 初识装饰器…
1.装饰器 1. 不能修改被装饰的函数的源代码  2. 不能修改被装饰的函数的调用方式 实现装饰器知识储备: 1 函数即“变量” 2 高阶函数     a:把一个函数名当做实参传给另外一个函数(不修改被装饰函数源代码)     b:返回值中包含函数名(不修改函数的调用方式) 3嵌套函数 装饰器 想了很久过两天代码实现 : 列表生成式: a=[i if i<5 else i*i for i in a] 2.生成器 为什么会有这个功能? 答:我们可以使用列表储存数据,可当我们的数据特别大的时候,建立…
Python学习---装饰器的学习1210 Python学习---生成器的学习1210 Python学习---迭代器学习1210…
python装饰器[1] 首先先明白以下两点 #嵌套函数 def out1(): def inner1(): print(1234) inner1()#当没有加入inner时out()不会打印输出1234,当前层级也就是作用域下必须调用函数才能引用 out1() #函数作用域 def out2(): a = 'aaa' def inner2(): a = 'bbb' print(a) inner2() print(a) out2()#当相同变量处于不同嵌套函数中,会根据作用函数由内而外查找 装饰…
闭包 1, 闭包是嵌套在函数中的 2, 闭包是内层函数对外层函数的变量(非全局变量)的引用(改变) 3,闭包需要将其作为一个对象返回,而且必须逐层返回,直至最外层函数的返回值 闭包例子: def a1(): name = 'wk' def a2(): print(name) return a2 闭包函数的作用 非闭包函数:随着函数的结束临时空间关闭 def func1(s): n = 1 n += s print(n) func1(3) func1(3) #每次函数结束临时空间关闭 func1(…
一 装饰器 1.1 函数对象 一 函数是第一类对象,即函数可以当作数据传递 #1 可以被引用 #2 可以当作参数传递 #3 返回值可以是函数 #3 可以当作容器类型的元素 二 利用该特性,优雅的取代多分支的if def foo(): print('foo') def bar(): print('bar') dic={ 'foo':foo, 'bar':bar, } while True: choice=input('>>: ').strip() if choice in dic: dic[ch…
装饰器: 在编程时,要遵循一个原则,就是开放-封闭原则. 在不破坏原函数的情况下,要想对原函数进行一些修饰,那么这里就要用到装饰器. 例如:你完成了一些用函数写成的项目,此时公司正在年度考核,你需要给你写的每一个函数都加上一个计算时间的功能,随即考核完成后,又需要把函数恢复原状,到了下一阶段考核,可能又要用到这个计算时间功能,一般来说项目中的函数是很多的,怎样才能一次性的为所有函数加上功能呢? 这里就要用到装饰器这个知识点. wahaha()jiaduobao() 此处调用原函数时,可以发现函数…
回顾下上次的内容 转码过程: 先decode  为 Unicode(万国码 ) 然后encode 成需要的格式     3.0 默认是Unicode  不是UTF-8 所以不需要指定  如果非要转为UTF-8  就再指定 变量的查找顺序: 1 从里往外找,先找自己本地的local  没有就会去上一级找,直到找到此变量,     全局变量不能在函数里改变指的是纯字符的, list 及字典等会改变 函数递归:   一层一层进去, return 一层一层出来   特点: # 明确的结束条件 # 问题规…