当前位置:9992019银河国际 > www.9992019.com > 使用python有什么好处,自编写装饰器二

使用python有什么好处,自编写装饰器二

文章作者:www.9992019.com 上传时间:2019-10-22

在做接口自动化测量试验的时候,总会境遇,因连续几天超时等不当形成,接口脚本失利。

  1. __new__.__init__区分,如何贯彻单例格局,有哪些亮点
    __new__是多少个静态方法,__init__是二个实例方法
    __new__回到二个开立的实例,__init__何以都不回去
    __new__回去三个cls的实例时前边的__init__能力被调用
    当制造三个新实例时调用__new__,开首化七个实例时调用__init__
  2. 浓度拷贝
    浅拷贝只是增添了贰个指针指向三个存在之处,而深拷贝是扩张一个指针並且开辟了新的内部存储器,这一个扩张的指针指向这一个新的内部存储器,
    应用浅拷贝的境况,释放内部存储器,会自由同风流洒脱内部存款和储蓄器,深拷贝就不会冒出释放同热气腾腾内部存款和储蓄器的荒唐

官方给出的艺术:

max_retries=5 出错重试5次
注意的是,这个只对DNS,连接错误进行重试。

    from requests.adapters import HTTPAdapter
    s = requests.Session()
    s.mount('http://',HTTPAdapter(max_retries=5))
    s.mount('https://',HTTPAdapter(max_retries=5))
    s.get('https://www.baidu.com')
注意赋值和浅拷贝的区别
如l1 = ['a','b','c'] # 这段代码是是对l1 的初始化操作,开辟一个内存空间存储列表,l1 这个变量指向这个列表
l2 = l1 # 这属于赋值操作
# 如果更改l1,l2也会一起改变,因为两个变量指向的是同一个位置
import copy
浅拷贝:不管多么复杂的数据结构,浅拷贝都只会copy一层
copy.copy(...),在多层嵌套时可能会一个数据可改变可能会影响其他的数据.
深拷贝:深拷贝会完全复制原变量相关的所有数据,在内存中生成一套完全一样的内容,在这个过程中我们对这两个变量中的一个进行任意修改都不会影响其他变量.
深拷贝就是在内存中重新开辟一块空间,不管数据结构多么复杂,只要遇到可能发生改变的数据类型,就重新开辟一块内存空间把内容复制下来,直到最后一层,不再有复杂的数据类型,就保持其原引用。这样,不管数据结构多么的复杂,数据之间的修改都不会相互影响
copy.deepcopy(...)

 

  1. HTTP/IP相关磋商,分别放在哪层
    http公约是超文本传输左券,http左券是依赖TCP/IP通讯合同来传递数据
    http公约工作与c/s架构上,浏览器作为http的客户端通过UPAJEROL向http服务端即web服务器发送所用央求。web服务器收到全体央求后,向顾客端发送响应消息,
    http特点是短连接,无状态
    地点栏键输入U福特ExplorerL,按下回车之后经历了怎样?
    1.浏览器向DNS服务器必要分析该U福特ExplorerL中的域名所对应的IP地址
    2.剖析出IP地址后,依照IP地址和暗许端口80,和服务器构建TCP连接
    3.浏览器发出读取文件的http央求,该央浼报文作为TCP二次握手的第多个报文的数码发送给服务器
    4.服务器对浏览器诉求做出响应,并把相应的html文件发送给浏览器
    5.释放TCP连接
    6.浏览器将该HMTL渲染并展现内容

  2. TCP/UDP区别
    TCP公约是面向连接,保障高可信性(数据无错失,数据无失序,数据无不当,数据无重复达到)传输层左券
    UDP:数据错失,无秩序的传输层合同(qq基于udp合同)

  3. webscoket
    websocket是依据http合同的,可持续化连接
    轮询:浏览器每间距几秒就发送一遍呼吁,询问服务器是不是有新音信
    长轮询:客商端发起连接后,若无音讯,就直接不回去response给客商端,直到有消息再次回到,再次回到完事后,顾客端再一次发起连接

  4. RabbitMQ:
    劳动器端有Erlang语言来编排,扶植三种客商端,只会ajax,用于遍布式系统中蕴藏转载音讯,在易用性、扩大性、高可用性的地点不俗。
    connection是RabbitMQ的socket连接,它包裹了socket部分连锁协商逻辑
    connectionFactroy为connection的炮制工厂
    channel是大家与RabbitMQ打交道的最要害的贰个接口,超过八分之四的政工操作是在chaanel这些接口中成功,饱含定义Queue、定义Exchange、
    绑定Queue与Exchange,公布音讯等

  5. 装饰器
    调用装饰器其实是几个闭包函数,为任何函数加多附加功用,不改正被退换的源代码和不校勘被修饰的措施,装饰器的重临值也是贰个函数对象。
    举个例子说:插入日志、品质测验、事物管理、缓存、权限验证等,有了装饰器,就足以分离出大量与函数成效本人非亲非故的相同代码并接二连三起用。

  6. 闭包
    1.亟须有壹个内嵌函数
    2.内嵌函数必需引用外界函数的变量(该函数蕴涵对外效用域并非全局功效域名字的引用)
    3.外界函数的重回值必得是内嵌函数

  7. 迭代器与生成器
    迭代可迭代对象对应iter(方法)和迭代器对应next(方法)的贰个历程
    生成器:包罗含有yield那几个重要字,生成器也是迭代器,调动next把函数形成迭代器。

  8. classmethod,staticmethod,property
    类措施:将类的函数调换来类方法,函数上装饰@classmethod会将函数的自动传值参数改成cls
    静态方法:此方法也正是给类扩展叁个效用,将类内的函数实例化,给类或对象使用,此时类内的函数正是枯燥没味函数,不管是类仍旧实例化的靶子都能够使用
    实例化:类的实例化就能够爆发贰个实例(对象),能够掌握为类()把设想的事物实例化,获得实际存在的值

  9. 常用的状态码
    200--服务器成功重返网页
    204--央求收到,但回来音信为空
    304--客户端已经推行了GET,但文件未变动
    400--错误伏乞,如语法错误
    403--无权力访谈
    404--央浼的页面不设有
    500--服务器产生内部错误

  10. 多进程,多线程,协程,GIL
    GIL:全局解释器锁,是锁在cpython解释器上,导致同不日常刻,同活龙活现进度只可以有叁个线程被实施
    多进度:多进度模块multiprocessing来完结,cpu密集型,IO总括型能够用多进程
    二十四线程:八线程模块threading来促成,IO密集型,二十四线程能够升高效能
    协程:正视于geenlet,对于八线程应用。cpu通过切成丝的秘技来切换线程间的施行,境遇IO操作自动切换,线程切换时须求耗时,
    而协成好处未有切换的开支,未有锁定概念。
    经过:是财富管理单位,举办是相互独立的,完毕产出和出现
    线程:是纤维的执行单位,线程的面世为了减弱上下文切换的损耗,提供系统的并发性

  11. IO多路复用/异步非阻塞
    IO多路复用:通过大器晚成种体制,能够监听多少个描述符 select/poll/epoll
    select:连接数受限,查找匹配成对速度慢,数据由基本拷贝到客户态
    poll:校订了连接数,可是依旧查找配对速度慢,数据由基本拷贝到顾客态
    epoll:epoll是linux下多路复用IO接口,是select/poll的巩固版,它能明了增进程序在多量冒出连接中只有一丢丢生动活泼的情状下的体系CPU利用率
    异步非阻塞:异步呈未来回调上,回调就是有新闻重回时告知一声儿经过展开管理。非阻塞便是不等待,不供给进程等待下去,
    继续试行其余操作,不管其余进度的情状。

  12. PEP8标准,规范的裨益是怎么?
    1.缩进:4个空达成缩进,尽量不行使Tab
    2.行:没行最大尺寸不超越79,换行能够应用反斜杠
    3.命名标准:
    4.申明规范:

  13. range-and-xrange
    都在循环时使用,xrange内部存款和储蓄器品质更加好,xrange用法与range完全雷同,range多个生成list对象,xrange是生成器

  14. with上下文机制原理
    enterexit,上下文管理合同,即with语句,为了让一个对象包容with语句,必得在此个目的类中注明enterexit方法,
    运用with语句的目标就是把代码块放入with中实践,with截至后,自动达成清总管业,无须收到干预

  15. 经典类、新式类
    杰出类固守:深度优先,python第22中学
    新式类遵守:广度优先,Python3中

  16. 有未有三个工具得以扶持查找Python的bug和拓宽静态的代码深入分析?
    PyChecker是四个Python代码的静态分析工具,它能够协助搜索Python代码的bug,会对代码的复杂度和格式建议警报,
    Pylint是其他二个工具得以开展codingstandard检查

  17. Python是何许进展内部存款和储蓄器管理的

    • 指标援引计数:
      援引计数扩充的图景:
      来保险追踪内部存款和储蓄器中的对象,全数目的都用援引计数,一个对象分配贰个新名称将其放入一个容器中(列表,字典,元祖)引用计数减少的状态:
      应用del语句对指标别称显示的灭绝
      援引超过作用域或被重新赋值
      sys.getrefcount()函数可以拿走对象的当下援引计数
    • 标识-消亡机制
    • 分代技术

 

20、什么是python?使用python有何受益?
python是繁荣昌盛种编制程序语言,它有对象、模块、线程、卓殊管理和机关内部存款和储蓄器管理。它简洁,简单、方便、轻便增添、有这一个自带的数量结果,而且它开源

自编写装饰器风流倜傥

  1. 什么是pickling和unpickling?
    Pickle模块读入任何python对象,将它们转变来字符串,然后使用dump函数将其转储到三个文件中——这么些进度叫做pickling
    反之从存款和储蓄的字符串文件中领到原始python对象的进程,叫做unpickling

  2. python是哪些被解释的?
    Python是大器晚成种解释性语言,它的源代码能够平昔运维,Python解释器会将源代码转变到人中学间语言,之后再翻译成机器码再实行

  3. 数组和元祖之间的区分是哪些?
    数组和元祖之间的区分:数组内容可以被涂改,而元祖内容是只读的,不可被校正的,别的元祖可以被哈希,比如作为字典的key

  4. 参数按值传递和援引传递是怎么落到实处的?
    python中的意气风发切都以类,所有的变量都以三个对象的援用。援用的值是由函数分明的,因而不可能被改成,可是意气风发旦一个对象是足以被校订的,你能够修正对象
    python中对四个函数能够传递参数,可是怎么鉴定区别是值传递照旧引用传递,不是技术员手动调整的,而是python依据你传入的数量对象,自动识别的。
    假设您传入的参数对象是可变对象:列表,字典,那一年便是援用传递,假使参数在函数体内被改正,那么源对象也会被校订。
    要是你传入的参数对象是不可变的靶子:数字,元组,字符串,今年就是值传递。那么源对象是不会更动的,

  5. Python都有哪些自带的数据结构?
    Python自带的数据结构分为可变和不可变的:可变的有:数组、集合、字典,不可变的是:字符串、元祖、整数

  6. 怎么着是python的命名空间?
    在python中,全体的名字都留存于二个空间中,它们在改空间中设有和被操作——那就是命名空间,它就贴近三个盒子,在每种变量名字都对应装着三个指标,当查问变量的时候,会从该盒子里面搜索对应的对象

  7. python中的unittest是什么?
    在python中,unittest是python中的单元测量试验框架,它有着扶持分享搭建、自动测验、在测验中暂停代码、将分化测验迭代成风流倜傥组

  8. args与*kwargs
    *args代表职责参数,它会抽出大肆多少个参数并把那一个参数作为元祖传递给函数。
    **kwargs代表的首要字参数,再次回到的是字典,地点参数必定要放在第一字前边

  9. 在Python中哪些是slicing?切块
    slicing是意气风发种在稳步的指标类型中(数组、元祖、字符串)节选某龙腾虎跃段的语法

  10. python中的docstring是什么?
    Python中文档字符串被称为docstring
    轻巧的话,正是出现在模块、函数、类、方法里第一个语句的,就是docstring。会活动成为属性__doc__

  11. os与sys区别:
    os是模块肩负程序与操作系统的竞相,提供了会见操作系统底层的接口
    sys模块是背负程序与python解释器的互相,提供了一整整齐齐的函数和变量,用于操控Python时运营的条件
    32、完毕一个单例情势
    __new__()__init__()事先被调用,用于转移实例对象。利用那个艺术和类的属性的风味能够完结设计形式的单例形式。
    单例方式是指成立唯一目的,单例情势设计的类只好实例,实例化1个指标

from requests.exceptions import ConnectionError
import requests
def retry(**kw):
    def war(func):
        def w(*args,**kwargs):
            try:
                ret = func(*args,**kwargs)
            except ConnectionError:
                kw['reNum'] = int(kw['reNum']) - 1
                if kw['reNum'] >=0:
                    print kw['reNum']
                    ret = w(*args,**kwargs)
                else:
                    ret = ConnectionError
            return ret
        return w
    return war

 

自编写装饰器二

from requests.exceptions import ConnectionError

def retry(**kw):
    def wrapper(func):
        def _wrapper(*args,**kwargs):
            raise_ex = None
            for _ in range(kw['reNum']):
                print _
                try:
                    return func(*args,**kwargs)
                except ConnectionError as ex:
                    raise_ex = ex
            #raise raise_ex
        return _wrapper
    return wrapper

 

使用方法:reNum = 5 代表,出现ConnectionError时最多可重试5次。

@retry(reNum=5)
def demo():
    raise ConnectionError

 

总结:

1.编纂装饰器,其实远非那么难,只要了然方法。 那个能够参见,小编事先写的有关装饰器的篇章

2.装饰器的通熟解释,正是在函数在此以前后之后做点什么。通过这一个大家能够做过多。

3.有关需要连接错误,重试,装饰器;原理便是做二个生生不息,只要捕获到有ConnectionError 错误,就进去下贰遍巡回

调用;只要有不易的时候,直接回到函数。

 

qq本领交换群,期望你的进入:

python|测量检验|技能交流群:563227894

python|测量检验|技巧调换群:563227894

python|测量检验|技艺沟通群:563227894

 

本文由9992019银河国际发布于www.9992019.com,转载请注明出处:使用python有什么好处,自编写装饰器二

关键词: