之前实现了一个简单的WebServer 但是这离实际使用还有一点距离 webserver 首先面对第一个问题是路由表 啥是路由表 路由表别看听起来神秘,但是其实就是 if else onhttp- { if(req.url.pathname =="/test1") ... if(req.url.pathname =="/test2") } 当然我们不可能这样写 让我们定义一个http请求处理器接口IHandle,然后弄个HandleList做容器 然后根据http请…
TS 自学笔记(二)装饰器 本文写于 2020 年 9 月 15 日 上一篇 TS 文章已经是很久之前了.这次来讲一下 TS 的装饰器. 对于前端而言,装饰器是一个陌生的概念,但是对于 Java.C# 等语言来说装饰器这一概念并不陌生. 所谓装饰器,就是一种特殊的类型声明,它可以被附加到「属性」.「类声明」.「方法」.「方法参数」上. 他的好处就是可以编写元信息以内省代码.看不懂?没关系,继续往下看. 我知道,网上的很多文章都看的让人十分痛苦,但我觉得我的文章并不会这样,我会尽量由浅入深的 装饰…
一 为何要用装饰器 有的时候写完一段代码,过段时间需要对它进行升级.添加一些新功能,但是如果要直接修改原来的代码会影响其他人的调用,所以就需要一个不修改源代码且不修改原函数的调用方式的东西又能为原函数增添新功能的东西,装饰器就是干这个的. 二 什么是装饰器 装饰器他人的器具,本身可以是任意可调用对象,被装饰者也可以是任意可调用对象. 强调装饰器的原则: 不修改被装饰对象的源代码 不修改被装饰对象的调用方式 装饰器的目标:在遵循1和2的前提下,为被装饰对象添加上新功能 开放封闭原则:对修改封闭,对…
今天我们来学习python里面的“装饰器” 1.我在函数test运行前想先打印一些内容怎么办? def func(param):    print u"打印的内容"    param() def test():    print u"test内容" func(test) 以上代码即可实现,但是如果我有很多函数都要运行前先打印同样的内容,一个一个的去写就会显得非常笨拙.所以有必要有一个方法,只要通过一定的方式即可实现“调用”. 2.闭包 先看一段代码 def clos…
装饰器-初级 在不改变原有函数逻辑功能的基础上,为函数添加新的逻辑功能.使代码可读性更高.结构更加清晰.冗余度更低 简介 """ 闭包: 函数嵌套的格式就是闭包.写装饰器的闭包是外层函数的返回值就是内层函数 装饰器:一种特殊的闭包 加上 语法糖[@语法]组成的 其作用:在不修改原有功能的基础上,为该功能添加其他新的需求.不管在函数中添加多少装饰,函数的名字没有变化 在函数中的使用 装饰器的特殊闭包:在外层函数中声明一个内层函数,外等函数的返回值是内层函数 外层函数的参数是:f…
谈装饰器前,需要明白一件事,Python 中的函数和 Java.C++不太一样,Python 中的函数可以像普通变量一样当做参数传递给另外一个函数,例如: def foo(): print("foo") def bar(func): func() bar(foo) 正式回到我们的主题.装饰器本质上是一个 Python 函数或类,它可以让其他函数或类在不需要做任何代码修改的前提下增加额外功能,装饰器的返回值也是一个函数/类对象.它经常用于有切面需求的场景,比如:插入日志.性能测试.事务处…
装饰器 首先,给出装饰器的框架: def log(func): def wrapper(*args, **kw): print('call %s():' % func.__name__) return func(*args, **kw) return wrapper @log def now(): print('2018-6-14') Python装饰器,本质上就是一个高阶函数.作用是给其它函数增加新的功能.借用python的@语法,可以将一个高阶函数定义为装饰器. @符号的作用 但是,在学习廖…
总目录 从C#到TypeScript - 类型 从C#到TypeScript - 高级类型 从C#到TypeScript - 变量 从C#到TypeScript - 接口 从C#到TypeScript - 类 从C#到TypeScript - function 从C#到TypeScript - 装饰器 从C#到TypeScript - Promise 从C#到TypeScript - Generator 从C#到TypeScript - async await 从C#到TypeScript -…
本节内容 1.函数 2.装饰器 3.生成器 4.类 一.函数 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发“更快更好更强...” 函数式编程最重要的是增强代码的重用性和可读性 def 函数名(参数): ... 函数体 ... 返回值 --------------------------------- 函数的定义主要有如下要点: def:表示函数的关键字 函数名:函数的名称,日后根据函数名调用函数 函数体:函数中进行一系列的逻辑计算,…
示例1 # Create your views here. user = "a" pwd = "a" def login(request): if request.method =="GET": return render(request,"login.html") elif request.method == "POST": u = request.POST.get("user") p…
接上篇python 闭包&装饰器(一) 一.功能函数加参数:实现一个可以接收任意数据的加法器 源代码如下: def show_time(f): def inner(*x, **y): # 形参 start = time.time() f(*x, **y) # 相当于add() end = time.time() print('spend %s' % (end - start)) return inner @show_time # @show_time 等于 add = show_time(add…
此系列文档: 1. 我终于弄懂了Python的装饰器(一) 2. 我终于弄懂了Python的装饰器(二) 3. 我终于弄懂了Python的装饰器(三) 4. 我终于弄懂了Python的装饰器(四) 二.装饰器的高级用法 将参数传递给装饰函数 #它不是黑魔法,只是给包装(wrapper)传递参数: def a_decorator_passing_arguments(function_to_decorate): def a_wrapper_accepting_arguments(arg1, arg2…
一. 装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理等.装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数功能本身无关的雷同代码并继续重用.概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能. 二.装饰器工作原理. 遵循编程的闭合原则,在不修改原函数代码的基础上增加功能,使用装饰器是一种很好的选择. 装饰器工作基于以下两步完成: 第一步:被装饰的函数作为参数传给装饰器函数,并执行装饰器函数,返回值记作newFun…
一,迭代器 1.迭代器  (1)迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,知道所有的元素被访问完结束.迭代器只能往前不会后退.  (2)对于原生支持随机访问的数据结构(如tuple.list),迭代器和经典for循环的索引访问相比并无优势,反而丢失了索引值(可以使用内建函数enumerate()找回这个索引值).但对于无法随机访问的数据结构(比如set)而言,迭代器是唯一的访问元素的方式.另外,迭代器的一大优点是不要求事先准备好整个迭代过程中所有的元素.迭代器仅仅在迭…
一.python闭包 1.内嵌函数 >>> def func1(): ... print ('func1 running...') ... def func2(): ... print ('func2 running...') ... func2() ... >>> func1() func1 running... func2 running... 内部函数func2作用域都在外部函数func1作用域之内 如果试图在外部函数的外部调用内部函数将会报错 >>&…
一.   什么是AOP: a)         AOP是面向切面编程; 就像oop一样, 它也是一种编程思想; i.    Oop思想→一切皆对象, 对象交互组成功能, 功能叠加组成模块, 模块叠加组成系统; 如果把一个个的类比喻成一个个砖头, 那么系统就是一个房子; 房子是由一块块砖头构成, 所以面向对象非常适合做大型系统; 但是面向对象的在应对系统扩展的时候, 就显得力不从心; 如果砖块需要发生变化, 则就会牵扯到很多地方; 因为面向对象是静态的, 内部就是强耦合的关系; 虽然设计模式可以解…
一.CRM项目(1) 引入三个表:用户表,客户表,校区表,班级表,梳理逻辑关系并迁移数据库,生成表. 使用admin插入数据,admin是Django提供的web形式的后台数据管理页面,它是和用户认证组件相通的,使用超级用户即可登录admin后台,并管理自己的数据库. 做出全部客户列表页面和我的客户列表页面. 二.装饰器 在python中,装饰器以及前面讲到的迭代器,生成器都是十二分重要的高级函数.要想理解装饰器,首先要掌握以下几点准备知识: 1.准备一:回顾并理解作用域的相关知识 2.准备二:…
一.名称空间和作用域 1.命名空间(Namespace) 命名空间是从名称到对象的映射,大部分的命名空间都是通过 Python 字典来实现的. 命名空间提供了在项目中避免名字冲突的一种方法.各个命名空间是独立的,没有任何关系的,所以一个命名空间中不能有重名,但不同的命名空间是可以重名而没有任何影响. 1.一般有三种命名空间: 内置名称空间(built-in names):存放内置的名字,如len/eval/enumerate/bytes/max/min/sorted/map/filter....…
一.装饰器 二.装饰器修正1 三.装饰器修正2 四.装饰器的语法糖 五.有参.无参装饰器 六.global与nonlocal 一.装饰器 ''' 1 什么是装饰器 器=>工具 装饰=>指的是为被装饰对象添加新功能 装饰器本身可以是任意可调用的对象=>函数 被装饰的对象也可以是任意可调用的对象=>函数 目标:写一个函数来为另外一个函数添加新功能 2 为何要用装饰器 开放封闭原则: 软件一旦上线就应该对修改封闭,对扩展开放 对修改封闭: 1. 不能修改功能的源代码 2. 也不能修改功能…
一.为什么要有有参装饰器? 来看之前的无参装饰器 # 无参装饰器 def outter(func): def wrapper(*args,**kwargs): start = time.time() res = func(*args,**kwargs) # 我们需要一个变量接受函数的返回值 end = time.time() print("run time is %s" % (end - start)) return res # 我们装饰器的核心是wrapper函数,只需要在wrapp…
一.闭包函数 1.闭函数:被封闭起来的函数==>定义在函数内部的函数,特点是只能在函数内调用 2.包函数:该函数引用了一个名字,该名字来自于E这一层 总结:闭包函数指的是定义在函数内部的函数引用了一个来自于外层函数作用域中的名字 #例如wrapper函数 # def outter(): # x = 100 # def wrapper(): # print(x) 3.闭包函数升级:结合函数对象 # def outter(): # x = 100 # def wrapper(): # print(x…
day13 装饰器与语法糖 一.装饰器 1.什么是装饰器 装饰器就是装饰别人的工具,具体是指为被装饰者添加新功能 装饰器->函数 被装饰者->函数 2.为何要用装饰器 装饰器的核心思想:(开放封闭原则) 在不修改被装饰者源代码以及调用方式的前提下,为被装饰者添加新功能 3.如何实现装饰器 可以用闭包函数去实现装饰器 被装饰者 import time def index(): print('welcome to index page') time.sleep(3) index() 方案一:问题-…
一.递归知识 函数迭套执行,逐层执行之后,满足某个条件之后就会停止执行,将return值返回上层的函数,上层函数再逐层返回,最终返回给最初始函数. 递归在斐波那契数列的应用[斐波那契数列特点:前两个数字相加之和等于下一个数字] 例一.打印出小于10000的斐波那契数列 def f(a1,a2): if a1 > 10000: return print(a1) a3 = a1 + a2 f(a2,a3) res = f(0,1) print(res) 例二.获得斐波那契数列第10个数字 def f…
一.什么是装饰器 装饰器本质就是函数,功能是为其他函数附加功能 二.装饰器遵循的原则 1.不修改被修饰函数的源代码 2.不修改被修饰函数的调用方式 三.实现装饰器的知识储备 装饰器=高阶函数+函数嵌套+闭包 示例1: 用函数实现 #计算从1-100,统计函数运行时间 import time def cal(l): start_time=time.time() res=0 for i in l: time.sleep(0.1) res+=i stop_time = time.time() prin…
一.含有一个装饰器 #encoding: utf-8 ############含有一个装饰器######### def outer(func): def inner(*args, **kwargs):#要装饰f1(),这里用这俩形式参数,可以接受任意个参数,不管f1定义几个参数 " r = func(*args, **kwargs)#这里要用func,不要用f1 " return r return inner @outer #这里outer不要加括号 def f1(a1, a2): p…
装饰器的功能在很多语言中都有,名字也不尽相同,其实它体现的是一种设计模式,强调的是开放封闭原则,更多的用于后期功能升级而不是编写新的代码.装饰器不光能装饰函数,也能装饰其他的对象,比如类,但通常,我们以装饰函数为例子介绍其用法.要理解在Python中装饰器的原理,需要一步一步来.本文尽量描述得浅显易懂,从最基础的内容讲起. (注:以下使用Python3.5.1环境) 一.Python的函数相关基础 第一,必须强调的是python是从上往下顺序执行的,而且碰到函数的定义代码块是不会立即执行它的,只…
写代码要遵循开发封闭原则,虽然在这个原则是用的面向对象开发,但是也适用于函数式编程,简单来说,它规定已经实现的功能代码不允许被修改,但可以被扩展,即: 封闭:已实现的功能代码块开放:对扩展开发 #s2.py def outer(func): def inner(): print("log") return func() return inner @outer def f1(): print("F1") @outer def f2(): print("F2&…
装饰器模式:如果已有对象的部分内容或功能性发生改变,但是不需要修改原始对象的结构或不使用继承,动态的扩展一个对象的功能,则应该使用装饰器模式.简单点说:就是我们不应该去修改已有的类,而是通过创建另外一个装饰器类,通过这个装饰器类去动态的扩展其需要修改的内容,这样做的好处就是————1.我们可以保证类的层次不会因过多而发生混乱.2.当我们需求的修改很小时,不用改变原有的数据结构. 代码引用自<PHP设计模式>. /** * 被修饰类 现在的需求: 要求能够动态为CD添加音轨.能显示CD音轨列表.…
设计模式(八)装饰器模式Decorator(结构型) 1. 概述 若你从事过面向对象开发,实现给一个类或对象增加行为,使用继承机制,这是所有面向对象语言的一个基本特性.如果已经存在的一个类缺少某些方法,或者须要给方法添加更多的功能(魅力),你也许会仅仅继承这个类来产生一个新类—这建立在额外的代码上. 通过继承一个现有类可以使得子类在拥有自身方法的同时还拥有父类的方法.但是这种方法是静态的,用户不能控制增加行为的方式和时机.如果  你希望改变一个已经初始化的对象的行为,你怎么办?或者,你希望继承许…
昨天学了很多函数方面的概念和知识其中有一个闭包的函数.很多人都对闭包的作用不是很清楚,今天我们就来认识一个新的知识点装饰器.它就是闭包函数的一个经典应用. 预习: 编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),要求登录成功一次,后续的函数都无需再输入用户名和密码 一.楔子 def func1(): print('in func1') 想要计算上面函数的执行时间: import time def func1(): start = time.time() print('in fu…