python装饰器

python常见面试题

让人想犯罪 __ 提交于 2019-11-29 10:14:19
1、大数据的文件读取 利用生成器generator 迭代器进行迭代遍历:for line in file 2、迭代器和生成器的区别 迭代器是一个更加抽象的概念,任何对象,如果它的类有next方法和iter方法返回自身。对于string、list、dict、tuple等这类容器对象,使用for循环遍历是很方便的。在后台for语句对容器对象调用iter()函数,iter()是Python的内置函数。iter()会返回一个定义了next()方法的迭代器对象,它在容器中逐个访问容器内元素,next()也是python的内置函数。在没有后续元素时,next()会抛出一个StopIterration的异常。 生成器(Generator)是创建迭代器的简单而强大的工具。它们写起来就像是正规的函数,只是在返回数据的时候需要使用yield语句。每次next()被调用时,生成器会返回它脱离的位置(它记忆语句最后一次执行的位置和所有的数据值) 区别:生成器能做到迭代器能做的所有事,而且因为自动创建了__iter__()和next()方法,生成器显得特别简洁,而且生成器也是高效的,使用生成器表达式取代列表解析可以同时节省内存。除了创建和保持程序状态的自动生成,当发生器终结时,还会自动跑出StopIterration异常。 3.装饰器的作用和功能 引入日志 函数执行时间统计 执行函数钱预备处理

Python装饰器简介

*爱你&永不变心* 提交于 2019-11-29 06:50:59
装饰器引入 初期及问题诞生 假如现在在一个公司,有A B C三个业务部门,还有S一个基础服务部门,目前呢,S部门提供了两个函数,供其他部门调用,函数如下: def f1 () : print( 'f1 called' ) def f2 () : print( 'f2 called' ) 在初期,其他部门这样调用是没有问题的,随着公司业务的发展,现在S部门需要对函数调用假如权限验证,如果有权限的话,才能进行调用,否则调用失败。考虑一下,如果是我们,该怎么做呢? 方案集合 让调用方也就是ABC部门在调用的时候,先主动进行权限验证 S部门在对外提供的函数中,首先进行权限认证,然后再进行真正的函数操作 问题 方案一,将本不该暴露给外层的权限认证,暴露在使用方面前,同时如果有多个部门呢,要每个部门每个人都要周知到,你还不缺定别人一定会这么做,不靠谱。。。 方案二,看似看行,可是当S部门对外提供更多的需要进行权限验证方法时,每个函数都要调用权限验证,同样也实在费劲,不利于代码的维护性和扩展性 那么,有没有一种方法能够遵循代码的开放闭合原则,来完美的解决此问题呢? 装饰器引入 答案肯定是有的,不然真的是弱爆了。先看代码 def w1 (func) : def inner () : print( '...验证权限...' ) func() return inner @w1 def f1 () :

Python装饰器的应用场景

元气小坏坏 提交于 2019-11-29 04:50:33
装饰器的应用场景 附加功能 数据的清理或添加: 函数参数类型验证 @require_ints 类似请求前拦截 数据格式转换 将函数返回字典改为 JSON/YAML 类似响应后篡改 为函数提供额外的数据 mock.patch 函数注册 在任务中心注册一个任务 注册一个带信号处理器的函数 不同应用场景下装饰器实现 函数注册表 简单注册表 funcs = [] def register(func): funcs.append(func) return func @register def a(): return 3 @register def b(): return 5 # 访问结果 result = [func() for func in funcs] 注册表隔离(使用类的不同实例) class Registry(object): def __init__(self): self._funcs = [] def register(self, func): self._funcs.append(func) def run_all(self): return [func() for func in self._funcs] r1 = Registry() r2 = Registry() @r1.register def a(): return 3 @r2.register def b():

一些面试题总结

廉价感情. 提交于 2019-11-29 03:22:33
合并字典:请合并下面两个字典 a = {"A":1,"B":2},b = {"C":3,"D":4} dict1 = {"A": 1, "B": 2} dict2 = {"C": 3, "D": 4} # 方式一 **表示打散 print({**dict1, **dict2}) # * ** 都表示打散可迭代对象 # 方式二 update方法 dict1.update(dict2) # 合并字典 元组操作:如何把元组 ("a","b") 和元组 (1,2),变为字典 {"a":1,"b":2} # zip的使用 a = ("a", "b") b = (1, 2) print(dict(zip(a, b))) 交换字典的键和值 dict1 = {"A": 1, "B": 2} res = {k: v for v, k in dict1.items()} print(res) 我们知道对于列表可以使用切片操作进行部分元素的选择,那么如何对生成器类型的对象实现相同的功能呢? Python交换两个变量的值 a,b=b,a 这个不是元组解包,在栈的顶端做两个值的交换。 read()/readline()/readlines() with open('test.txt', 'r', encoding='utf-8') as f: text = f.read() print(text) with

python :装饰器 学习笔记

风格不统一 提交于 2019-11-29 03:14:05
装饰器:本质是函数功能:(装饰其他函数)就是为其他函数添加附加功能原则: 1.不能修改被装饰的函数的源代码 2.不能修改被装饰的函数的调用方式 实现装饰器知识储备: 1,函数即“变量" 2·高阶函数: a:把一个函数名当做实参传给另外一个函数(在不修改被装饰函数源代码的情况下为其添加功能) b:返回值中包含函数名(不修改函数的调用方式)3,高阶函数+嵌套函数=装饰器 import time def timer(func): print("x1") def deco(*args,**kwargs): print("x2") start_time = time.time() back = func(*args,**kwargs) stop_time = time.time() print("The run time of func is %s " % (stop_time - start_time)) return back return deco @timer # test1 = timer(test1) def test1(): time.sleep(1) print("in the test1") @timer #test2 = timer(test2) def test2(name,age): time.sleep(1) print("in the test2 is %s

python 装饰器

佐手、 提交于 2019-11-29 00:49:56
Python装饰器 1.装饰器解释 1.1 装饰器它是一个函数,它包含了另一个函数的功能。它用于装饰被包含函数,为被包含的函数添加附加功能。 1.2 装饰器作用于被包含的函数,只有被包含的函数执行时,装饰器才起作用。 2.装饰器代码构成 2.1 函数嵌套(函数中包含另外函数,通俗讲:def 中还有 def ) 2.2 高阶函数(返回函数) 3. 装饰器代码写法 3.1 二层装饰器代码 1 import time 2 3 4 def packing(func): 5 print('in the packing') 6 7 def deco(*args, **kwargs): 8 start_time = time.time() 9 func(*args, **kwargs) 10 stop_time = time.time() 11 print('the func run ', stop_time-start_time) 12 return deco 13 14 15 @packing # 等价于 test1 = packing(test1)(取得了deco的内存地址) 16 def test1(name): 17 time.sleep(1) 18 print('int the test1', name) 19 20 21 @packing 22 def test2(age, sex

快速学习 Python 的全套 14 张思维导图(附高清版下载)

北慕城南 提交于 2019-11-28 23:35:51
本文主要涵盖了 Python 编程的核心知识(暂不包括标准库及第三方库)。 按顺序依次展示了以下内容的一系列思维导图:基础知识,数据类型(数字,字符串,列表,元组,字典,集合),条件&循环,文件对象,错误&异常,函数,模块,面向对象编程; 结合这些思维导图主要参考的资料,分享一下我的学习体验,一方面可供初学者参考,另一方面,也便于大家结合思维导图深入学习、理解、思考; 点击关注,私信发送“资料”“Python”就可获得Python学习资料 思维导图 默认阅读顺序:从右→左,顺时针方向。 思维导图软件:XMind 总览 14张思维导图 第1张图 基础知识图一包括了基本规则、Python语言特点、计算机语言、如何运行Python、变量赋值五个方面,辅助你快速掌握Python编程的基底知识。 第2张图 基础知识图二包含了模块结构、布局、IO编程流程、标识符、Python对象、内存管理、动态类型六大模块,两张基础知识导图可以帮助你区域化了解Python的组成部分及基本操作。 第3张图 学习Python少不了对数据的了解,这张图整理了数据类型的分类、作用、空值、标准数据、if语句等等模块。 第4张图 这张图整理了序列的有序排列、标准操作符与序列类型操作符的重点知识,以及可操作性的BIF。 第5张图 字符串是个比较庞大而精细的部分,接着上图的BIF可分为标准类型、序列类型、字符串类型

python中的装饰器

荒凉一梦 提交于 2019-11-28 23:06:08
''' 开放封闭原则: 开放扩展 封闭:不能修改源功能代码 不能改变调用方式 ''' import time # from functools import wraps def outer(flag): def warpper(f): # @wraps(f) def inner(*args,**kwargs): """ 装饰函数 :param args: :param kwargs: :return: """ if flag: start=time.time() r=f(*args,**kwargs) end=time.time() print(end-start) return r else: r = f(*args, **kwargs) return r return inner return warpper @outer(1)#加括号先调用返回warpper成了@warpper def func(s): print(s) print("原功能函数") time.sleep(2) func("这是主功能原函数") print(func.__doc__) # print(func.__name__)(如果想要显示被装饰函数的函数名或者注释需要导入wraps模块) from functools import wraps def wrapper1(f): def inner(

Python 十大装 B 语法

£可爱£侵袭症+ 提交于 2019-11-28 20:33:17
作者 | 许向武 责编 | 郭芮 出品 | CSDN 博客 Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。 for - else 什么?不是 if 和 else 才是原配吗?No,你可能不知道,else 是个脚踩两只船的家伙,for 和 else 也是一对,而且是合法的。十大装B语法,for-else 绝对算得上南无湾!不信,请看: >>> for i in [1,2,3,4]: print(i) else: print(i, '我是else') 1 2 3 4 4 我是else 如果在 for 和 else 之间(循环体内)有第三者 if 插足,也不会影响 for 和 else 的关系。因为 for 的级别比 if 高,else 又是一个攀附权贵的家伙,根本不在乎是否有 if,以及是否执行了满足 if 条件的语句。else 的眼里只有 for,只要 for 顺利执行完毕,else 就会屁颠儿屁颠儿地跑一遍: >>> for i in [1,2,3,4]: if i > 2: print(i)

人生苦短,我用Python(目录)

筅森魡賤 提交于 2019-11-28 20:06:08
目录 一、计算机基础 二、Python基础 三、函数 四、常用模块 五、模块和包 六、面向对象 七、网络编程socket 八、数据库 九、前端 十、Python Web框架 十一、版本控制--GIT 十二、爬虫 十三、前端框架之VUE 十四、量化投资与Python 十五、算法 十六、设计模式 十七、restful framework 十八、linux基础 十九、权限管理 一、计算机基础 计算机基础知识 计算机的发展史及多道技术 计算机网路知识的简单介绍 二、Python基础 Python学习【第0篇】:window环境下安装Python2和Python3   Python学习【第1篇】:Python简介以及入门 Python学习【第2篇】:Python之数据类型 Python学习【补充篇】:Python之字符串切片 Python学习【第3篇】:Python之运算符 Python学习【第4篇】:Python之可变数据类型与不可变数据类型 Python学习【第5篇】:Python之字符编码问题 Python学习【第6篇】:Python之文件操作 Python学习【补充篇】:map函数和reduce函数的区别 三、Python之函数 Python学习【第7篇】:Python之函数(自定义函数,内置函数,装饰器,迭代器,生成器) Python学习【第7篇】:Python之函数(参数的介绍)