python装饰器

面试题

别等时光非礼了梦想. 提交于 2019-11-28 12:34:48
为什么学python 答题路线:a、python的优点,b、python的应用领域广 具体: 优点 1、python语法非常优雅,简单易学 2、免费开源 3、跨平台,可以自由移植 4、可扩展,可嵌入性强 5、第三方库丰富 应用领域 1、在系统编程中应用广泛,比如说shell工具。 2、在网络爬虫方面功能非常强大,常用的库如scrapy,request等 3、在web开发中使用也很广泛,如很多大型网站都用python开发的,如ins,youtube等,常用的框架如django,flask等 4、python在系统运维中应用广泛,尤其在linux运维方面,基本上都是自动化运维。 5、在人工智能,云计算,金融等方面也应用非常广泛。 通过什么途径学习python 通过看官方文档 通过哔哩哔哩上的视频教程 通过百度查资料 通过买python相关方面的书 公司线上和开发环境使用的什么系统 线上用的centos和Ubuntu系统 开发环境用的windows,mac,还有Ubuntu。 python和java、php、c、c#、c++ 等其他语言对比? Java C# PHP Python (开发效率高),这些语言本身不需要你去管理内存了。它们都有自己的虚拟机,对于开辟内存、释放内存都由这个虚拟机处理。 C 和 Python、Java、C#等C语言: 代码编译得到 机器码

python之“装饰器”

非 Y 不嫁゛ 提交于 2019-11-28 12:23:04
在python里装饰器 其定义:装饰器就是一个函数,用来装饰其他函数,就是给其他函数添加功能。 装饰器有两个特点:   1、装饰器不修改被装饰函数的源码;   2、装饰器不锈钢被装饰函数的调用方式。 在编程中经常会有一些公共函数,在已经发布的程序中,为了程序的稳定性原函数是不允许随便修改其源代码的,并且合作开发中也不允许修改调用方式,那么如果要对原函数进行功能增加,怎么办呢?这时装饰器解决了这个问题。 装饰器用到的知识:   1、函数可以作为变量传递给另一个函数   2、函数的返回值也可以是另一个函数 装饰器实现代码: 有一个公共函数,作用是写日志文件: 1 def write_log(filenmae, msg_info): 2 f = open(filenmae, 'a+', encoding='utf-8'); 3 f.write(msg_info+'\n') 4 f.close() 如果想对这个写日志文件函数增加一个写文件时间监控,这里增加一个写日志文件函数的装饰器: import time def write_log_time(func): def n_wite_log(filename,*msg_info): s_time=time.time() #参数:*msg_info 代表这个参数可传递也可不传递,例如只给文件名的日志,内容为记录时间 func(filename,

关于Python爬虫面试170道题

*爱你&永不变心* 提交于 2019-11-28 11:12:12
原文: http://blog.gqylpy.com/gqy/413 置顶:来自一名75后老程序员的武林秘籍——必读 (博主推荐) 来,先呈上武林秘籍链接: http://blog.gqylpy.com/gqy/401/ 你好,我是一名极客!一个 75 后的老工程师! 我将花两分钟,表述清楚我让你读这段文字的目的! 如果你看过武侠小说,你可以把这个经历理解为,你失足落入一个山洞遇到了一位垂暮的老者!而这位老者打算传你一套武功秘籍! 没错,我就是这个老者! 干研发 20 多年了!我也年轻过,奋斗过!我会画原理图,会画 PCB,会模拟,会数字!玩过 PLC,玩过单片机,会用汇编,会用 C!玩过 ARM,比如 PLC,STM32,和时下正在起飞的 NXP RT1052!搞过 DSP,比如 TMS320F28335!搞过 FPGA,不管 Xilinx 还是 Altera,也不管是 Verilog 还是 VHDL,或者直接画数字电路图!我懂嵌入式系统,比如 uCOS 和 Linux!我懂开源的硬件,比如 Arduino 和树莓派!我也搞软件,学了一堆上位机的语言C#,JAVA,Python,Kotlin,Swift!会写爬虫工具,又自学写APP,不管Android 还是 IOS! 可是这一切有什么用呢?土鸡瓦狗!不值一提!干技术的永远就是最苦逼的那个人! 我相信看到这里的你,应该是个 IT

python内置函数

ⅰ亾dé卋堺 提交于 2019-11-28 10:53:48
abs(x) 返回一个数的绝对值。实参可以是整数或浮点数。如果实参是一个复数,返回它的模。 all(iterable) 如果 iterable 的所有元素为真(或迭代器为空),返回 True 。 any(iterable) 如果 iterable 的任一元素为真则返回 True 。如果迭代器为空,返回 False 。 ascii(object) bin(x) class bool([x]) 返回一个布尔值,True 或者 False。 x 使用标准的 真值测试过程 来转换。如果 x 是假的 或者被省略,返回 False;其他情况返回 True。bool 类是 int 的子类(参见 数字类型 --- int, float, complex)。其他类不能继承自它。它只有 False 和 True 两个实例 (参见 布尔值)。 真值检测: 被定义为假值的常量: None 和 False。 任何数值类型的零: 0, 0.0, 0j, Decimal(0), Fraction(0, 1) 空的序列和多项集: '', (), [], {}, set(), range(0) 产生布尔值结果的运算和内置函数总是返回 0 或 False 作为假值,1 或 True 作为真值, 除非另行说明。 在 3.7 版更改: x 现在只能作为位置参数 breakpoint(*args, **kws) class

python(七) 装饰器 文件操作

試著忘記壹切 提交于 2019-11-28 10:00:40
##返回函数 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回 def cacl_sum(*args): all_sum = 0 for i in args: all_sum += i return all_sum cacl_sum( 1 , 2 , 3 , 4 ) 但是,如果不需要立刻求和,而是在后面的代码中,根据需要不返回求和的结果,而是返回求和的函数:如果 不需要立刻求和,而是在后面的代码中根据需要不返回求和的结果,而是返回求和的函数。如下: 在函 数lazy_sum中又定义了函数cacl_ sum,并且内部函数cacl_sum可以引用外部函数lazy_sum 的 参数和局部变量,当 lazy_sum 返回函数cacl_sum时,相关参数和变量都保存在返回的函数中,这 种函数形式称为“闭包(Closure)” def lazy_sum(*args): def cacl_sum (): all_sum = 0 for i in args: all_sum += i return all_sum return cacl_sum f = lazy_sum( 1 , 2 , 3 , 4 ) #调用 lazy_sum() 时,返回的并不是求和结果,而是求和函数 f () #调用函数 f 时,才真正计算求和的结果 请再注意一点,当我们调用 lazy_sum() 时

Python之装饰器入门

扶醉桌前 提交于 2019-11-28 08:56:36
概述:python装饰器属于进阶必学的,很多人刚学是很难明白的,这里用比较容易懂的方式简单讲一下:(注意:这里需要函数的基础知识) 第一步: 我们有一个函数,比如一个求和的函数: def sum_test(): sum=12+20 print(sum) 如果我们需要去再函数中前后加入开始跟结束打印用于调试,常规可能处理的办法是去修改这个函数,如下操作: def sum_test(): print("-----开始计算-----") sum=12+20 print(sum) print("-----结束计算-----") 在前后输入print()来处理 第二步: 如果我有更多的函数需要调试呢,都去修改原来已经封装好的函数?一个一个去加入print的话也会很慢,有没有更好的办法?不错,可以再定义一个调试函数,然后去函数中去调用被调试函数,如下: def sum_test(): sum=12+20 print(sum) def pr_test(func): print("-----开始计算-----") func() print("-----结束计算-----") if __name__ == '__main__': pr_test(sum_test) 上面的方法通过pr_test()调用函数sum(),能避免重复的去修改,但是我们每次要给pr_test()传参数,这也是一个不轻松的活啊

python 13 内置函数与闭包

自古美人都是妖i 提交于 2019-11-28 08:14:23
文章目录 内置函数(二) 匿名函数 内置函数(三) 闭包 内置函数(二) abs ( ) #返回绝对值--返回的是正数 enumerate ( "可迭代对象" , "序号起始值" ) #枚举 默认起始值为0,返回的是元组形式 lst = [ 11 , 22 , 33 ] print ( [ i for i in enumerate ( lst , 1 ) ] ) # (1,11) (2,22) (3,33) max ( "可迭代对象" ) #求最大值 min ( "可迭代对象" ) #求最小值 sum ( ) #求和,字符串不可用 dir ( ) #查看当前函数的方法 """ print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False) file: 默认是输出到屏幕,如果设置为文件句柄,输出到文件 sep: 打印多个值之间的分隔符,默认为空格 end: 每一次打印的结尾,默认为换行符 flush: 立即把内容输出到流文件,不作缓存 """ print ( sep = " " , end = "\n" ) #默认 print ( 1 , 2 , 3 , sep = "*" ) # 1*2*3 print ( 111 , end = "" ) print ( 22 ) #111222 print ( list (

Python基础教程:装饰器

廉价感情. 提交于 2019-11-28 08:13:52
Python装饰器是拓展原函数功能的一种函数,返回值也是一个函数。 在不更改原函数的代码的前提下,使用运算符 @ 。用于包装任何可调用的对象,并且可用于方法和函数。 带有参数的装饰器 带有不定参数的装饰器 多个装饰器 def deco ( func ) : def wrapper ( * args , ** kwargs ) : func ( * args , ** kwargs ) return wrapper @deco # 等价于func=deco(func) def func ( m , n ) : pass @deco def func2 ( m , n , k ) : pass 执行顺序是从最后一个装饰器开始,执行到第一个装饰器,再执行函数本身。 def deco1 ( func ) : print ( "1111" ) def one ( ) : print ( "2222" ) func ( ) print ( "3333" ) return one def deco2 ( func ) : print ( "aaaa" ) def two ( ) : print ( "bbbb" ) func ( ) print ( "cccc" ) return two @deco1 @deco2 def test ( ) : print ( "test test!" )

python 14 装饰器

你说的曾经没有我的故事 提交于 2019-11-28 08:11:34
文章目录 装饰器 1. 开放封闭原则 2. 装饰器推导 3. 标准版装饰器 装饰器 1. 开放封闭原则 扩展是开放的,增加新的功能;修改源码(修改已经实现的功能)是封闭的。 在不改变源码及调用方式的前提下额外增加新的功能。 2. 装饰器推导 # 版一: import time start_time = time . time ( ) #起始时间 def func ( ) : time . sleep ( 2 ) #睡眠,模拟网络延迟 print ( "我要飞" ) func ( ) print ( time . time ( ) - start_time ) # 打印执行世界 # 版二: import time def times ( s ) : start_time = time . time ( ) s ( ) print ( time . time ( ) - start_time ) def foo ( ) : time . sleep ( 2 ) print ( "我要飞" ) times ( foo ) #改变了调用方式 # 版三(初版装饰器): import time def times ( s ) : def inner ( ) : start_time = time . time ( ) s ( ) print ( time . time ( ) - start

python术语对照表

Deadly 提交于 2019-11-28 07:42:32
术语对照表 >>> 交互式终端中默认的 Python 提示符。往往会显示于能以交互方式在解释器里执行的样例代码之前。 ... 交互式终端中输入特殊代码行时默认的 Python 提示符,包括:缩进的代码块,成对的分隔符之内(圆括号、方括号、花括号或三重引号),或是指定一个装饰器之后。 2to3 一个将 Python 2.x 代码转换为 Python 3.x 代码的工具,能够处理大部分通过解析源码并遍历解析树可检测到的不兼容问题。 2to3 包含在标准库中,模块名为 lib2to3 ;并提供一个独立入口点 Tools/scripts/2to3 。参见 2to3 - 自动将 Python 2 代码转为 Python 3 代码 。 abstract base class -- 抽象基类 抽象基类简称 ABC,是对 duck-typing 的补充,它提供了一种定义接口的新方式,相比之下其他技巧例如 hasattr() 显得过于笨拙或有微妙错误(例如使用 魔术方法 )。ABC 引入了虚拟子类,这种类并非继承自其他类,但却仍能被 isinstance() 和 issubclass() 所认可;详见 abc 模块文档。Python 自带许多内置的 ABC 用于实现数据结构(在 collections.abc 模块中)、数字(在 numbers 模块中)、流(在 io 模块中)、导入查找器和加载器