python
文章平均质量分 76
python
sysu_lluozh
这个作者很懒,什么都没留下…
展开
-
【python】datetime模块计算时间差
一、问题背景最近有小伙伴反馈接口平台的测试计划执行耗时显示有误,比如执行实际时长超过10s,但是报告中显示总耗时小于1s显示耗时统计出现问题二、问题排查开始和结束时间是否有误开始时间:2022-04-24 10:51:23.677632结束时间:2022-04-24 10:51:35.713161可见起止的时间获取没有问题计算方式round((end_time-start_time).microseconds/1000000, 2)计算结果0.04s接下来看看为什么这样的计原创 2022-04-24 12:07:40 · 9921 阅读 · 0 评论 -
【算法】快速排序
快速排序(Quicksort),又称划分交换排序(partition-exchange sort)算法思想采用"分而治之"的思想,把大的拆分为小的,小的拆分为更小的。对于给定的记录,选择一个基准数,通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列实现逻辑设当前待排序序列为R[low:high],其中low ≤ high,如果待排序的序列规模足够小,则直原创 2022-03-18 09:12:35 · 512 阅读 · 0 评论 -
【python基础】collections的使用
Python的数据类型有list, tuple, dict, str等,collections是实现特定目标的容器,以提供Python标准内建容器dict , list , set和tuple的替代选择Counter字典的子类,提供了可哈希对象的计数功能OrderedDict字典的子类,保留了他们被添加的顺序defaultdict字典的子类,提供了一个工厂函数,为字典查询提供了默认值namedtuple创建命名元组子类的工厂函数deque类似列表容器,实现了在两端快速添加(append原创 2022-03-16 08:59:06 · 825 阅读 · 0 评论 -
【python基础】reverse和reversed函数及使用
一、reversereverse()是python中列表的一个内置方法(在字典、字符串和元组中没有这个内置方法),用于列表中数据的反转例子:lista = [1, 2, 3, 4]lista.reverse()print(lista)打印结果:[4, 3, 2, 1]其实,lista.reverse()操作的返回值是一个None,其作用的结果需要通过打印被作用的列表才可以查看出具体的效果二、reversedreserved()是python内置函数之一,其功能是对于给定的序列(包括列原创 2022-03-12 14:55:58 · 53888 阅读 · 1 评论 -
【python】Flask之获取请求参数
request对象是从客户端向服务器发出请求,包括用户提交的信息以及客户端的一些信息。客户端可通过HTML表单或在网页地址后面提供参数的方法提交数据,然后通过request对象的相关方法来获取这些数据Flask框架中的request对象保存了一次HTTP请求的一切信息,常用的方法如下:如果是json格式的请求数据,则可以采用request.data来获取请求体的字符串如果是form表单的请求体,则可以使用request.form来获取参数如果是url参数,例如:url?param1=xx&原创 2022-02-28 23:36:33 · 6928 阅读 · 0 评论 -
【python】Flask之session使用
一、session机制1.1 session的作用由于http协议是一个无状态的协议,但网站基本上有登录使用的功能,这要求有状态管理,而session机制实现的就是这个功能session基于cookie实现, 保存在服务端的键值对(形式:{随机字符串:'xxxxxx'}), 同时在浏览器中的cookie中也对应一相同的随机字符串,用来再次请求的时候验证1.2 实现的原理用户第一次请求后,将产生的状态信息保存在session中,可以把session当做一个容器,保存了正在使用的所有用户的状态信息,这原创 2022-02-28 08:49:20 · 7263 阅读 · 0 评论 -
【python】Flask之模板引擎
一、模板介绍1.1 视图函数视图函数的主要作用是生成请求的响应,实际上视图函数有两个作用:处理业务逻辑返回响应内容在大型应用中,把业务逻辑和表现内容放在一起,会增加代码的复杂度和维护成本1.2 模板文件按照一定的规则书写的展示效果的HTML文件其实是一个包含响应文本的文件,其中用占位符(变量)表示动态部分,告诉模板引擎其具体的值需要从使用的数据中获取1.3 模板引擎负责按照指定规则进行替换的工具,使用真实值替换变量,再返回最终得到的字符串,这个过程称为’渲染’Flask使用Jinj原创 2022-02-26 16:21:15 · 1617 阅读 · 0 评论 -
【python】Flask之蓝图Blueprint
一、蓝图介绍蓝图是Flask提供的一个类,其具备Flask核心对象的很多功能,最重要的就是注册路由,通过Flask的蓝图,可以把整个项目分成不同的模块并在不同的模块中增加不同的功能,可以在一个应用或跨越多个项目共用蓝图使用蓝图可以简化大型项目的开发难度,为Flask扩展了一种在应用中注册服务的集中式机制二、创建蓝图2.1 创建app.py作为Flask核心注意:蓝图的注册需要放到main中进行注册,否则会进行报错from flask import Flask, render_template,原创 2022-02-24 20:03:27 · 1793 阅读 · 0 评论 -
【python】Flask之路由
一、关于路由所谓路由,就是处理请求URL和函数之间关系的程序根据例子看源码from flask import Flaskapp = Flask(__name__)@app.route('/')def index(): return 'hello world!'if __name__ == '__main__': app.run()Flask中对URL规则进行统一管理的,创建URL规则有两种方式:使用@app.route修饰器传入URL规则作为参数,将函数绑定到原创 2022-02-24 19:59:39 · 3457 阅读 · 0 评论 -
【python】Flask框架的基本使用
一、Flask介绍Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后触发Flask框架,开发人员基于Flask框架提供的功能对请求进行相应的处理,并返回给用户,如果要返回给用户复杂的内容时,需要借助jinja2模板来实现对模板的处理,即:将模板和数据进行渲染,将渲染后的字符串返回给用户浏览器“微”(micro)并不表示需要把整个Web应用塞进单个Pytho原创 2022-02-24 09:25:17 · 3264 阅读 · 0 评论 -
【python】多线程和多进程的实现
一、什么是线程和进程对于操作系统而言,一个任务就是一个进程(Process)线程是操作系统能够进行运算调度的最小单位(程序执行流的最小单元),它被包含在进程之中,是进程中的实际运作单位。一个进程中可以并发多个线程每条线程并行执行不同的任务(线程是进程中的一个实体,是被系统独立调度和分派的基本单元)每一个进程启动时都会最先产生一个线程,即主线程,然后主线程会再创建其他的子线程单个CPU可以执行多进程和多线程,即由操作系统在多个进程或者线程之间快速切换,使得每个进程或者线程短暂的交替运行,真正实现多线原创 2022-02-23 23:40:11 · 1110 阅读 · 0 评论 -
【python】序列化和反序列化
Python中序列化和反序列化?一、json中load和loads区别1.1 相同点dump 和 dumps 都实现了序列化load 和 loads 都实现反序列化序列化变量从内存中变成可存储或传输的过程称之为序列化,序列化是将对象状态转化为可保存或可传输格式的过程反序列化变量内容从序列化的对象重新读到内存里称之为反序列化,反序列化是流转换为对象1.2 区别load和loads(反序列化)load:针对文件句柄,将json格式的字符转换为dict,从文件中读取 (将stri原创 2022-02-23 19:43:50 · 168 阅读 · 0 评论 -
【python】requests模块之高级用法
requests的一些高级特性会话对象会话对象能够跨请求保持某些参数它也会在同一个Session实例发出的所有请求之间保持cookie, 期间使用urllib3的connection pooling功能。所以如果向同一主机发送多个请求,底层的TCP连接将会被重用,从而带来显著的性能提升跨请求保持一些 cookie:s = requests.Session()s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')r = s原创 2022-01-12 20:06:50 · 497 阅读 · 0 评论 -
【python】requests模块之post参数data和json的区别
requests.post主要参数是data与json,接下来看看这两者使用的主要区别一、源码看一下requests.post的源码:def post(url, data=None, json=None, **kwargs): r"""Sends a POST request. :param url: URL for the new :class:`Request` object. :param data: (optional) Dictionary, list of tup原创 2022-01-11 14:19:29 · 1381 阅读 · 0 评论 -
【python】requests模块之post请求的发送
常见的Content-Type如下:application/x-www-form-urlencoded这是最常见的数据类型,通常表明请求的数据类型是键值对类型,页面form表单数据,如username=lluozh&password=123456application/json这意味着请求的数据类型是 Json 格式的数据:{"username":"lluozh", "password":"123456"}multipart/form-datamultipart/form原创 2022-01-11 14:17:37 · 1593 阅读 · 0 评论 -
【python】request模块之中文文件名上传乱码问题
在接口平台中,有小伙伴反馈post请求上传文件返回未知异常{ "statusCode": 50000, "message": "Internal Server Error or IllegalArgumentException", "errorMsg": "未知异常"}首先怀疑是不是服务的问题哈使用postman工具上传发现可正常返回,好吧,确实是接口平台的问题一、抓包对比那抓包对比一下接口平台请求的数据和postman请求的数据的不同点在哪里接口平台postman通过对比可以原创 2022-01-10 18:45:36 · 2399 阅读 · 0 评论 -
【python】Flask-SQLAlchemy的Lost connection问题
在使用flask_sqlalchemy的时候,长时间未请求,当再一次使用连接的时候,报如下错误:[2021-12-02 09:48:44,009] ERROR in app: Exception on /xray/build [POST]Traceback (most recent call last): File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 2447, in wsgi_app response =原创 2021-12-03 08:38:08 · 1416 阅读 · 0 评论 -
【python】Flask-SQLAlchemy的使用
一、ORMObject-Relation Mapping,中文意为对象-关系映射主要实现模型对象到关系数据库数据的映射1.1 优点只需要面向对象编程, 不需要面向数据库编写代码a. 对数据库的操作都转化成对类属性和方法的操作b. 不用编写各种数据库的sql语句.实现了数据模型与数据库的解耦, 屏蔽了不同数据库操作上的差异a. 不再需要关注当前项目使用的是哪种数据库b. 通过简单的配置就可以轻松更换数据库, 而不需要修改代码1.2 缺点相比较直接使用SQL语句操作数据库,有原创 2021-12-02 08:39:36 · 1960 阅读 · 0 评论 -
【python】Celery无法运行的问题
部署代码后,进入项目目录,执行启动Celerycelery -A tasks.xrayTask worker -l info一、报错信息出现如下报错:[2021-11-30 10:08:11,922: CRITICAL/MainProcess] Unrecoverable error: SyntaxError('invalid syntax', ('/Users/lluozh/Library/Python/3.7/lib/python/site-packages/celery/backends/原创 2021-11-30 08:43:52 · 1289 阅读 · 2 评论 -
【python】Celery实现异步任务
一、简介Celery是一个异步任务的调度工具Celery 是 Distributed Task Queue,分布式任务队列,分布式决定了可以有多个worker的存在,队列表示其是异步操作,即存在一个产生任务提出需求的工头,和一群等着被分配工作的码农关于Celery的介绍可查看官方文档二、工作流程Broker在Python中定义Celery的时候,要引入Broker(消息中间件),Broker起到一个中间人的角色。在工头提出任务的时候,把所有的任务放到 Broker 里面,在 Broker 的另原创 2021-11-29 20:22:47 · 1921 阅读 · 2 评论 -
【python】代码异常时重新执行函数
有小伙伴在使用接口平台时反馈测试计划在执行时会概率性出现部分用例未执行的情况一、初步定位在定位问题时发现偶发性出现如下异常Process CaseProcess-9:Traceback (most recent call last): File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/multiprocessing/process.py", line 297, in _bootstrap self.原创 2021-09-24 08:51:51 · 2707 阅读 · 0 评论 -
【python】DBUtils数据库连接池
一、连接池的作用Python可以使用MySQLdb进行数据库的连接及查询/插入/更新等操作,但是每次连接MySQL数据库请求时,都是独立的去请求访问,相当浪费资源而且访问数量达到一定数量时,对mysql的性能会产生较大的影响。因此,实际使用中通常会使用数据库的连接池技术,来访问数据库达到资源复用的目的二、什么是DBUtilsDBUtils是一套Python数据库连接池包,并允许对非线程安全的数据库接口进行线程安全包装DBUtils提供两种外部接口:PersistentDB:提供线程专用的数据库原创 2021-07-29 08:42:09 · 1225 阅读 · 0 评论 -
【python】装饰器获取内部函数的变量值
一、需求场景在装饰器中需要获取被装饰的函数中的参数值,比如需要验证参数合法性的装饰器,比如下面的validation_project装饰器需要使用函数中project_id参数的值装饰器定义def validation_project(func): def wrapper(*args, **kwargs): func(*args, **kwargs) return wrapper装饰的函数@validation_projectdef celebrate(proj原创 2021-07-28 12:54:32 · 2935 阅读 · 0 评论 -
【Python核心】垃圾回收机制
Python程序在运行的时候,需要在内存中开辟出一块空间用于存放运行时产生的临时变量,计算完成后再将结果输出到永久性存储器中如果数据量过大,内存空间管理不善就很容易出现OOM(out of memory),程序可能被操作系统中止对于服务器,这种设计为永不中断的系统来说内存管理则显得更为重要,不然很容易引发内存泄漏。什么是内存泄漏呢?程序本身没有设计好,导致程序未能释放已不再使用的内存并不是内存在物理上消失,而是意味着代码在分配了某段内存后,因为设计错误失去了对这段内存的控制,从而造成了内存的浪费原创 2021-07-26 00:11:06 · 528 阅读 · 2 评论 -
【Python核心】全局解释器锁GIL
Python多线程另一个很重要的话题——GIL(Global Interpreter Lock,即全局解释器锁)鲜有人知,甚至连很多Python老司机都觉得GIL就是一个谜一、一个不解之谜耳听为虚,眼见为实。不妨看一个例子感受下GIL为什么会让人不明所以下面这段很简单的cpu-bound代码:def CountDown(n): while n > 0: n -= 1现在,假设一个很大的数字n = 100000000,试试单线程的情况下执行CountDown(n),使原创 2021-07-25 00:50:56 · 204 阅读 · 0 评论 -
【Python核心】并发编程之Futures
无论对于哪门语言,并发编程都是一项很常用很重要的技巧正确合理地使用并发编程,无疑会让程序带来极大的性能提升。接下来学习理解、运用Python中的并发编程——Futures一、区分并发和并行在学习并发编程时,常常同时听到并发(Concurrency)和并行(Parallelism)这两个术语,这两者经常一起使用导致很多人以为它们是一个意思,其实不然1.1 理解误区首先辨别一个误区,在Python中并发并不是指同一时刻有多个操作(thread、task)同时进行。相反,某个特定的时刻它只允许有一个操作原创 2021-07-24 23:50:15 · 242 阅读 · 6 评论 -
【Python核心】揭秘Python协程
首先要明白什么是协程?协程是实现并发编程的一种方式。一说并发肯定想到了多线程/多进程模型,多线程/多进程正是解决并发问题的经典模型之一先从一个爬虫实例出发,用清晰的思路并且结合实战来搞懂这个不算特别容易理解的概念。之后,再由浅入深直击协程的核心一、从一个爬虫说起爬虫,就是互联网的蜘蛛,在搜索引擎诞生时与其一同来到世上爬虫每秒钟都会爬取大量的网页,提取关键信息后存储在数据库中以便日后分析。爬虫有非常简单的Python十行代码实现,也有Google那样的全球分布式爬虫的上百万行代码,分布在内部上万台服原创 2021-07-24 01:26:35 · 272 阅读 · 10 评论 -
【Python核心】深入理解迭代器和生成器
在第一次接触Python的时候,可能写过类似for i in [2, 3, 5, 7, 11, 13]: print(i)这样的语句。for in语句理解起来很直观形象但是,Python在处理for in语句的时候具体发生了什么呢?什么样的对象可以被for in来枚举呢?接下来深入到Python的容器类型实现底层中,了解一种叫做迭代器和生成器的东西一、容器、可迭代对象和迭代器容器这个概念非常好理解,在Python中一切皆对象,对象的抽象就是类,而对象的集合就是容器列表(list: [0, 1, 2原创 2021-07-23 00:04:49 · 207 阅读 · 10 评论 -
【Python核心】装饰器
装饰器一直以来都是 Python 中很有用、很经典的一个 feature,在工程中的应用也十分广泛,比如日志、缓存等等的任务都会用到接下来以前面所讲的函数、闭包为切入点,引出装饰器的概念、表达和基本用法,最后,再通过实际工程中的例子再次加深理解一、函数 -> 装饰器1.1 函数核心回顾引入装饰器之前,首先一起来复习一下必须掌握的函数的几个核心概念1.1.1 函数可以赋予变量第一点,要知道在Python中,函数是一等公民(first-class citizen),函数也是对象。可以把函数赋予原创 2021-07-22 23:12:58 · 130 阅读 · 0 评论 -
【Python核心】参数传递原理
所谓的传参,就是把一些参数从一个函数传递到另一个函数,从而使其执行相应的任务。但是参数传递的底层是如何工作的,原理又是怎样的呢?实际工作中,经常遇到这样的场景:写完了代码,一测试发现结果和自己期望的不一样,于是开始一层层地 debug,花了很多时间到最后才发现,是传参过程中数据结构的改变导致了程序的出错比如,将一个列表作为参数传入另一个函数,期望列表在函数运行结束后不变,但是往往由于某些操作它的值改变了,那就很有可能带来后续程序一系列的错误因此,了解Python中参数的传递机制具有十分重要的意义,接下原创 2021-07-21 08:46:04 · 937 阅读 · 0 评论 -
【Python核心】对象的比较、拷贝
在前面的学习中,其实已经接触到了很多Python对象比较和复制的例子,比如判断a和b是否相等的if语句:if a == b: ...再比如第二个例子,这里l2就是l1的拷贝l1 = [1, 2, 3]l2 = list(l1)但可能并不清楚这些语句的背后发生了什么,比如:l2是l1的浅拷贝(shallow copy)还是深度拷贝(deep copy)呢?a == b是比较两个对象的值相等,还是两个对象完全相等呢?关于这些的种种知识,希望接下来有个全面的了解‘==’ VS ‘原创 2021-07-19 23:23:44 · 257 阅读 · 0 评论 -
【Python核心】面向对象
从C++或者JAVA 语言入手学编程,好不容易搞懂了最基本的数据类型、赋值判断和循环,却又迎面撞上了OOP(object oriented programming)的大墙,一头扎进公有私有保护、多重继承、多态派生、纯函数、抽象类、友元函数等一堆专有名词的汪洋大海中找不到彼岸,于是就放弃了进阶之路相比之下,Python是一门相对友好的语言,它在创立之初就鼓励命令交互式的轻量级编程传统的命令式语言有无数重复性代码,虽然函数的诞生减缓了许多重复性,但随着计算机的发展,只有函数依然不够,需要把更加抽象的概念引入原创 2021-07-19 08:41:37 · 222 阅读 · 6 评论 -
【Python核心】简约不简单的匿名函数
除了常规函数,经常在代码中见到一些非常规函数,它们往往很简短,就一行,并且有个很酷炫的名字——lambda,没错,这就是匿名函数匿名函数在实际工作中同样举足轻重,正确地运用匿名函数,能让代码更简洁、易读接下来继续Python的函数之旅,一起学习这个简约而不简单的匿名函数一、匿名函数基础首先,什么是匿名函数呢?1.1 匿名函数的格式以下是匿名函数的格式:lambda argument1, argument2,... argumentN : expression可以看到,匿名函数的关键字是la原创 2021-07-10 09:08:02 · 811 阅读 · 0 评论 -
【Python核心】不可或缺的自定义函数
一个规范的值得借鉴的Python程序,除非代码量很少(比如 10 行、20 行以下),基本都应该由多个函数组成,这样的代码才更加模块化、规范化函数是Python程序中不可或缺的一部分事实上,在前面的学习中已经用到了很多Python的内置函数,比如sorted()表示对一个集合序列排序,len()表示返回一个集合序列的长度大小等等接下来学习一下Python的自定义函数一、函数基础那么,到底什么是函数?如何在Python程序中定义函数呢?1.1 函数的定义说白了,函数就是为了实现某一功能的代码段,原创 2021-07-10 08:17:07 · 366 阅读 · 2 评论 -
【Python核心】异常处理
和其他语言一样,异常处理是Python中一种很常见,并且很重要的机制与代码规范一、错误与异常首先要了解,Python中的错误和异常是什么?两者之间又有什么联系和区别呢?1.1 错误类型通常来说,程序中的错误至少包括两种:一种是语法错误一种是异常1.2 语法错误所谓语法错误,也就是代码不符合编程规范,无法被识别与执行,比如下面这个例子:if name is not None print(name)If语句漏掉了冒号,不符合Python的语法规范,所以程序就会报错invalid原创 2021-07-09 08:37:17 · 211 阅读 · 2 评论 -
【Python核心】条件与循环
学习了列表、元组、字典、集合和字符串等一系列Python的基本数据类型。但是,如何把这一个个基本的数据结构类型串接起来组成一手漂亮的代码呢?这就是接下来要讨论的条件与循环条件与循环可以叫作编程中的基本功。为什么称它为基本功呢?因为它控制着代码的逻辑,可以说是程序的中枢系统。如果把写程序比作盖楼房,那么条件与循环就是楼房的根基,其他所有东西都是在此基础上构建而成毫不夸张地说,写一手简洁易读的条件与循环代码,对提高程序整体的质量至关重要一、条件语句首先,看一下Python的条件语句,用法很简单。比如,想原创 2021-07-09 00:48:27 · 451 阅读 · 2 评论 -
【Python核心】输入与输出
由浅及深讲讲Python的输入和输出一、输入输出基础最简单直接的输入来自键盘操作,比如下面这个例子name = input('your name:')gender = input('you are a boy?(y/n)')###### 输入 ######your name:Jackyou are a boy?welcome_str = 'Welcome to the matrix {prefix} {name}.'welcome_dic = { 'prefix': 'Mr.'原创 2021-07-08 13:25:56 · 295 阅读 · 2 评论 -
【Python核心】深入浅出字符串
字符串同样是Python中很常见的一种数据类型,比如日志的打印、程序中函数的注释、数据库的访问、变量的基本操作等等都用到了字符串回顾一下字符串的常用操作,并对其中的一些小 tricks 详细地加以解释一、字符串基础1.1 什么是字符串字符串是由独立字符组成的一个序列,通常包含在单引号' '双引号" "或者三引号之中(''' '''或""" """,两者一样),比如下面几种写法name = 'jason'city = 'beijing'text = "welcome to jike shijia原创 2021-07-08 12:18:33 · 233 阅读 · 0 评论 -
【Python核心】字典和集合
除了列表和元组,接下来看看两个同样很常见并且很有用的数据结构:字典(dict)和集合(set)字典和集合在Python被广泛使用,并且性能进行了高度优化,其重要性不言而喻一、字典和集合基础1.1 什么是字典和集合那什么是字典呢?字典是一系列由键(key)和值(value)配对组成的元素的集合,在 Python3.7+字典被确定为有序,而3.6之前是无序的,其长度大小可变,元素可以任意地删减和改变python3.7后字典变成有序python3.5之前,创建字典保存:hash(key)、ke原创 2021-07-07 23:15:19 · 518 阅读 · 0 评论 -
【Python核心】列表和元组
对于每一门编程语言,数据结构都是其根基。了解掌握Python的基本数据结构,对于学好这门语言至关重要Python 中最常见的两种数据结构:列表(list)和元组(tuple)一、列表和元组基础首先,需要弄清楚最基本的概念,什么是列表和元组呢?实际上,列表和元组,都是一个可以放置任意数据类型的有序集合1.1 列表和元组的创建在绝大多数编程语言中,集合的数据类型必须一致。不过,对于Python的列表和元组来说,并无此要求:l = [1, 2, 'hello', 'world'] # 列表中同时含有原创 2021-07-07 08:33:55 · 428 阅读 · 2 评论