自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 收藏
  • 关注

原创 浅谈Appium工作原理

一、 Appium简介Appium是一个开源工具,可用于在iOS、Android和Windows上实现本机、移动网络和混合应用程序的UI自动化测试,使用WebDriver协议驱动iOS,Android和Windows应用程序。二、 Appium特点开源免费。跨平台:允许使用相同的API针对多个平台(iOS、Android、Windows)编写测试脚本。支持多种类型:可以测试原生的、混合的、以及移动端的web项目。支持多种编程语言:可以用任何编程语言编写的Appium客户端向Appium服务端发

2021-06-25 22:42:42 493 2

原创 selenium之xpath定位

一、xpath的定位方式:绝对定位方式:页面不允许发生任何变化场景,尝试使用绝对定位方式。相对定位方式:页面可能出现一些微小的变化,想要不改变定位表达还能定位到元素,尝试使用相对定位方式。在互联网场景下,推荐使用相对定位方式示例页面:https://www.sohu.com/绝对定位:/html/body/div[3]/div/nav/div[1]/ul[1]/li[1]/a/strong相对定位://strong[text()=‘新闻’]二、xpath的定位表达式:chrome如

2021-06-14 14:27:44 1493

原创 python六剑客

python六剑客六剑客之一: 推导列表>>> [i for i in range(1,11)][1, 2, 3, 4, 5, 6, 7, 8, 9, 10]>>> [i for i in range(31) if i % 10 <= 5][0, 1, 2, 3, 4, 5, 10, 11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 25, 30]>>> [i for i in range(31) if

2021-06-13 00:26:30 208 2

原创 二进制中1的个数

一、题目描述请实现一个函数,输入一个无符号整数(以二进制串形式),输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。示例 1:输入:00000000000000000000000000001011输出:3解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 ‘1’。示例 2:输入:00000000000000000000000010000000输出:1解释:输入

2021-05-05 23:30:00 213

原创 第一个只出现一次的字符

一、题目描述:在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).(从0开始计数)示例:s = “google”返回 4s = “”返回 -1二、解题思路:1.两次遍历 + 字典统计:创建字典用于统计,key为字符,value为字符出现的总次数第一次遍历,统计每个字符出现的次数第二次遍历,当字符次数为1时,返回下标;遍历结束,如果不存在次数为1的字符,返回-1考虑特殊情况

2021-04-27 22:35:46 102

原创 CentOS 8.3 yum安装MySQL80

一、MySQL官网下载rpm包wget https://dev.mysql.com/get/mysql80-community-release-el8-1.noarch.rpm二、添加MySQL Yum存储库[root@iZ8vbazfhghcf7x8clm7jhZ opt]# rpm -Uvh mysql80-community-release-el8-1.noarch.rpmVerifying... #######################

2021-04-26 23:56:19 379

原创 剑指 Offer 57. 和为s的两个数字

一、题目描述:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。示例 1:输入:nums = [2,7,11,15], target = 9输出:[2,7] 或者 [7,2]示例 2:输入:nums = [10,26,30,31,47,60], target = 40输出:[10,30] 或者 [30,10]限制:1 <= nums.length <= 10^51 <= nums[i] <=

2021-04-24 00:14:02 91 1

原创 json的ensure_ascii=False参数使用(解决中文乱码)

json.dumps()序列化:将python数据结构转成json字符串import json>>> s = "中文abc123">>> json.dumps(s)'"\\u4e2d\\u6587abc123"'>>> d = {"name":"张三"}>>> json.dumps(d)'{"name": "\\u5f20\\u4e09"}'注意:但是我们发现一个问题,就是转成json字符串之后,中文显示是乱码

2021-01-25 15:44:08 10051 2

原创 isinstance()函数

一、函数描述isinstance() 函数来判断一个对象是否是一个已知的类型,类似 type()。二、语法isinstance(object, classinfo)object – 实例对象。classinfo – 可以是直接或间接类名、基本类型或者由它们组成的元组。如果类型相同返回True,否则返回False---- isinstance可判断的类型(classinfo):strintlisttupledictset()Iterable : 判断元素是否可以迭代

2021-01-18 23:51:40 739

原创 可变集合set()与不可变集合 frozenset()的用法与区别

一、set()函数:可变集合1.set()定义>>> s = {1,2,3}>>> type(s)<class 'set'>2.list列表、tuple元组、dict字典、str字符串,均可以转换为set集合注意:dict字典转为set集合时,只会取key值,value会被舍弃>>> s = set([1,1,2,2])>>> s{1, 2}>>> s = set((1,1,3,

2021-01-05 23:44:14 878 4

原创 爬虫-爬取网站所有图片(多线程+队列)

一、整体思路1.实现函数get_download_img_url(),通过url,可以获取图片下载url。2.实现函数downloadImage(),可以通过图片下载url,下载图片。3.实现函数get_img_page_url(),传入url,可获取列表页url和图片下载页url。4.实现函数task(),队列中获取url,执行get_download_img_url函数获取图片下载url,然后执行函数downloadImage下载图片,最后再执行函数get_img_page_url,将获取到的所

2021-01-04 21:15:49 668 1

原创 Python语言基于Socket实现聊天室(包含登录、注册功能)

一、聊天室的整体架构1.twisted:实现服务端,以及事件驱动Twisted是用Python实现的基于事件驱动的网络引擎框架。2.socket:实现客户端,以及事件驱动3.tkinter:实现客户端界面4.MySQL:用户信息存储,以及登录、注册逻辑处理二、聊天室的具体实现1.服务端实现事件驱动#--coding:utf-8--# @Time : 2020/11/30/030 23:04# @Author : panyuangao# @File : chat_roo

2021-01-01 13:13:23 6684 31

原创 多进程、多线程、协程、多进程+协程、多线程+协程的并发效率对比

一、何为进程、线程、协程?1.进程:运行起来的程序就是进程,是操作系统分配资源的最小单位。2.线程:线程是进程的组成部分,一个进程可以拥有多个线程,一个线程必须有一个父进程。3.协程:是线程的更小切分,又称为“微线程”,是一种用户态的轻量级线程。4.三者关系:进程里有线程,线程里有协程二、进程、线程、协程的区别1.进程:多进程是利用多核CPU来完成任务,进程拥有独立的内存空间,所以进程间数据不共享,进程之间的通讯是由操作系统完成的,在切换时,CPU需要进行上下文切换,导致通讯效率比较低、开销比较

2020-12-12 01:25:07 1871 3

原创 python内置函数-eval()函数与exec()函数的区别

一、eval()函数可以用来执行一个字符串表达式,并返回表达式的值字符串里不能定义变量>>> eval("2*3")6>>> eval("max('abc')")'c'>>> eval('print("hello")')hello>>>>>> a = eval('2*4')>>> a8>>> a*216>>> eval("a=1

2020-11-26 00:28:58 300 1

原创 python内置函数-获取所有的内置函数

一、如何获取python所有的内置函数dir(builtins)>>> dir(__builtins__)['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BlockingIOError', 'BrokenPipeError', 'BufferError', 'BytesWarning', 'ChildProcessError', 'ConnectionAbortedError',

2020-11-26 00:15:19 474

原创 python基础-变量的本质

一、什么是变量变量是存放数据值的容器与其它语言不同,python没有声明变量的命令首次为其赋值时,才会创建变量创建变量时会在内存中开辟一个空间python变量的类型可以改变二、变量赋值的过程数值1在内存中有个地址a=1:a是一个指针,指针就是存储一个内存地址的变量a--------->指向1在内存中的地址a=2:1在内存中的地址没有发生改变本质:a这个指针指向了内存2存在的地址三、变量的本质存储在内存中变量的地址变了(值的地址没有被改变)四、变量的命名规则数字、

2020-11-25 23:50:06 460

原创 python基础-编码、解码

一、编码格式:ASCII编码:128个,主要存储英文字符GB2312:中文常用字GBK:中文,包含生僻字–文件保存类型为(ANSI)Unicode:在内存中使用----对应的文件保存类型为(UTF-8)UTF-8:编码完全兼容ASCII,可以理解为ASCII是UTF-8中的一部分UTF-8:是变长的字符串。存储汉字是节省空间的UTF-16:存储汉字是2个字节,分大小端保存UTF-32:一个字符,都是用4个字节去保存;缺点:太占空间二、unicode与bytes的区别计算机硬盘存储或

2020-11-25 00:29:14 339

原创 python基础-字符串之常用语法

一、len(s):求字符串长度>>> s = 'abc'>>> len(s)3二、s.startswith(“a”):判断是否是以“a”开头是则返回True,否则返回False>>> s = 'abcdef'>>> s.startswith('a')True>>> s.startswith('abc')True>>> s.startswith('b')False三、s

2020-11-16 23:31:25 192

原创 python基础-字符串之切片

切片表示方法 ----> s[起始位置:结束位置(开区间):步长]s = “abcdefg”s[:3] ----> 取第0个位置到第3个位置之间的值s[1:3]-—> 取第1个位置到第3个位置之间的值s[::2] ----> 所有的值,隔着取值,步长是2s[::-1]----> 所有的值,倒着取值,步长是1s[2:] ----> 从第2个位置的值取到是最后s[100:]----> 从第100个位置的值取到是最后(位置的值是可以不存在的,不会产生

2020-11-16 22:55:32 1836

原创 python基础-模板字符串

一、%d ---->表示整数>>> s = "I got a number %d" %120>>> s'I got a number 120'>>> num = 123>>> s = "I got a number %d" %num>>> print(s)I got a number 123二、%.1f —>表示保留一位小数(四舍五入)>>> n = "i got

2020-11-16 22:43:54 437

原创 python基础-字符串的定义方法与转义符

一、定义方法:单引号双引号三引号(中间可以包含换行符)双边三引号s = 'abc's = ''abc''s = '''abc'''s = """abc"""二、转义符转义单引号、双引号转义 单引号(\') 转义双引号(\")>>> s='''a... b... c!'''>>> print(s)abc!>>> s="I'm a boy">>> s"I'm a boy">&

2020-11-16 22:39:28 252

原创 pip常用方法

pip常用方法pip list 查询pip已安装列表pip install numpy 通过pip安装numpy包pip install numpy -i http://pypi.douban.com/simple/ 通过pip国内镜像源安装numpy包(临时使用)pip uninstall numpy 卸载已安装的numpy包pip show aes 查看已安装aes包的信息pip install nose==1.3.0 安装指定版本的包(

2020-11-16 22:18:05 89

原创 多线程与队列实现简单的爬虫项目

一、为什么要做爬虫?批量获取当前比较热门的信息。根据关键字,获取自己想了解的信息。二、程序设计的整体思路新建一个队列,将种子页面的URL放到队列里打开多个线程,从队列中获取URL编写一个函数,通过URL可以获取网页源码,并...

2020-11-09 23:32:53 256

原创 多进程及队列在统计代码中的并发应用

这里写自定义目录标题多进程及队列在统计代码中的并发应用一、实现思路:二、实现过程:1.实现函数,遍历目录下的所有文件,并将python,java,C源码文件的绝对路径放到一个队列里2.实现函数,统计代码行3.实现函数,从队列中获取文件路径,并统计代码行4.使用多进程与队列,实现代码行数统计5.使用tkinter做一个简单的图形界面6.最终效果多进程及队列在统计代码中的并发应用一、实现思路:遍历目录下的所有文件,将所有python,java,C文件路径放到队列里。创建多个进程,从队列中获取文件路径,

2020-11-05 00:49:11 304 3

原创 python标准库之sys模块-标准输入、标准输出、标准错误输出

一、标准输入import sys【sys.stdin.readline()】:从键盘读入数据 ---->相当于input()>>> import sys>>> aa = sys.stdin.readline()hello world>>> aa'hello world\n'>>>二、标准输出import sys【sys.stdout.write(“xxx”)】:屏幕上打印 ---->print

2020-08-27 00:32:03 2269

原创 python基础-进制转换函数

一、bin() :十进制转为二进制zfill()方法:将二进制数字补成指定长度(用0来补)>>> bin(8)'0b1000'>>> bin(8)[2:].zfill(len(bin(8)))'001000'>>> bin(8)[2:].zfill(10)'0000001000'>>>二、oct() :十进制转为八进制>>> oct(8)'0o10'三、hex():十进制转为十六进制

2020-08-26 23:34:48 850

原创 python基础-各种运算符

python基础-运算符一、算术运算符‘+’ 加法‘-’ 减法‘*’ 乘法‘/’ 实数除法:全整数的除法按取整处理,只要含浮点数就正常除‘//’ 整数除法:无论是整数还是浮点数,结果都取整数部分,返回商的整数部分(向下取整)‘**’ 求幂运算:返回x的y次幂‘%’ 取模 :返回除法的余数>>> a = 2>>> b = 3>>> a + b5>>> a - b-1>>> a * b

2020-08-26 02:23:57 162

原创 python基础-引用赋值与按值赋值

python基础-引用赋值与按值赋值一、引用赋值什么是引用赋值?定义了变量a,并且指向了内存中的一个地址,定义变量b时,将a变量的引用赋给b,两个变量指向了同一个内存地址。>>> a = [1,2,3]>>> b = a>>> id(a)2446644301960>>> id(b)2446644301960>>> id(a) == id(b)True>>> b.append

2020-08-25 23:52:14 462

原创 统计python代码行数小工具

统计代码行数小工具1 定义统计代码行的函数(实现算法)声明变量分别存储文件个数、代码总行数、空行数、注释行数使用os.walk遍历整个目录使用for file_name in files,拿到每个文件的文件名使用os.path.join将目录名和文件名,拼成一个绝对路径用切片file_path[-3:] == “.py” 判断是否为python代码文件如果是的话,则文件个数(file_count)+1with方式,使用绝对路径,打开这个文件使用for遍历文件的每一行,然后代码总行数(li

2020-08-10 02:13:24 1025

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除