![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
python学习
文章平均质量分 68
TEDxPY
微信公众号 TTTEED
展开
-
Python 实现Mac 屏幕截图
Python 实现Mac 屏幕截图前言pyscreenshotgithub地址Python 安装用例代码截图效果前言最近想做个小玩意,需要在mac端实现屏幕截图,搜了下网上中文资源都比较老旧,于是查了下,发现有些好用的Python库已经支持Mac 以及 Linux 了,特此记录pyscreenshotgithub地址github地址https://github.com/ponty/pyscreenshot/tree/3.0里面有安装和用例说明Python 安装pip install pyscr原创 2021-10-03 22:45:23 · 1461 阅读 · 0 评论 -
Python爬虫实战一:抓取知乎问题下所有回答
代码是最近(2021.09)新写的~需求任务需求:抓取知乎问题下所有回答,包括其作者、作者粉丝数、回答内容、时间、回答的评论数、回答赞同数以及该回答的链接。分析以最近比较引人关注的"大厂间要相互解除屏蔽链接问题"为例,想要拿到回答的相关数据,可以在Chrome浏览器下按F12来分析请求;但借助Charles抓包工具可以更直观地获取相关字段:注意我标注的 Query String 参数中 limit 5 表示每次请求返回5条回答,经测试最多可以改成20;offset 表示从第几个回答开始;而返回原创 2021-09-15 18:54:10 · 5294 阅读 · 5 评论 -
Python VTK 交互系统 1 交互模式入门
文章参考自《VTK 交互系统 1 交互模式入门》,按自己理解用 Python 实现相关功能如下:原文中只提及相关函数,为了能直接展示效果,我这引入一个箭头模型,想移除该模式下右键缩放功能,改成右键点击自定义输出“点击右键”信息,代码如下:import vtk# 自定义右键点击事件def right_click(obj, ev): print("点击右键")arrow = vtk.vtkArrowSource()# sphere = vtk.vtkSphereSource()ar原创 2020-08-17 19:29:01 · 1496 阅读 · 4 评论 -
Python 多线程锁
无锁多线程案例import threadingimport timenum = 100def fun_sub(): global num num2 = num time.sleep(0.001) num = num2 - 1if __name__ == '__main__': print('开始测试同步锁 at %s' % time.ctime()) thread_list = [] for thread in range(100)原创 2020-08-14 18:54:35 · 266 阅读 · 0 评论 -
Python 获取串口通信缓存大小
Python 调用串口通信时,一般都是通过 serial 模块先进行实例化:import serialted = serial.Serial(port='/dev/tty.wchusbserial1470', baudrate=115200)若想获取电脑端串口输入缓存以及输出缓存大小(bytes),可以通过该实例的 in_waiting (当前输入端缓存字节数) 和 out_waiting (当前输出端缓存字节数) 查看。若一次性发送大量请求并收到相应的返回信息,尚未进行读取,则可凭此来查看当前原创 2020-08-14 14:49:36 · 4934 阅读 · 0 评论 -
Python @property 基本用法和缺点
本文整理自《Effective Python 编写高质量 Python 代码的 59 个有效方法》第 31 条:用描述符来改写需要复用的 @property 方法@property 基本用法@property 修饰器,需要在类中先对某属性同名方法进行修饰器附加,再以 @属性名.setter 的修饰器对该方法进行改写:class Homework(object): def __init__(self): self._grade = 0 @property def原创 2020-08-13 10:45:27 · 444 阅读 · 0 评论 -
ODrive 串口通信入门指南
ODrive 官方入门指南中,采用的是 USB 连接控制模式(中文翻译版本链接)使用的是 Native Protocol。当我们需要尝试串口通信实现时,需要专程 ASCII 协议来进行串口通信实现相关的命令,结合着入门指南以及 ODrive 中的相关属性方法参数,将流程中用到的相关方法整理如下:import serialimport timeted = serial.Serial(port='/dev/tty.wchusbserial1470', baudrate=115200)ted.writ原创 2020-08-12 20:04:13 · 3243 阅读 · 0 评论 -
ODrive ASCII 协议串口通信命令整理
ODrive ASCII 协议串口通信命令整理将 USB to TTL 插入到电脑 USB 1470 端口,识别为 tty.wchusbserial1470,设置波特率,通过 serial 模块实例化:import serialted = serial.Serial(port='/dev/tty.wchusbserial1470', baudrate=115200)请求信息状态指令格式:f motor回复格式:pos vel注:f 表示请求返回信息;motor 表示电机编号,0 或原创 2020-08-12 19:55:33 · 2394 阅读 · 0 评论 -
Python @property 实时计算数值属性进行属性重构
本文整理自《Effective Python 编写高质量 Python 代码的 59 个有效方法》第 30 条:考虑用 @property 来代替属性重构。首先定义个水桶类,需要向其中注入水才有限额可以消耗使用,采用时间模块控制操作顺序:from datetime import timedelta, datetimeclass Bucket(object): def __init__(self, period): self.period_delta = timedelta(原创 2020-08-12 12:09:59 · 268 阅读 · 0 评论 -
USB to TTL python 本地测试串口通信
手头上有个 USB to TTL CH340 型号的,想在本地用 python 测试下串口通信。硬件准备首先是 USB to TTL 元件,找个跳线帽将 TXD 和 RXD 针脚相连,插到电脑上下载驱动下载对应电脑系统的 CH340 驱动:https://sparks.gogo.co.nz/ch340.html设备搜寻打开终端/命令行,输入以下命令来搜寻设备:ls /dev/tty.wchusbserial*你将得到如下格式的结果,复制下备用/dev/tty.wchusbserial原创 2020-08-11 11:42:04 · 1949 阅读 · 1 评论 -
Python @property 用法
本文整理自《Effective Python 编写高质量 Python 代码的 59 个有效方法》第 29 条:用纯属性取代 get 和 set 方法。Python 类 public 属性首先,python 类中的 public 属性可以实现 setter 和 getter 等工具方法功能,动态修改、获取类中的属性:class Resistor(object): def __init__(self, ohms): self.ohms = ohms self.vo原创 2020-08-11 10:25:41 · 368 阅读 · 0 评论 -
树莓派 4 UART 多串口配置通信
相比树莓派零、1、2 以及 3 的双串口 UART0(PL011)和 UART1(mini UART),树莓派 4 中新增了 4 个 PL011 串口共计有 6 个 UART,整理此笔记用作记录和配置参考。UART 配置1. 展示所有串口命令$ dtoverlay -a | grep uart展示 pi4 中所有串口pi@raspberrypi:~ $ dtoverlay -a | grep uart midi-uart0 midi-uart1 miniuart-bt uart0原创 2020-08-10 17:00:39 · 16231 阅读 · 16 评论 -
PyQt5 QComboBox setMaxVisibleItems 不生效
QComboBox 中可以通过 setMaxCount(self, int) 来设置下拉框总条目数,以及 setMaxVisibleItems(self, int) 设置最大可显示的条目数、即一屏显示的条目是,多余的靠下拉继续展示但实际操作时发现 setMaxVisibleItems(self, int) 这个并不能生效,原因是该方法需要配合将 QComboBox 设置为可编辑模式:cb = QComboBox(self)# 设定最大条目个数cb.setMaxCount(5)# 设置最大显示个数原创 2020-08-05 17:53:23 · 988 阅读 · 0 评论 -
python3 自动打开浏览器搜索
import webbrowserfrom urllib.parse import quotedef search_word(text): new_text =quote(text) url = 'http://www.baidu.com/s?wd=%s' % new_text webbrowser.open(url)target = "test 中国"search_word(target)注:url 链接只能包含ASCII字符,如果目标链接中有中文等非 ASCI原创 2020-08-05 16:40:19 · 952 阅读 · 0 评论 -
python 类的 public protected private 属性
本文整理自《Effective Python 编写高质量 Python 代码的 59 个有效方法》第 27 条:多用 public 属性,少用 private 属性三种属性python 类的成员变量中按可见度可划分为 public、protected 以及 private 属性class MyObject(object): def __init__(self): self.public_field = 5 self._protect_filed = 8原创 2020-08-05 10:44:50 · 2020 阅读 · 2 评论 -
Python mix-in 组件简介
整理自《Effective Python 编写高质量 Python 代码的 59 个有效方法》第 26 条,只在使用 Mix-in 组件制作工具类时进行多重继承mix-in 定义mix-in 是一种小型的类,它只定义了其他类可能需要提供的一套附加方法,而不定义自己的实例属性,此外,它也不要求使用者调用自己的 __init__ 构造器要点能用 mix-in 组件实现的效果,就不要用多重继承来做将各功能实现为可插拔的 mix-in 组件,然后令相关的类继承自己需要的那些组件,即可定制该类实例所原创 2020-08-04 10:06:59 · 529 阅读 · 0 评论 -
Python super 父类初始化
本文整理自《Effective Python 编写高质量 Python 代码的 59 个有效方法》第 25条:用 super 初始化父类简单的继承体系初始化父类的传统方式是在子类里用子类实例直接调用父类的 __init__ 方法class MyBaseClass(object): def __init__(self, value): self.value = valueclass MyChildClass(MyBaseClass): def __init__(se原创 2020-08-03 10:58:47 · 2041 阅读 · 0 评论 -
PyQt5 pyqtgraph 实时绘制数据
提到 GUI 绘图,大家可能第一反应是 OpenGL 和 Matplotlib,但其实基于 Qt 平台还有个功能强大的 pyqtgraph 绘图库,不仅支持丰富的图形种类,还能实时更新绘图数据并进行交互式操作。不同于网上其他文章或代码讲解,今天我们集中只关注实时绘制数据功能的实现。为了更精准学习该 pyqtgraph 模块功能,我们将参考官方给出的实例来边学边练。1. pyqtgraph 简介1.1 pyqtgraph 特点关于 pyqtgraph 与 Matplotlib 的对比,大致要点如下:原创 2020-08-01 19:51:34 · 23894 阅读 · 8 评论 -
PyQt5 作图之 pyqtgraph PlotWidget 代码结构拆解
关于 pyqtgraph 的介绍,网上一堆文章,但是涉及到其代码,尤其是 PlotWidget 应用的代码,要么附带的数据过于复杂不好摘,要么代码结构略复杂,对于刚接触的萌新很不友好,因此在这里自己拆解出一套 PlotWidget 代码供大家参考,每个代码都是独立可运行的,数据简单、主要观察代码结构。要点:独立的 PlotWidget 入门代码,QtDesigner 配合 PlotWidget 作图1. 最基础版 PlotWidget采用 QWidget 控件,在其上建立 PlotWidget 控件,原创 2020-08-01 15:41:13 · 10040 阅读 · 5 评论 -
《Effective Python》第 23 条笔记
assert 断言格式:# 格式 assert expression# 例如assert x==3# 若 x 值为 3,正常执行;若 x 不为 3,触发 AssertionError 异常# 等价于if not expression: raise AssertionError__call__通过名为 __call__ 的特殊方法,可以使类的实例能够像普通的 Python 函数那样得到调用class Ted(object): def __init__(self):原创 2020-07-29 20:03:57 · 139 阅读 · 0 评论 -
Python 由字典、元组到辅助类来维护程序的状态
本文整理自《Effective Python 编写高质量 Python 代码的 59 个有效方法》第 22 条:尽量用辅助类来维护程序的状态,而不要用字典和元组。字典维护简单的对象动态简单的例子,为学生建立成绩字典,记录姓名和多个分数,计算平均分,代码如下:class SimpleGradebook(object): def __init__(self): self._grades = dict() def add_student(self, name):原创 2020-07-29 16:55:59 · 247 阅读 · 0 评论 -
Python3 函数参数列表单独一个星号 * 的作用
本文整理自《Effective Python》第 21 条:用只能以关键字形式指定的参数来确保代码明晰Python 3 中可以定义一种只能以关键字形式来指定的参数,从而确保调用该函数的代码读起来会比较明确。这些参数必须以关键字的形式提供,而不能按位置提供。例如下面这个 safe_division 函数,带有两个只能以关键字形式来指定的参数,参数列表里的 * 星号,标志着位置参数的就此终结,之后的那些参数,都只能以关键字形式来指定。def safe_division(number, divisor, *原创 2020-07-29 09:34:08 · 3582 阅读 · 0 评论 -
Python 函数动态参数值设为 None 的意义
本文整理自《Effective Python 编写高质量 Python 代码的 59 个有效方法》第 20 条:用 None 和文档字符串来描述具有动态默认值的参数参数的默认值,只会在程序加载模块并读到本函数的定义时评估一次。对于{} 或 [ ] 等动态的值,可能会导致奇怪的行为。对于以动态值作为实际默认值的关键字参数来说,应该把形式上的默认值写为 None,并在函数的文档字符串里描述该默认值所对应的实际行为。例1例如:from time import *from datetime import原创 2020-07-28 15:39:21 · 9665 阅读 · 1 评论 -
VTK Python 代码详解(五)读取点云数据、旋转平移、合并显示
VTK Python 代码整理读取点云 txt 数据并显示txt 点云数据代码效果图代码2背面效果代码封装优化两个点云模型同时显示代码效果图旋转、平移动点云模型旋转平移变换代码完整代码最终效果读取点云 txt 数据并显示txt 点云数据准备了 bun000.txt 和 bun180.txt,数据文件是从斯坦福3D扫描模型网站上 ply 文件中分离出的,两个 txt 文档分别是前后相差 180 度扫描出的点云数据,文档已上传至 GitHub,下载可以点这里。代码准备好 txt 格式的点云数据文件,接原创 2020-07-25 19:07:26 · 8918 阅读 · 9 评论 -
Python *args 用法笔记
整理自《Effective Python 编写高质量 Python 代码的 59 个有效方法》第 18 条。1. 定义、用法在 def 语句中使用 *args,即可令函数接受数量可变的位置参数。比如确定一个函数接收 message 信息参数和 values 值参数,但不确定 values 有几个值,解决方法可以把 values 定义成列表,有数据就塞入列表,无数据就空列表,得到如下函数代码:def log(message,values): if not values: pri原创 2020-07-25 10:22:15 · 16218 阅读 · 0 评论 -
VTK Python 代码详解(三)
三个自定义点经过前面的简单例子,今天接触 VTK 基本数据结构,首先是点数据,展示三个点:import vtk# *******三个点 加拓扑*******# 创建点数据points = vtk.vtkPoints()# 创建顶点类型vertices = vtk.vtkCellArray()# 创建点的坐标points_list = [[1,0,0],[0,0,1],[0,0,0]]for point in points_list: # 每个点坐标加入到 vtkPoints原创 2020-07-24 19:49:45 · 2621 阅读 · 1 评论 -
vtkImageCanvasSource2D vtk python 代码演示
import vtkcanvas =vtk.vtkImageCanvasSource2D()canvas.SetScalarTypeToUnsignedChar()canvas.SetNumberOfScalarComponents(1)canvas.SetExtent(0,100,0,100,0,0)canvas.SetDrawColor(0,0,0,0)canvas.FillBox(0,100,0,100)canvas.SetDrawColor(255,0,0,0)canvas.Fi原创 2020-07-24 17:41:54 · 456 阅读 · 0 评论 -
yield 代码初练
练习: 将以下代码改写成用 yield 来构造生成器的写法:def index_words(text): result = [] if text: result.append(0) for index,letter in enumerate(text): if letter == " ": result.append(index+1) return resultaddress = "Four score and原创 2020-07-24 10:21:26 · 112 阅读 · 0 评论 -
Python VTK 球体贴图代码详解(二)
效果继昨天的柱体代码学习,之后尝试了一把球体并进行贴图,效果如下:代码代码是在昨天柱体基础上修改成球体,并针对球体贴图多了两步:import vtk# *************柱体****************# 生成一个球体sphere = vtk.vtkSphereSource()# 半径sphere.SetRadius(1.0)# 设置经纬面点sphere.SetThetaResolution(360)sphere.SetPhiResolution(360)prin原创 2020-07-23 17:24:00 · 2502 阅读 · 3 评论 -
Python VTK 代码详解(一)
昨天整理了 VTK 基础知识点,今天着重从代码分析学习。1. VTK 柱体首先看一个 VTK 画柱体的代码:import vtk# 数据源cylinder = vtk.vtkCylinderSource()cylinder.SetHeight(3.0)cylinder.SetRadius(1.0)cylinder.SetResolution(360)print("高、半径、面:",cylinder.GetHeight(),cylinder.GetRadius(),cylinder.Get原创 2020-07-22 16:04:14 · 13906 阅读 · 10 评论 -
Python enumerate 详解
enumerate 是什么首先单词 enumerate 美式音标 [ɪˈnuːməreɪt], vt. 列举;枚举;计算enumerate() 是 python 内置函数,可以直接使用,enumerate() 的作用就是按 序号(索引序列)+元素(值) 的形式将一个可迭代对象返回例如有个列表 [ “a”,“b”,“c”], 通过 enumerate() 可以直接获取到 (0,“a”)、(1,“b”)、(2,“c”) 序号搭配元素为什么要用 enumerate通常初学 Python 时,为了拿原创 2020-07-22 10:30:15 · 8156 阅读 · 0 评论 -
PyQt5 开发注册、登陆和功能界面案例与知识点梳理
最近在学习 PyQt5 GUI 编程,大致路线是找了套网课《撩课-Python-GUI编程-PyQt5》,以梳理思维导图的形式梳理了下基础知识点以及 QtDesigner 应用流程,跳过各种具体控件的细节,结合课程中具体的综合案例来进行具体练习。本文就是在完成注册、登陆和功能界面的综合案例后进行梳理,力图整理出 PyQt5 GUI 编码过程以及应用到的知识点,以及个人技术点方面的收获。案例效果展示因为是回顾,比从零开始记录的优势是可以结合着最终案例效果来进行演示。本个案例分为三个界面:注册、登陆和功能原创 2020-07-20 17:40:07 · 8095 阅读 · 3 评论 -
PyQt5 自定义信号学习思维导图
思维导图自定义信号-鼠标右键点击代码from PyQt5.Qt import *class Btn(QPushButton): # 类属性 # abc = 10 rightClicked = pyqtSignal([str],[int,str]) def mousePressEvent(self, evt): super().mousePressEvent(evt) # 为右键单击事件建立信号 if evt.but原创 2020-07-16 14:18:37 · 425 阅读 · 0 评论 -
PyQt5 右键单击鼠标代码
为按钮 QPushButton 添加右键点击功能,实现原理是新定义一个类、继承 QPushButton,在其中为右键单击事件添加信号并发送,最终为该右键单击信号添加槽进行后续处理。from PyQt5.Qt import *class Btn(QPushButton): # 类属性 # abc = 10 rightClicked = pyqtSignal() def mousePressEvent(self, evt): super().mouseP原创 2020-07-16 11:52:46 · 2096 阅读 · 2 评论 -
Pycharm 代码模版
在 Pycharm 中编码时,当我们输入 main 再按下 Tab 键,编辑器会自动出现如下代码块:if __name__ == '__main__': 类似地,如果我们有一大段代码要经常重复使用,可以将这段代码设置成一个模版,通过自定义的指令+Tab 键直接导入代码。比如我们有如下一段代码:from PyQt5.Qt import *class Window(QWidget): def __init__(self): super().__init__()原创 2020-07-15 17:10:12 · 1699 阅读 · 0 评论 -
QtDesigner 学习思维导图
原创 2020-07-14 17:14:56 · 600 阅读 · 0 评论 -
PyQt5 基础知识点思维导图
原创 2020-07-14 15:33:38 · 860 阅读 · 0 评论 -
Python GUI编程学习思维导图
思维导图制作工具:MindNode原创 2020-07-13 10:47:22 · 544 阅读 · 0 评论 -
全方位理解进程和线程
1 进程和线程形象解释首先,《进程与线程的一个简单解释》形象生动地将计算机 CPU 比做一个工厂,进程相当于工厂内不同车间,线程相当于车间内不同协作的工人。工厂电力有限,一次只能一个车间开工:单个CPU一次只能运行一个进程,其他进程处于非运行状态。一个车间里可以有很多工人协同工作:一个进程可以包括多个线程协同进行。车间空间由工人们共享:一个进程的内存空间是每个线程共享的。车间内每间房间的大小不同,里面人满的时候,其他人就不能进去了:某些线程使用某些共享内存时,若线程数目超出限制,则其他线程必须等其原创 2020-07-10 16:12:18 · 181 阅读 · 0 评论 -
微信小程序控制树莓派(一)
一. 任务描述:【微信-服务器-NUC】三端通信(第1周的50%时)1、编写一个最小系统,演示三端通信,必须使用Python语言和相关框架;2、使用异步信息沉淀的方式,建立简单扼要教程,帮助软件团队了解微信的开发方法与难点二. 思维导图在 @Will 指导下,制定如下思维导图:三. 知识沉淀1. 系统演示目前仅限本地演示:树莓派端运行服务器代码,微信小程序端可输入指令动态显示树莓派回执信息;微信小程序界面可以点选按钮,动态根据服务器端返回信息回显。2. 系统设计方案a. 微信端交互界原创 2020-07-09 20:52:06 · 5758 阅读 · 0 评论