
python
文章平均质量分 90
夜阑卧听风吹雨,铁马冰河入梦来
用最孤独的时光塑造出最好的自己,才能笑着说起那些云淡风轻的过去~
展开
-
Hypium纯血鸿蒙系统 HarmonyOS NEXT自动化测试框架
- type: 设备连接方式,usb-hdc表示使用hdc命令控制设备(默认) -->-- ip: 远端设备地址,ip和port为空时使用本地设备,非空时使用远端设备 -->-- port: 远端设备端口号 -->-- sn: 设备SN号列表,SN之间用分号";"分隔,sn字段为空时使用所有本地设备,非空时使用指定的sn设备 -->-- 指定测试用例目录,为空则默认设置为当前项目下的testcase文件夹 -->原创 2025-01-04 11:45:16 · 2554 阅读 · 1 评论 -
Python 异步编程 asyncio
(异步输入输出)是一种编程模式,它允许程序在等待I/O操作(如文件读写、网络请求等)完成时继续执行其他任务。通过这种方式,可以更有效地利用CPU资源和提高程序的响应速度,尤其是在处理大量并发连接或长时间运行的任务时。 是 Python 的一个库,用于编写并发代码,使用协程、任务和 Futures 来处理 I/O 密集型和高延迟操作正常的发送请求,发送请求后会等待连接建立和服务器响应,这段时间内cpu是空闲的,也无法切换到其他任务asyncio允许当执行的任务遇到IO密集型任务时(如发送请求),cpu空闲,将原创 2024-12-06 10:17:35 · 1121 阅读 · 0 评论 -
异步编程与同步编程的区别
不使用异步 I/O 时,程序在等待 I/O 操作完成时会阻塞,这可能导致资源浪费和低效的并发处理。而使用异步 I/O,则允许程序在等待 I/O 操作的同时继续执行其他任务,从而提高了资源利用率和程序的整体性能。选择哪种方式取决于具体的应用场景和需求。对于 IO 密集型任务,尤其是那些涉及大量并发操作的应用,异步 I/O 是一个更好的选择。原创 2024-12-06 09:45:18 · 599 阅读 · 0 评论 -
Python yield关键字
yield是 Python 中的一个,它用于定义生成器函数。生成器是一种特殊的迭代器,它可以在遍历过程中逐步产生值,而不是一次性生成所有值并将其存储在内存中。这使得生成器非常适合处理大量数据或无限序列,因为它们只在需要时才生成下一个值,从而节省了内存。当你在一个函数中使用yield语句时,这个函数就变成了一个生成器函数。调用生成器函数并不会立即执行其中的代码,而是返回一个生成器对象。当对这个生成器对象进行迭代(例如通过for循环或者调用next()原创 2024-12-04 17:15:29 · 1059 阅读 · 0 评论 -
纯血鸿蒙系统 HarmonyOS NEXT自动化测试实践
hdcarkTShypiumhmdriver2 一个鸿蒙自动化测试py库,安装方便,语法简洁鸿蒙自动化测试的查看了文档后,发现hypium是官方的自动化框架,但是安装环境比较复杂,并且他是一整套的测试框架,包括了用例套件的管理与执行等,算是比较重量级的。hmdriver2是一个轻量级的库,流程等都不复杂,先体验一下这个。原创 2024-11-07 10:20:55 · 2554 阅读 · 2 评论 -
Python 垃圾回收机制与缓存机制--实现原理
1.垃圾回收机制一句话总结:引用计数器为主、分代码回收和标记清除为辅1.1 引用计数在Python的C源码中有一个名为refchain的环状双向链表,Python程序中一旦创建对象都会把这个对象添加到refchain这个链表中。也就是说他保存着所有的对象。在refchain中的所有对象内部都有一个ob_refcnt用来保存当前对象的引用计数器,顾名思义就是自己被引用的次数当值被多次引用时候,不会在内存中重复创建数据,而是引用计数器+1 。 当对象被销毁时候同时会让引用计数器-1,如果引用转载 2020-09-24 11:30:57 · 449 阅读 · 0 评论 -
Python os模块与sys模块常用方法汇总
#!usr/bin/python# -*- coding: utf-8 -*-import randoma=1b=10step=10sequence=[1,2,3,4,5]random.random() #生成一个 0-1 之间的随机浮点数;random.uniform(a, b) #生成[a,b]之间的浮点数;random.randint(a, b) .原创 2020-08-24 10:37:24 · 389 阅读 · 0 评论 -
python 常用面试题目(编程)
#!usr/bin/python# -*- coding: utf-8 -*-# 字符串去重后排序from functools import reduces = "sheckjffs"str_list = list(set(s))str_list.sort()s = "".join(str_list)print(s)# 列表扩展a = [2, 4, 7, 1]b = [4, 6, 8, 3]a.extend(b)# 冒泡排序def bubbleSort(arr): .原创 2020-08-12 14:47:30 · 766 阅读 · 0 评论 -
Python requests
1.requestrequests.request(method, url, **kwargs) requests.get(url, params=None, **kwargs) requests.options(url, **kwargs) requests.head(url, **kwargs) requests.post(url, data=None, json=None, **kwargs) requests.put(url, data=None, **kwargs) request原创 2020-07-12 15:02:32 · 3927 阅读 · 0 评论 -
Python logging只写入到文件,不显示在控制台
关于logging模块的详细使用,可以参考博客python logging 替代print 输出内容到控制台和重定向到文件logging中有几个模块:Logger,Handler,Formatter,FilterLogger 对象提供应用程序可直接使用的接口,Handler 发送日志到适当的目的地,Filter 提供了过滤日志信息的方法,Formatter 指定日志显示格式。其中Logger比较不好理解Logger是一个树形层级结构,输出信息...原创 2020-06-29 10:39:46 · 11647 阅读 · 1 评论 -
Python之super与MRO
1.为什么要有superMRO 的作用:决定基类中的函数到底应该以什么样的顺序调用父类中的函数super()可以用于调用父类(超类)的某个方法,并且只能用于新式类(后面内容会讲经典类与新式类),主要用在多继承中,在单继承时直接调用父类方法即可,但是在多继承中就会涉及到重复继承等问题,这里也需要牵涉到MRO(Method Resolution Order,方法解析顺序)。super()形式如下:super(type[, object-or-type]),type -- 类,object-or-type转载 2020-06-10 13:43:56 · 1074 阅读 · 0 评论 -
python使用os.getcwd()获取当前路径不正确
在python中获取当前路径使用os.getcwd()并不总是有效的,实际上这个方法显示的是执行脚本的路径比如你有个脚本a.py中在C:\test目录下,a.py内容如下:import osprint(os.getcwd())当在e盘下执行时可以用以下代码替换:print(os.path.dirname(os.path.realpath(__file__)))...原创 2020-06-02 16:56:40 · 4753 阅读 · 3 评论 -
python ddt 实现数据驱动
ddt 是第三方模块,需安装, pip install ddtDDT包含类的装饰器ddt和两个方法装饰器data(直接输入测试数据)@data和@file_data通常情况下,data中的数据按照一个参数传递给测试用例,如果data中含有多个数据,以元组,列表,字典等数据,需要自行在脚本中对数据进行分解或者使用unpack分解数据。@data(a,b)那么a和b各运行一次用例@data([a,d],[c,d])如果没有@unpack,那么[a,b]当成一个参数传入用例运行如.原创 2020-05-22 14:38:45 · 5457 阅读 · 0 评论 -
一道三行python面试题,包含的玄机
题目如下:def mutipliers(): return [lambda x:i*x for i in range(4)]print([m(2) for m in mutipliers()])结果如何?有人会回答[0,2,4,6],有人可能题目都看不懂。实际结果:【6,6,6,6】解释:1.lambda函数虽然叫匿名函数,但是仍然是函数2.上述的函数触发了闭包规则。什么是闭包函数?当前函数引用到上一层函数的局部命名空间的变量时,就会触发闭包规则,而触发了闭包原创 2020-05-21 10:21:21 · 1195 阅读 · 0 评论 -
Python Telnetlib库的工作原理及read方法区别
telnetlib 中各种 read 函数的意义基本原理要明白 telnetlib 中各个 read 函数的意义,首先要了解 telnetlib 的工作原理。 telnetlib 首先通过 socket 连接从网络接收数据,把数据存储到自己的 raw queque 中,然后对其进行(telnet 协议相关的)处理(cook)。处理结果存放在 cooked queue 中供应用程序取用。整个过程如下图. ---------, ,----------, ,-----,转载 2020-05-20 10:32:37 · 5103 阅读 · 0 评论 -
Python pillow模块学习
from PIL import Image, ImageFilter, ImageGrab, ImageFont,ImageDrawim = Image.open("599756.jpg")#打开图片im.show()#使用默认的图片工具打开im2 = Image.open("1.png")im2.save("3.png")#另存为图片img3 = Image.new("RGBA...原创 2019-12-09 13:32:27 · 1092 阅读 · 0 评论 -
Python3编码问题理解
1.计算机保存内容编码机制计算机中只有0和1,一切都是有二进制表示,包括文本字符。当我们编辑文本"hello world"并保存,计算机首先把文本编码为二进制表示,然后再存储。当我们试图读取刚才保存的文本,首先也是读取二进制数据,然后通过解码,得到文本"hello world"。2.乱码原因文本文件在保存时候,会选择编码方式,因此打开时,要知道其编码方式,用相同的方式解码。否则如果解码...原创 2019-12-07 11:52:02 · 1315 阅读 · 0 评论 -
Python协程2--asyncio
cpu密集对于cpu密集操作,只能靠多进程方式io密集对于io密集型操作,传统上用多线程方式。多线程是系统调度,并且在线程间共享变量时需要加锁。现在,更加高效的的方式来了,协程 !协程的本质是函数回调,不需要os调度,效率极高,且不需要锁。所谓 Sync,是指操作一个接一个地执行,下一个操作必须等上一个操作完成后才能执行。而 Async 是指不同操作间可以相互交替执行,...原创 2019-12-06 11:47:06 · 1176 阅读 · 0 评论 -
Python 异步IO--协程
异步IO:例如爬虫中,访问一个链接后,会有需要等待服务器响应的时间,在等待过程中,异步编程可以进行其他操作,如请求其他连接,等到服务器返回响应时,得到通知,再进行处理。协程是在单线程中运行的,所以不是并行运行的。一个协程可以放弃执行,把机会让给其它协程在Python3.4中,协程都是通过使用yield from和asyncio模块中的@asyncio.coroutine来实现的。async...转载 2019-11-19 15:19:46 · 861 阅读 · 0 评论 -
lxml解析html简单使用
1.解析html字符串:使用lxml.etree.HTML进行解析,示例代码如下:htmlElement = etree.HTML(text)print (etree.tostring(htmlElement,encoding='utf-8').decode('utf-8'))2.解析html文件:使用lxml.etree.parse进行解析,示例代码如下:htmlElement...原创 2019-11-16 10:43:56 · 2012 阅读 · 0 评论 -
Python LeetCode :解决给定两个序列,判定第一个是不是第二个的子序列
def is_subsequence(a, b): b = iter(b) return all(i in b for i in a)print(is_subsequence([1, 3, 5], [1, 2, 3, 4, 5]))print(is_subsequence([1, 4, 3], [1, 2, 3, 4, 5]))TrueFalse解释:all函数...原创 2019-11-15 10:45:53 · 949 阅读 · 0 评论 -
Python读写config.ini文件
[browserType]browsername = Firfox[account]username = lileipassword = 123456age = 18isman = True[URL]url_a = www.baidu.comurl_b = www.ggooogle.comconfig.ini文件#!usr/bin/python# -*- cod...原创 2019-11-12 17:03:59 · 916 阅读 · 0 评论 -
Python协程之yield from
生成器与协程的区别 python中yield的用法很像return,都是提供一个返回值,但是yield和return的最大区别在于,return一旦返回,则代码段执行结束,但是yield在返回值以后,会交出CUP的使用权,代码段并没有直接结束,而是在此处中断,当调用send()或者next()方法之后,yield可以从之前中断的地方继续执行。import timedef eat(...原创 2019-11-11 14:38:53 · 659 阅读 · 0 评论 -
Python多进程
创建多进程方法os.fork# -*- coding:utf-8 -*-"""pid=os.fork() 1.只用在Unix,linux系统中有效,Windows系统中无效 2.fork函数调用一次,返回两次:在父进程中返回值为子进程id,在子进程中返回值为0"""import ospid=os.fork()if pid==0: print("执行子进程,子进程pi...原创 2019-11-06 13:37:36 · 623 阅读 · 0 评论 -
python multiprocess pool模块报错pickling error
官方文档发现python默认只能pickle以下的类型:None, True, and False integers, floating point numbers, complex numbers strings, bytes, bytearrays tuples, lists, sets, and dictionaries containing only picklable obje...原创 2019-11-04 16:28:38 · 893 阅读 · 0 评论 -
Python序列化与持久化
数据持久化可以将数据保存到文件中,数据库中。保存到文件中可以是普通txt文件,csv文件等,数据库可以是sql数据库MongoDB数据库等变量从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling变量内容从序列化的对象重新读到内存里称之为反序列化,即unpicklingjson序列化方法:dump 和 dumps 都实现了序列化 load 和 loads ...原创 2019-10-18 14:14:46 · 739 阅读 · 0 评论 -
pyhonth面试点
1.到底什么是Python?你可以在回答中与其他技术进行对比(据说是某面试题)。答案:下面是一些关键点:l Python是一种解释型语言。这就是说,与C语言和C的衍生语言不同,Python代码在运行之前不需要编译。其他解释型语言还包括PHP和Ruby。l Python是动态类型语言,指的是你在声明变量时,不需要说明变量的类型。你可以直接编写类似x=111和x="I'm a string...转载 2018-08-22 21:53:26 · 432 阅读 · 0 评论 -
Python中的作用域,==和is的区别
作用域LEGB规则:locals -> enclosing function -> globals -> builtins,依次是局部作用域---->嵌套作用域————>全局作用域——>内建作用域globals()和locals()函数可以获取当前的全局和局部作用域的所有变量在Python中并不是所有的语句块中都会产生作用域。只有当变量在Module...原创 2018-08-02 10:04:39 · 248 阅读 · 0 评论 -
Python中的模块和包的导入
Python中的模块和包的导入1.model和package:一个.py文件就称为一个model,包是一个文件夹,其中包含__init__.py文件和其他.py文件,或其他子包2.模块的导入:使用import 模块名。包的导入可以使用import 或from import 导入3.使用import a,b,c可以同时导入多个模块或包4.使用 as可以改变导入模块的名字 如 imp...原创 2018-08-01 18:59:05 · 602 阅读 · 0 评论 -
Python基础总结
如何使用元类来创建类? __metaclass__作用? 动态语言定义和特点? 如何限制实例随意添加属性? 什么是生成器,生成器的创建方法。 什么是迭代器 闭包三要素 装饰器理解,多个装饰器顺序,被装饰函数带有参数和返回值,装饰器自带参数,类装饰器 Python作用域 ==与is的区别 Python深浅拷贝 私有化 属性property 垃圾回收机制 内建属性与内建函数...原创 2018-08-10 09:37:35 · 319 阅读 · 0 评论 -
python中的闭包和装饰器
闭包闭包的定义:(1)在函数中又定义了一个函数,并且这个内部函数用到了外部函数的变量,那么将内部的函数称为闭包。(2)内部函数对外部函数作用域里变量的引用(非全局变量),则称内部函数为闭包。def addNumber(a): def add(b): print(a+b) return addc = addNumber(10)c(20)c(50)结果...原创 2018-07-31 19:58:50 · 283 阅读 · 0 评论 -
python易忘知识点记录
1.切片:[a:b:c],其中a是startIndex,b是endIndex,c是步长,负责控制方向,c正值为从左到右,startIndex应该在endIndex左边,否则返回空字符串或空列表,空元组.c为负值方向从右到左,a仍然是startIndex,应该在endIndex的右边,否则返回空字符串或空列表,空元组.2.python内置函数isinstance(object,(类型1,类型2,...原创 2019-01-11 10:25:11 · 295 阅读 · 0 评论 -
python切片操作
python切片操作 [a:b:c],其中a是startIndex,b是endIndex,c是步长,负责控制方向,c正值为从左到右,startIndex应该在endIndex左边,否则返回空字符串或空列表,空元组.c为负值方向从右到左,a仍然是startIndex,应该在endIndex的右边,否则返回空字符串或空列表,空元组.序列类型是其元素被顺序放置的一种数据结构...转载 2019-01-07 11:18:16 · 584 阅读 · 7 评论 -
Python 中不可变参数list做默认参数陷阱
def extendlist(val, aaa=[]): print("运行前aaa的值是:",aaa,"aaa的id是:",id(aaa)) aaa.append(val) print("运行后aaa的值是:",aaa) return aaalist1 = extendlist(10)print("list1的值和id是:",list1,id(list1))...原创 2019-02-18 16:11:07 · 620 阅读 · 0 评论 -
Appium之启动多个app
desired_caps = {} desired_caps['platformName'] = 'Android' desired_caps['platformVersion'] = '5.1.1' desired_caps['deviceName'] = 'Android Emulator' desired_caps['appP...原创 2019-06-13 19:06:52 · 1723 阅读 · 0 评论 -
Appium安装卸载和判断应用是否已经安装
Appium自身有安装卸载,判断应用是否安装的方法:如下:install_app(self,app_path)通过给予的路径,安装appis_app_installed(self, bundle_id) 检查指定的包,是否安装。返回True/Falseremove_app(self, app_id) 通过app_id卸载apk但是我实际测试中发现有不成功的现象,所以自己看了下...原创 2019-06-13 19:36:27 · 2386 阅读 · 0 评论 -
Python GIL
GIL:全局解释器锁,一个进程可以包含多个线程,线程之间共享内存空间,可能造成线程不安全现象。Python多线程是伪并行。 GIL只存在于通过C语言编写的Python解释器上,即CPython,在CPython中,每个线程执行前必须先获取GIL锁,没有获得的只能等待,同一时刻只有一个线程在运行 工作一段时间后,线程会主动释放GIL,让其他线程获得执行机会。有了GIL,多线程不安全依然存在 绕...原创 2019-09-17 11:14:49 · 502 阅读 · 0 评论 -
Python--threading模块
1.有两种方式来创建线程:一种是通过继承Thread类,重写它的run方法;另一种是创建一个threading.Thread对象,在它的初始化函数(__init__)中将可调用对象作为参数传入。import timefrom threading import Thread# 自定义线程函数。def main(name="Python"): for i in range(2):...原创 2019-09-19 13:56:09 · 3175 阅读 · 0 评论 -
Python中协程之yield
协程,又称微线程,纤程。英文名Coroutine。子程序,或者称为函数,在所有语言中都是层级调用,比如A调用B,B在执行过程中又调用了C,C执行完毕返回,B执行完毕返回,最后是A执行完毕。所以子程序调用是通过栈实现的,一个线程就是执行一个子程序。子程序调用总是一个入口,一次返回,调用顺序是明确的。而协程的调用和子程序不同。协程看上去也是子程序,但执行过程中,在子程序内部可中断,然后...原创 2019-09-24 10:32:19 · 560 阅读 · 0 评论 -
Python中的迭代器,可迭代对象,生成器的关系
先用一个关系图来表示他们之间的关系:基础概念:可迭代对象定义:可迭代对象:能够用于for循环的python对象可迭代对象实现了__iter__方法,该方法返回的是当前对象的迭代器类的实例,可以使用if '__iter__' in dir(str)来判断对象是否有实现了__iter__方法,可迭代对象实现了可迭代协议:实现__iter__方法from collectio...原创 2018-07-31 11:03:32 · 467 阅读 · 0 评论