小白的Python之路 day4 装饰器前奏】的更多相关文章

装饰器前奏: 一.定义: 1.装饰器本质是函数,语法都是用def去定义的 (函数的目的:他需要完成特定的功能) 2.装饰器的功能:就是装饰其他函数(就是为其他函数添加附加功能) 二.原则: 1. 不能修改被装饰的函数的源代码 2. 不能修改被修饰的函数的调用方式 三. 实现装饰器知识储备: 1.函数即"变量"  (先定义,再调用) 2.高阶函数 3.嵌套函数 4.匿名函数   样式 (calc = lambde x:x*3 ) 高阶函数 + 嵌套函数 => 装饰器 1. 函数即&…
首先装饰器实现的条件: 高阶函数+嵌套函数 =>装饰器 1.首先,我们先定义一个高级函数,去装饰test1函数,得不到我们想要的操作方式 import time #定义高阶函数 def deco(func): start_time = time.time() func() stop_time = time.time() print("the func run time is %s"%(stop_time-start_time)) #装饰test1函数 def test1(): t…
一 装饰器进化之路1) import time def index(): start_time=time.time() time.sleep() print('welcome to index world') end_time=time.time() print('%s'%(end_time-start_time)) index() 那么这个函数我们虽然实现了他的功能,但是修改了源代码,所以这种扩展新功能是不可用的.2) def index(): time.sleep() print('welc…
一.观察以下代码 以下来自 Python实现简易HTTP服务器与MINI WEB框架(利用WSGI实现服务器与框架解耦) 中的mini_frame最后版本的代码: import time def index(): with open("templates/index.html", 'rb') as f: content = f.read() return content.decode("utf-8") def login(): return "----lo…
一.列表生成式  看下面例子: 列表生成式的作用:主要是让代码更简洁(还有装X的效果) 二.生成器 通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了. 所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间.在Python中,这种一边循…
迭代器 学习前,我们回想一下可以直接作用于for循环的数据类型有以下几种: 1.集合数据类型,如list.tuple.dict.set.str等: 2.是generator,包括生成器和带yield的generator function. 这些可以直接作用于for循环的对象统称为可迭代对象:Iterable.(可迭代对象你可以简单的理解可循环的对象) 我们怎么判断一个对象是不是可循环或者可迭代的? 可以使用isinstance()判断一个对象是否是Iterable对象:  #isinstance…
一.简述 我们在写入文件中的数据,只能是字符串或者二进制,但是要传入文件的数据不一定全是字符串或者二进制,那还要进行繁琐的转换,然后再读取的时候,还要再转回去,显得很麻烦,今天就来学习标准的序列化:json & pickle 二.json序列化 1.dumps序列化和loads反序列化 dumps()序列化 import json #导入json模块 info = { 'name':"qianduoduo", "age":22, } with open(&q…
软件目录结构规范 为什么要设计好目录结构? "设计项目目录结构",就和"代码编码风格"一样,属于个人风格问题.对于这种风格上的规范,一直都存在两种态度: 一类同学认为,这种个人风格问题"无关紧要".理由是能让程序work就好,风格问题根本不是问题. 另一类同学认为,规范化能更好的控制程序结构,让程序具有更高的可读性. 我是比较偏向于后者的,因为我是前一类同学思想行为下的直接受害者.我曾经维护过一个非常不好读的项目,其实现的逻辑并不复杂,但是却耗费…
一.常用模块调用函数功能解释 1.__file__ 功能:返回自身文件的相对路径 你从pycharm的执行结果可以看出,在pycharm执行atm.py文件时,是从绝对路径下去执行的,而你从cmd下去执行的时候,是你选择可以在哪个路径下执行,而__file__表示的是相对路径,所以在哪个路径下,就打印哪个路径. 2.os.path.abs() 功能:返回自身文件的绝对路径 3.os.path.dirname() 功能:返回目录名,不需要文件名 4.sys.path 功能:python环境的执行的…
一.概述 我们已经明白生成器内部的结构,其实就是通过像函数这样的东西实现的! 多线程和单线程:简单来说多线程就是并行运算,单线程就是串行运算 二.生成器执行原理 第一步:生成一个生成器  第二步:执行第一个next方法,开始调用函数,执行到yield时中断,把返回值返回给变量(moon_cake): 下面有next有几次执行几次这样的返回,但是返回的值是none  从上面可以看出send()和__next__()方法的区别: 1.__next__()只是调用这个yield,也可以说成是唤醒yie…
Python之路,Day4 - Python基础4 (new版)   本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1.列表生成式,迭代器&生成器 列表生成式 孩子,我现在有个需求,看列表[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],我要求你把列表里的每个值加1,你怎么实现?你可能会想到2种方式 >>> a [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >&g…
Python中利用函数装饰器实现备忘功能 这篇文章主要介绍了Python中利用函数装饰器实现备忘功能,同时还降到了利用装饰器来检查函数的递归.确保参数传递的正确,需要的朋友可以参考下   "备忘"的定义 "memoization"(备忘)这个词是由Donald Michie在1968年提出的,它基于拉丁语单词"memorandum"(备忘录),意思是"被记住".虽然它和单词"memorization"在某种…
之前用python简单写了一下斐波那契数列的递归实现(如下),发现运行速度很慢. def fib_direct(n): assert n > 0, 'invalid n' if n < 3: return n else: return fib_direct(n - 1) + fib_direct(n - 2) 然后大致分析了一下fib_direct(5)的递归调用过程,如下图: 住:这里的f(2)调用f(1)仅代表基本操作的次数. 可以看到多次重复调用,因此效率十分低.进一步,可以算出递归算法…
1,函数作用域 这种情况可以顺利执行: total = 0 def run(): print(total) 这种情况会报错: total = 0 def run(): print(total) total = 1 这种情况也会报错: total = 0 def run(): total += 1 # 等效total = total + 1 原因是函数内部对total有定义后,解释器会认为total是局部变量,但是内部执行时,却发现total还没定义. 解决办法是将total声明为全局变量: to…
前言 python内部有许多内建装饰器,它们都有特别的功能,下面对其归纳一下. 系列文章 python设计模式之单例模式(一) python设计模式之常用创建模式总结(二) python设计模式之装饰器详解(三) python设计模式之内置装饰器使用(四) python设计模式之迭代器与生成器详解(五) python自带装饰器 staticmethod staticmethod装饰器的功能是去除类的方法默认第一个参数是类的实例,使得该方法成为一个普通的函数,staticmethod是一个类,属于…
今天学到了python的装饰器,感觉这个东西还是稍微有些复杂,所以记录下来,方便以后的查找.虽然标题是python 3.x的装饰器,但是我也没有怎么用过python 2.x,感觉上应该是和python 2.7在用法上差不多. 现在某个视频公司有一段代码,,代码的主要功能就是看电影. def watchfilm(): print('You are watching film now....') watchfil() 运行之后输出: You are watching film now.... 现在要…
1. 函数嵌套 1.1 函数嵌套调用 函数的嵌套调用:在调用一个函数的过程中,又调用了其他函数 def bar(): print("from in the bar.") def foo(): print("from in the foo.") bar() foo() 1.2 求函数最大值 def max2(x,y): if x > y: return x else: return y def max4(a,b,c,d): res1 = max2(a,b) re…
python 中多个装饰器的执行顺序: def wrapper1(f1): print('in wrapper1') def inner1(*args,**kwargs): print('in inner1') ret = f1(*args,**kwargs) return ret return inner1 def wrapper2(f2): print('in wrapper2') def inner2(*args,**kwargs): print('in inner2') ret = f2…
Python函数编程--闭包和装饰器 一.闭包 关于闭包,即函数定义和函数表达式位于另一个函数的函数体内(嵌套函数).而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量.参数.当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包.也就是说,内部函数会在外部函数返回后被执行.而当这个内部函数执行时,它仍然必需访问其外部函数的局部变量.参数以及其他内部函数.这些局部变量.参数和函数声明(最初时)的值是外部函数返回时的值,但也会受到内部函数的影响. def outer(…
面向对象编程之classmethod和staticmethod classmethod 和 staticmethod都是python内置的装饰器 classmethod 的作用:给在类内部定义的方法装饰,将类的内部方法变为类的绑定方法 绑定方法的特殊之处是会将对象本省当作第一个参数传入方法中 类的绑定方法:由类来调用,哪个类调用,就默认将哪个类当作第一个参数传入 class DB: __data = "lee is a big haha!" def __init__(self, use…
Python 入门之 Python三大器 之 装饰器 1.开放封闭原则: (1)代码扩展进行开放 ​ 任何一个程序,不可能在设计之初就已经想好了所有的功能并且未来不做任何更新和修改.所以我们必须允许代码扩展.添加新功能. (2)修改源代码是封闭 ​ 当我们写的一个函数,已经交付给其他人使用,如果这个时候我们对函数内部进行修改,或者修改了函数的调用方式,很有可能影响其他已经在使用该函数的用户. 在不修改源代码及调用方式,对功能进行额外的添加就是开放封闭原则 2.装饰器: 在不改变原被装饰的函数的源…
python面向对象内置装饰器property,staticmethod,classmethod的使用 @property 装饰器作用及使用 作用:面向对象中的方法伪装成属性 使用如下: class Circle: def __init__(self,r): self.r = r @property def area(self): return 3.14*self.r**2 @property def perimeter(self): return 2*3.14*self.r C = Circl…
第7.26节 Python中的@property装饰器定义属性访问方法getter.setter.deleter 详解 一.    引言 Python中的装饰器在前面接触过,老猿还没有深入展开介绍装饰器相关的内容,在后面将单独的章节来介绍.Python总共包括三个内置装饰器(注意abstractmethod这个装饰器是从abc模块导入的,不是内置的),除了前面介绍的类方法装饰器classmethod.静态方法装饰器staticmethod外,还有一个property装饰器,这个装饰器与prope…
Python的模块化编程 我们首先以一个例子来介绍模块化编程的应用场景,有这样一个名为requirements.py的python3文件,其中两个函数的作用是分别以不同的顺序来打印一个字符串: # requirements.py def example1(): a = 'hello world!' print (a) print (a[::-1]) def example2(): b = 'hello again!' print (b) print (b[::-1]) if __name__ =…
前言 最近成功把「前端带师」带入C#的坑(实际是前端带师开始从cocos转unity游戏开发了) 某天,「前端带师」看到这段代码后问了个问题:[这个是装饰器]? [HttpGet] public Response Get() { return ... } 我第一反应觉得不是,这玩意在C#中叫"特性"(英文名Attribute,下文统称为特性),在Java中叫注解,虽然写法和Python/TypeScript中的差不多,但印象中实现方式应该是不同的. 但咱学理工科的就是要严谨,不能仅凭经…
本节内容 定义 原则 实现装饰器的储备知识 函数及变量 高阶函数 一.定义 1.装饰器:本质是函数. 2.功能:用来装饰其他函数,顾名思义就是,为其他的函数添加附件功能的. 二.原则 不能修改被装饰函数的源代码 不能修改被装饰函数的调用方式 装饰器为什么会有这两个原则呐?因为如果你写的这个程序在生产环境下已经运行了,如果修改别人的源代码或者修改别人的调用方式,那么出了问题,后果可想而知,所以我们要牢记上面两个原则. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 def log…
一.初入装饰器 1.首先呢我们有这么一段代码,这段代码假设是N个业务部门的函数 def f1(aaa): print('我是F1业务') if aaa == 'f1': return 'ok' def f2(aaa): print('我是F2业务') if aaa == 'f2': return 'ok' 业务代码 这里呢也就是当我们调用上面的函数的时候,传入值给aaa,当aaa的值等于f1或者f2就返回ok 2.公司有N个业务部门,1个基础平台部门,基础平台负责提供底层的功能,如:数据库操作.…
1.迭代器&生成器 列表生成式 现在有个需求,列表[1,2,3,4,5,6,7,,8,9],要求把列表里的每个值加1,如何实现? 方法一: list = [1,2,3,4,5,6,7,8,9] for index,i in enumerate(list): list[index] = i + 1 print(list)运行结果:[2, 3, 4, 5, 6, 7, 8, 9, 10] 方法二: list = [1,2,3,4,5,6,7,8,9] #map()是 Python 内置的高阶函数,它…
一:命名空间与作用域 1.1命名空间 局部命名空间: def foo(): x=1 def func(): pass 全局命名空间: import time class ClassName:pass def foo():pass 内键命名空间: sum,max,min 等 python加载三个命名空间的顺序: 1.内键命名空间 2.全局命名空间:文件级别的或叫做模块级别的 3.局部命名空间:只有调用函数的时候才会加载,函数调用结束就被释放掉 1.2作用域 全局作用域: 同时x=1为全局变量 x=…
装饰器 定义:本质是函数,(装饰其他函数)就是为其他函数添加附加功能.原则:1.不能修改被装饰的函数的源代码 2.不能修改被装饰的函数的调用方式 实现装饰器的知识储备: 1.函数即“变量” 2.高阶函数(满足下列条件之一就是高阶函数) a:把一个函数名当作形参传给另一个函数(在不修改被装饰函数源代码的情况下修改其功能,但是调用方式变了) b:返回值中包含函数名(不修改函数的调用方式,而修改函数功能) 3.嵌套函数 总结: 高阶函数+嵌套函数=>装饰器 1. 函数即变量 def bar(): #这…