Python自动化面试必备 之 你真明白装饰器么? 装饰器是程序开发中经常会用到的一个功能,用好了装饰器,开发效率如虎添翼,所以这也是Python面试中必问的问题,但对于好多小白来讲,这个功能 有点绕,自学时直接绕过去了,然后面试问到了就挂了,因为装饰器是程序开发的基础知识,这个都 不会,别跟人家说你会Python, 看了下面的文章,保证你学会装饰器. 1.先明白这段代码 #### 第一波 #### def foo(): print 'foo' foo     #表示是函数 foo()   #表…
装饰器: 装饰器可以使函数执行前和执行后分别执行其他的附加功能,这种在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator),装饰器的功能非常强大.装饰器一般接受一个函数对象作为参数,以对其进行增强 装饰器本身是一个函数,用于装饰其他函数 功能:增强被装饰函数的功能 装饰器是一个闭包函数是嵌套函数,通过外层函数提供嵌套函数的环境 装饰器在权限控制,增加额外功能如日志,发送邮件用的比较多 装饰器知识准备一: >>> def f1(): ... print("hel…
python中"生成器"."迭代器"."闭包"."装饰器"的深入理解 一.生成器 1.生成器定义:在python中,一边循环一边计算的机制,称为生成器:generator. a. 语法上和函数类似:生成器函数和常规函数几乎是一样的.它们都是使用def语句进行定义,差别在于,生成器使用yield语句返回一个值,而常规函数使用return语句返回一个值. b. 自动实现迭代器协议:对于生成器,python会自动实现迭代器协议,以便…
1.生成器 生成器的创建方法: (1)通过列表生成式创建 可以通过将列表生成式的[]改成() eg: # 列表生成式 L = [ x*2 for x in range(5)] # L = [0, 2, 4, 6, 8] # 生成器 G = ( x*2 for x in range(5)) # 此时的G是,<generator object <genexpr> at 0x7f626c132db0> 创建列表生成式和生成器的区别只是最外层的()和[],列表生成式是一个列表,而生成器事宜…
一.global与nonlocal #global x = 1 def f1(): global x # 声明此处是全部变量x x = 2 print(x) f1() # 调用f1后,修改了全局变量x = 2 print(x) # 打印结果为2 # nonlocal def f1(): x = 1 def f2(): nonlocal x # 此处声明使用外层函数的变量x x = 2 # 将外层函数进行了修改 print(x) # f2() print(x) # 因为f1()下的x已经被修改,所…
迭代器 1.迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退.另外,迭代器的一大优点是不要求事先准备好整个迭代过程中所有的元素.迭代器仅仅在迭代到某个元素时才计算该元素,而在这之前或之后,元素可以不存在或者被销毁.这个特点使得它特别适合用于遍历一些巨大的或是无限的集合,比如几个G的文件 特点: 访问者不需要关心迭代器内部的结构,仅需通过next()方法不断去取下一个内容…
迭代器 __iter__方法返回一个迭代器,它是具有__next__方法的对象.在调用__next__方法时,迭代器会返回它的下一个值,若__next__方法调用迭代器 没有值返回,就会引发一个StopIteration异常.    特点: 访问者不需要关心迭代器内部的结构,仅需通过__next__方法不断去取下一个内容 不能随机访问集合中的某个值 ,只能从头到尾依次访问 访问到一半时不能往回退 便于循环比较大的数据集合,节省内存 name = iter(['koka','lolo','lala…
s12-20160123-day04 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* BLOCKS =============================================================================*/ p, blockquote, ul, ol, dl, table, pre { margin…
一.生成器 1.什么是生成器? 在python中,一边循环一边计算的机制,称为生成器:generator. 2.生成器有什么优点? 1.节约内存.python在使用生成器时对延迟操作提供了支持.所谓延迟,是指在需要的时候才产生结果,而不是立即产生结果.这样在需要的时候才去调用结果,而不是将结果提前存储起来要节约内存.比如用列表的形式存放较大数据将会占用不少内存.这是生成器的主要好处.比如大数据中,使用生成器来调取数据结果而不是列表来处理数据,因为这样可以节约内存. 2.迭代到下一次的调用时,所使…
内容回顾: 补充反向解析 Html:{% url ‘别名’ 参数 %} Views:reverse(‘别名’,args=(参数,)) 模板渲染 变量 {{ 变量名 }} 逻辑相关 {% %} 过滤器: {{ 变量|过滤器方法:’参数’ }} 标签: {% for i in list%} for k,v in dict.items {{ i }} {% endfor %} {% if 条件 %} {%elif%} {%else%} {% endif %} 据点符 . 可以做深度查询 {% with…
一:生成器:Generator,可以理解为是一种一个函数产生一个迭代器,而迭代器里面的数据是可以通过for循环获取的,那么这个函数就是一个生成器,即生成器是有函数生成的,创建生成器使用()表示,比如g = (x for x in range(10)),那么即创建一个名称为g的生成器,,如果外层是[]则表示是生成一个列表,生成器生成的序列可以使用next()方法获取其中的值: 1.__next__()方法获取序列中的值: g1 = (x for x in range(3)) print(type(…
一.函数对象 函数(Function)作为程序语言中不可或缺的一部分,但函数作为第一类对象(First-Class Object)却是 Python 函数的一大特性. 那到底什么是第一类对象(First-Class Object)呢? 在 Python 中万物皆为对象,函数也不例外,函数作为对象可以赋值给一个变量.可以作为元素添加到集合对象中.可作为参数值传递给其它函数,还可以当做函数的返回值,这些特性就是第一类对象所特有的. 1.函数身为一个对象,拥有对象模型的三个通用属性:id.类型.和值.…
1.迭代器 迭代器是访问集合的一种方式,迭代对象从集合的第一个元素开始访问,直到元素被访问结束,迭代器只能往前不能后退,最大的优点是不要求事先准备好整个迭代过程中的元素,这个特点使得它特别适合用于遍历一些巨大的或是无限的集合. 特点: 访问者不需要关心迭代器内部的结构,仅需通过next()方法不断去取下一个内容 不能随机访问集合中的某个值,只能从头到尾依次访问 访问到一半时不能往回退 便于循环比较大的数据集合,节省内存 使用: #生成迭代器: name = iter(['d','c','b','…
装饰器 器即函数,装饰即修饰,意指为其他函数添加新功能 装饰器定义:本质就是函数,功能是为其他函数添加新功能 装饰器涉及的知识点= 高阶函数+函数嵌套+闭包 在遵循下面两个原则的前提下为被装饰者新功能 必须遵循的原则: 1)一定不能修改源代码 2)不能修改调用方式 语法糖(格式符号):@ @timer #@timer就等同于cal=timer(cal) def cal(array): res=0 for i in array: res+=i return res cal(range(10)) #…
python装饰器 什么是装饰器?在不修改源代码和调用方式的基础上给其增加新的功能,多个装饰器可以装饰在同一个函数上 # 原理(个人理解):将原函数(bar)的内存地址重新赋值,进行覆盖.新值为装饰器目标函数内存地址,# 再进行调用,从而实现修改的目的. 无参装饰器************************* import time def timer(func): #过渡函数,将初始函数作为参数传人 def deco(): #目标函数,最后执行结果的函数 start_time = tim…
函数名的本质 函数名本质上就是函数的内存地址. 1.可以赋值给其他变量,被引用 def func(): print('in func') f = func print(f) 2.可以被当作容器类型的元素 def f1(): print('f1') def f2(): print('f2') def f3(): print('f3') l = [f1,f2,f3] d = {'f1':f1,'f2':f2,'f3':f3} #调用 l[0]() d['f2']() 3.可以当作函数的参数和返回值…
无论是类还是实例,一切皆是对象. Python是强动态语言,和java在这点上有所不同. class Ab(): a = 666 # 定义类对象Ab,自带属性a,值为666 # 使用Ab.__dict__可以查看类Ab的属性 us1 = Ab() us2 = Ab() # 定义两个实例对象us1.us2,这两个实例自身并不具备任何属性 # 只有在__init__中定义了self.arg=xxx的情况下,实例默认会具备arg属性 动态语言中,属性自带操作方法:获取(读).设置(写):还可以定义删除…
Python 的名称 Python 的名称(Name)是对象的一个标识(Identifier).我们知道,在 Python 里面一切皆对象,名称就是用来引用对象的.说得有点玄乎,我们以例子说明. 例如,在a = 2这个语句中,2是个存储在内存中的一个对象,名称a则会引用2这个对象,“引用”的含义是指可以通过名称a来使用2这个对象.我们可以使用id()函数来获取对象的地址. 可以看到,两都均指向同一个对象 Python 的名称与对象 起初,名称a引用对象2: 然后,执行操作a = 1,这时对象1被…
1.生成器 通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.而且,创建一个包含100万  个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪  费了. 所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创  建完整的list,从而节省大量的空间.在Python中,这种一边循环一边计算的机制,称为生成器:generator. 要创建一个generat…
这篇文章主要介绍 Python 中几个常用的高级特性,用好这几个特性可以让自己的代码更加 Pythonnic 哦 1.生成器 什么是生成器呢?简单来说,在 Python 中一边循环一边计算的机制称为 生成器(generator) 生成器最大的优点在于它支持延迟操作,所谓的延迟操作是指在需要的时候才进行运算产生结果 我们可以使用以下两种方法 创建生成器: 生成器表达式 类似于列表生成式,只需将列表生成式中的中括号替换成圆括号即可 >>> gen = (item for item in ra…
一.名称空间和作用域 1.命名空间(Namespace) 命名空间是从名称到对象的映射,大部分的命名空间都是通过 Python 字典来实现的. 命名空间提供了在项目中避免名字冲突的一种方法.各个命名空间是独立的,没有任何关系的,所以一个命名空间中不能有重名,但不同的命名空间是可以重名而没有任何影响. 1.一般有三种命名空间: 内置名称空间(built-in names):存放内置的名字,如len/eval/enumerate/bytes/max/min/sorted/map/filter....…
一.组合二.封装三.property装饰器四.多态 一.组合 ''' 1. 什么是组合 一个对象的属性是来自于另外一个类的对象,称之为组合 2. 为何用组合 组合也是用来解决类与类代码冗余的问题 3. 如何用组合 ''' # class Foo: # aaa=1111 # def __init__(self,x,y): # self.x=x # self.y=y # # def func1(self): # print('Foo内的功能') # # # class Bar: # bbb=2222…
一.什么是Cookie 1.什么是Cookie? Cookie是保存在客户端浏览器中的文件,其中记录了服务器让浏览器记录的一些键值对(类似字典). 当Cookie中存在数据时,浏览器在访问网站时会读取属于自己的数据,并携带在请求中发送给服务器. 这种机制可以用于许多场景,例如用户登录. Cookie非常重要,如果禁用了Cookie,大部分网站都不好用. 2.如何禁用Cookie 以Chrome为例: 进入设置--->高级--->隐私设置与安全性--->网站设置(或内容设置)--->…
在软件开发的过程中,要遵循软件的一些原则封装的,不改变原有的代码的基础增加一些需求,python提供了装饰器来扩展函数功能,下面说说函数装饰器用法 def debug(func):      def wrapper():              print "[DEBUG]: enter {}()".format(func.__name__)             return func()       return wrapper @debug # def say_hello()…
什么函数可以被称为闭包函数呢?主要是满足两点:函数内部定义的函数:引用了外部变量但非全局变量. python装饰器本质上就是一个函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外的功能,装饰器的返回值也是一个函数对象(函数的指针) 装饰器函数的外部函数传入我要装饰的函数名字,返回经过修饰后函数的名字:内层函数(闭包)负责修饰被修饰函数.从上面这段描述中我们需要记住装饰器的几点属性,以便后面能更好的理解: 实质: 是一个函数 参数:是你要装饰的函数名(并非函数调用) 返回:是装饰完的函数…
内置函数 •callable,检查是否能被执行/调用 def f1(): pass f2 = 123 print(callable(f1)) #输出 print(callable(f2)) #输出 True #f1可以被调用,返回值为True False #f2不可以不调用,返回执为False •chr()与ord() chr() #将数字蒋欢为响应的ascll码 chr('66') #转换为大写B B ord() #将ascll转换为数字 ord('B') 66 #转换为数字 •random,…
测试奇谭,BUG不见. 这一场,主讲python的生成式和装饰器. 目的:掌握四种生成式(列表.生成器.集合.字典),装饰器的原理和使用. 生成式 01 什么是生成式? 能够用一行代码,快速高效的生成数据.(这就不需要再通俗的讲解了吧) 02 列表生成式 举个例子:提取1-100之间的奇数 # 不用列表生成式 odd_list = [] for i in range(101): if i%2==1: odd_list.append(i) print(odd_list) # 使用列表生成式(更加简…
一.高阶函数 函数只要有以下两个特征中一个就可以称为高阶函数: a:函数名作为一个实参传入另一个函数中 b:函数的返回值中包含函数名 下面我们用代码来感受一下这两种形式: import time # 通过高阶函数将函数名作为参数传入,在不改变函数源代码的情况下为其添加功能 def bar(): time.sleep(3) print("in the bar") def test1(func): start_time = time.time() func() end_time = tim…
现有如下检查登录装饰器: from functools import wraps def check_login(func): @wraps(func) def inner(request, *args, **kwargs): next_url = request.get_full_path() if request.session.get("user"): return func(request, *args, **kwargs) else: return redirect(&quo…
把函数结果缓存一段时间,比如读取一个mongodb,mongodb中的内容又在发生变化,如果从部署后,自始至终只去读一次那就感触不到变化了,如果每次调用一个函数就去读取那太频繁了耽误响应时间也加大了cpu负担,也不行.那就把结果缓存一段时间. 来一个缓存一段时间的装饰器. class FunctionResultCacher: logger = LogManager('FunctionResultChche').get_logger_and_add_handlers() func_result_…