python装饰器

Python入门(十)——装饰器

三世轮回 提交于 2020-02-29 22:21:05
目录 1 装饰器 1.1 闭包 1.2 基本装饰器 1.3 带参数的被装饰函数 1.3.1 形参保持一致案例 1.3.2 返回值保持一致案例 1.4 装饰函数加参数 1.5 多层装饰器 2 装饰器应用之登陆 1 装饰器 理解装饰器需要理解:作用域、高阶函数、闭包 1.1 闭包 定义:内部函数对外部函数的环境进行引用,内部函数叫做闭包(closer)。 一般应用的时候外部函数的返回值为内部函数名。 闭包可以保存函数的运行环境 def ouer ( ) x = 来源: CSDN 作者: AdairWilson 链接: https://blog.csdn.net/HMMorange/article/details/104576821

python装饰器

无人久伴 提交于 2020-02-28 21:57:55
python装饰器的学习理解 自己的理解   装饰器是python语言中的高阶函数,被装饰的函数嵌套在装饰器内部,其目的可实现对被装饰函数的功能扩充。 举个例子,加深理解   任务:完成对执行函数func1的执行时间的记录 不用装饰器实现 # -*- coding: utf-8 -*-import timedef func1(): s_time = time.time() time.sleep(1) e_time = time.time() print "执行func1 需要时间 %s" % (e_time - s_time) if __name__ == "__main__": func1() ######执行结果如下######## 执行func1 需要时间 1.00396990776 但是这样写问题是: 如果类似对func1增加记录执行时间的函数很多,怎么办,难道要所有都修改一遍函数内的代码么,这太low,改进一下,把记录执行时间的功能做成一个函数,如下所示 # -*- coding: utf-8 -*-import time def get_time(func): s_time = time.time() func() e_time = time.time() print "执行%s 需要时间 %s" % (func.__name__, (e_time - s_time))

函数式 Python 中的 Pipe 与 itertools

萝らか妹 提交于 2020-02-28 17:53:59
1、迭代器与管道函数式编程简介 可迭代器(iterable),不仅限于list/str等,还包括任何包含有yield关键字的函数,后者未必有规律的迭代特征。标准库中的itertools包提供了更加灵活的产生迭代器的工具,这些工具的输入大都是已有的迭代器函数的封装,并且itertools给出的函数都是针对广义迭代器而言。而len()等函数是针对狭义迭代器,即sequence(i.e. str, list, tuple)而言的。 以内置函数range()为例,执行结果会是一次性计算好整个序列。这对于很长的序列来说会比较耗时,甚至带来性能问题。因而,python还提供了内置函数,提供了惰性求值版本,那就是xrange()。它利用yield特性,第一次执行时仅仅返回迭代器,不到用时是不会求值的。 实际上,itertools提供的函数都是惰性的,并且给原内置函数都重写了惰性版本。如imap()对于内置的map()。 扩展库Pipe则对内置函数和部分itertools进行了封装,提供了类似unix bash下的管道式调用风格,更接近人类从左到右的阅读习惯,使得代码更加优雅。其他动态语言,如ruby, c#-lambda java8-lambda也都提供了类似的 链式调用 形式。 另外,也提供了@Pipe装饰器,可以非常方便地扩展出自己的管道函数,或者继续封装其他itertools中的有用函数。

Python高级编程-----读书笔记

我们两清 提交于 2020-02-28 12:41:08
1. Keep Code Simple Not Data l 减少代码,能减少生成的代码,因此能减少执行时间 2. 使用List Comprehensions构造List,快12倍 List Comprehension性能测试 使用List Comprehension使语法简洁,生成代码减少,执行显著加快 1 [i for i in range(10000000) if i % 2 == 0] 测试结果 6 function calls in 2.494 seconds Ordered by: standard name ncalls tottime percall cumtime percall filename:lineno(function) 1 0.000 0.000 2.491 2.491 :0(exec) 1 0.003 0.003 0.003 0.003 :0(setprofile) 1 0.000 0.000 2.491 2.491 <string>:1(<module>) 1 0.124 0.124 2.491 2.491 logtest.py:1(test1) 1 2.367 2.367 2.367 2.367 logtest.py:2(<listcomp>) 0 0.000 0.000 profile:0(profiler) 1 0.000 0.000 2

python 函数装饰器

一笑奈何 提交于 2020-02-28 07:11:25
举个例子 def a_decorator(func): def wrapTheFunc(): print "before decorator" func() print "end decorator" return wrapTheFunc @a_decorator def a_func_need_decorator(): print "In a_func_need_decorator()" a_func_need_decorator() 输出 before decorator In a_func_need_decorator() end decorator 等价 不是很明白? @a_decorator def a_func_need_decorator(): 等价于 a_func_need_decorator = a_decorator(a_func_need_decorator) 修改下代码 def a_decorator(func): def wrapTheFunc(): print "before decorator" func() print "end decorator" return wrapTheFunc def a_func_need_decorator(): print "In a_func_need_decorator()" a_func_need

Python基础 三器 (装饰器&生成器&迭代器)

时间秒杀一切 提交于 2020-02-27 18:51:39
一. 装饰器 1、装饰器的作用 - 1.装饰器作用: 本质是函数(装饰其他函数)就是为其他函数添加其他功能 装饰器必须准寻得原则: 1)不能修改被装饰函数的源代码 2)不能修改被装饰函数的调用方式 2.实现装饰器知识储备: 1)函数即“变量” 2)高阶函数 3)嵌套函数 高阶函数+潜逃函数=》装饰器 2、使用高阶函数模仿装饰器功能 1)定义:把一个函数名当做实参传给另一个函数 2)返回值中包含函数名 3)下面使用高阶函数虽然可以实现装饰器的一些功能,但是违反了装饰器不能改变调用方式的原则,以前使用bar()现在将调用方式改编成了test1(bar)就是将bar的函数名当做变量传给了test1() #! /usr/bin/env python # -*- coding: utf-8 -*- import time def timer ( func ) : start_time = time . time ( ) func ( ) print '函数执行时间为' , time . time ( ) - start_time def test ( ) : print '开始执行test' time . sleep ( 3 ) print 'test执行结束' timer ( test ) ''' 开始执行test test执行结束 函数执行时间为 3.00332999229 ''' 4

python 3.x函数装饰器

China☆狼群 提交于 2020-02-27 13:24:16
函数对象在被调用时,函数装饰器将会起作用: from time import ctime,sleep def tsfunc(func): def wrappedFunc(): print('[%s] %s() called'% (ctime(),func.__name__)) return func() return wrappedFunc @tsfunc def foo(): pass foo() sleep(4) for i in range(2): sleep(1) foo() 运行结果: [Thu Feb 27 11:14:04 2020] foo() called [Thu Feb 27 11:14:09 2020] foo() called [Thu Feb 27 11:14:10 2020] foo() called 来源: CSDN 作者: 零度香 链接: https://blog.csdn.net/u011837138/article/details/104532538

常见python面试题

梦想的初衷 提交于 2020-02-26 18:54:03
1,简述列举了解的编程语言及语言间的区别? Python 解释型语言,代码简洁,易懂 C语言 编译型语言,底层语言 c++ 编译型语言,在C语言基础上加了面向对象 Java 混合型语言,可拓展性高 Golang 编译型语言,强类型,代码规范,高并发 语言特点: 灵活简洁,语言优美 可读性强, 语言类型: 解释型:逐行转化,运行效率低,性能差,开发效率高。兼容性好,跨平台 编译型 :一次性编译成二进制文件,执行效率高,兼容性差, 动态语言:不用声明变量的数据类型(脚本类语言) 静态语言:需要声明变量的数据类型 第三方库:python定位是任其发展,开源库很多,应用领域广 2,列举Python2和Python3的区别? python2只更新支持到2020年 print:2不加括号,3加括号 input:2中用户输入解析为int类型,raw_input为字符串类型,3直接是字符串类型 range:2是列表,xrange是可迭代对象;3是可迭代对象 继承关系:2是新式类+经典类;3是新式类 数字表示:2,int和long(长整形,超出2**63-1,数字末尾有一个L);3所有整型都是int 3,看代码写结果: v1 = 1 or 2 # v1 = 1 v2 = 3 and 3 or 9 and 0 # v2 = 7 4,以下的值有什么不同? v1 = [1,2,3] v2 = [(1),

python面试题

风流意气都作罢 提交于 2020-02-26 14:17:36
Python面试(基础篇) 1.简述列举了解的编程语言及语言间的区别? 我了解python,java和c和go 简单的说,python省去了java和c 的大括号,分号 python使用时更加简洁,方便,和易阅读 python是解释型语言,不需要编辑,java和c 需要编译,但是开发周期长,python使用起来效率比java和c低,但如果不是特别注重延迟的项目,用python更加合适 python是开源的,应用广泛,可移植性强,是可嵌入的解释型编程语言 2.列举Python2和Python3的区别? python3不兼容python2,但是python2.7都兼容 首先python2不支持中文用的是ASCII,python3支持,用的是utf8 python2和python3的range不同,2中返回一个列表,3中返回一个迭代器,更加节省内存 2中print不加括号,3中加括号 2中的raw_input函数是3中的input函数 3.看代码写结果 v1 = 1 or 2v2 = 3 and 7 or 9 and 0​10 4.比较一下值有什么不同? v1 = [1,2,3]v2 = [(1),(2),(3)]v3 = [(1,),(2,),(3,)]​v1 = v2v3 是列表中套了三个元组 5.用一行代码实现数值交换 a = 1b = 2a,b = b,a 6

Python面试重点(基础篇)

不羁岁月 提交于 2020-02-26 13:09:55
Python面试重点(基础篇) 第一部分 必答题 简述列举了解的编程语言及语言间的区别? pythonjavacc++c#gophp----------------------------------------------------------------编程语言分为解释型和编译型: 解释型语言: python 在编写代码的时候不需要编译,在执行的时候,想要用专用的解释器对代码进行编译,全部编译后,才能执行代码 编译型语言: c c++ go 每写一行代码,解释器就会编译一行,然后就可以执行了,编译后的代码不用再次编译 java属于混合型语言 列举Python2和Python3的区别? - python2 中 1.input 获取的就是数据本身 2.源码不统一,重复代码 3.除法的时候返回的是向下取整 4.range()中打印返回的是一个列表 5.int有整形和长整型 6.二次编码用的是ascii 7.只有 iter() 和 next() 8.python2中import包,如果包中没有__init__.py文件就报错 9.多继承:全部都是经典类,经典类就是基类不继承object类 10.python2中的不等于号可以是!=或者<>- python3 中 1.input获取的内容都是字符串 2. 源码统一,不会出现重复代码. 3. 除法返回的是浮点数 4. range(