金沙国际唯一官网-奥门金沙手机娱乐网址

热门关键词: 金沙国际唯一官网,奥门金沙手机娱乐网址
金沙国际唯一官网 > 关于编程 > 自编写装饰器二,使用python有什么好处

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

浏览次数:142 时间:2019-10-19

在做接口自动化测试的时候,总会境遇,因接连几日超时等错误导致,接口脚本退步。

  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的顾客端通过UCR-VL向http服务端即web服务器发送所用央求。web服务器收到全体央求后,向客户端发送响应新闻,
    http特点是短连接,无状态
    地方栏键输入URL,按下回车之后经历了怎么?
    1.浏览器向DNS服务器伏乞解析该ULX570L中的域名所对应的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

 

本文由金沙国际唯一官网发布于关于编程,转载请注明出处:自编写装饰器二,使用python有什么好处

关键词:

上一篇:没有了

下一篇:没有了