![](https://img-blog.csdnimg.cn/20190918140213434.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Python
文章平均质量分 83
Python基础与高级、Django、爬虫、自动化、数据分析。
Spade_
故不积跬步,无以至千里;不积小流,无以成江海。持续精进,刻意练习。
展开
-
【Python】ubuntu20.04安装pip2失败解决
0. 安装pip2各种失败2021年了,想在ubuntu上装个python2.7和pip2,装pip2的时候翻车了,翻了翻网上各种通篇一律的教程,不由得让人想叹气。安装pip2的时候各种失败,试了以下几种办法:更新镜像源sudo apt install python-pipsudo wget https://bootstrap.pypa.io/2.7/get-pip.pysudo python2 get-pip.py统统不行!!!浪费时间。1. 下载pip2包并安装然而最后原创 2021-04-27 20:58:20 · 1537 阅读 · 4 评论 -
[Python] 浅谈对Python协程的理解
浅谈对Python协程的理解Python的协程也算是一个很重要的知识点了,我从刚刚开始的懵懵懂懂一知半解,到后面翻了很多书之后算是贯通一些了,因此我在此谈谈个人对Python协程的理解。对比了《Python高级编程》、《流畅的Python》等书对协程的描写,我总结了以下看法:1. 你的底层库函数必须是异步的、不IO阻塞的首先,要想实现协程,你的底层协程函数必须是异步的、不IO阻塞的。这句话很关键,你要确保你底层的协程不是IO阻塞的,能通过 yield from 交出控制权给调度程序,同时还要在IO操原创 2021-03-15 22:50:01 · 442 阅读 · 2 评论 -
[Python] 详解从属性描述符到实现ORM模型
[Python] 详解从属性描述符到实现ORM模型1. 什么是描述符?2. 理解类属性和实例属性访问的不同3. 开始写描述符4. 理解 self、instance 和 owner 参数5. 使用 getattr 和 setattr 替代字典以改写描述符类6. 使用元类注解类的属性7. 用描述符和元类仿照 Django 实现 ORM 模型1. 什么是描述符?描述符是对多个属性运用相同存取逻辑的一种方式。例如,Django ORM 和 SQLAlchemy 等 ORM 中的字段类型是描述符,把数据库记录原创 2021-02-20 22:18:18 · 764 阅读 · 1 评论 -
[Python] 深入理解元类并区分元类中的init、call、new方法
[Python] 深入理解元类并区分元类中init、call、new方法0. 参考书籍1. 元类的定义2. 区分继承自 type 和使用 metaclass 关键字3. 类装饰器的运行4. 元类的运行5. 理解元类的四个参数6. 元类中的 init 、call、new 方法7. 元类中的prepare方法8. 元类的妙用0. 参考书籍本文内容参考书籍《流畅的Python》《Effective Python》《编写高质量代码:改善Python程序的91个建议》。我只是知识的搬运工,将知识进行整理,区分出其原创 2021-01-31 21:56:41 · 1172 阅读 · 0 评论 -
[Python] 详解使用动态规划求解最大回撤并绘图
[Python] 使用动态规划求解最大回撤并绘图首先,我们要理解什么是最大回撤。最大回撤:有一个数组,求其中两个数x,y,满足x的索引小于y的索引,使得 x-y 最大。 下面举例几种情况:[1,2,3,4,5,6,7,8,9]: 最大回撤是-1。 (1)[9,8,7,6,5,4,3,2,1]: 最大回撤是8,对应的x=9,y=1。 (2)[3,7,2,6,4,1,9,8,5]: 最大回撤是6,对应的x=7,y=1。 (3)[2,3,5,2,4,1,9,2,6]: 最大回原创 2021-01-07 22:36:05 · 2256 阅读 · 4 评论 -
[Python] 理解yield关键字、生成器函数和协程
理解yield关键字、生成器函数和协程写作背景从生成器函数到协程1. yield、生成器和生成器函数2. next()和send(None)3. send()和next()的C语言实现4. send() 给生成器函数传值5. 使用Pycharm的DEBUG模式理解data = yield item的执行过程协程1. 什么是协程?2. 个人对yield和协程的理解3. 区别生成器函数和协程期待再会...写作背景主旨:介绍yield关键字的用法、生成器和生成器函数什么是协程、生成器函数和协程的区别从原创 2020-12-17 23:31:02 · 573 阅读 · 0 评论 -
[Python] selenium textarea传值到了其他元素上
[Python] selenium textarea传值到了其他元素上0. 前情提要1. 问题代码2. 解决办法:替换\t3. 另辟蹊径:selenium使用js操作textarea元素替换value0. 前情提要Python使用selenium操作textarea时,由于send_keys()要写入有多行值的脚本,脚本里面包含换行\n、\t等,所以遇到了一个很奇怪的bug,send_keys()把值写到了其他元素input上,让我有点懵逼。后面也试了调用js脚本设置textarea的value值,但是原创 2020-12-13 16:41:03 · 844 阅读 · 0 评论 -
[Python] argparse的一般使用
1. argparse使用示例import argparseparser = argparse.ArgumentParser(description='manual to this script', prefix_chars='-+/')# 指定typeparser.add_argument('-p', type=int, default=1, help="The number of page")parser.add_argument('-d', type=str, default="def原创 2020-12-12 14:19:31 · 215 阅读 · 0 评论 -
[Python] argparse处理多个功能和不同的多参数
argparse官方文档https://docs.python.org/zh-cn/3.9/library/argparse.htmlargparse使用示例功能示例import argparseparser = argparse.ArgumentParser(description='manual to this script', prefix_chars='-+/')# 指定typeparser.add_argument('-p', type=int, default=1, help=原创 2020-12-12 13:00:37 · 3216 阅读 · 0 评论 -
[Python] 自定义中间件记录所有请求和响应信息到日志
在不使用Django自带的日志模块,我想把请求和响应信息使用自定义的日志模块记录下来,比如记录请求的请求地址、请求方法、请求路径、请求信息,返回状态码、返回内容长度,要如何做呢?前面我写了一个日志装饰器,但是只能记录到我写入了视图的request,而无法记录接收到的所有request,于是我想到了用中间件,而Django自定义中间件也很简单。那么我们开始吧,自定义Django中间件记录请求和响应信息到日志中。假设项目结构如下:- Myproject - Myproject - __init原创 2020-12-10 00:11:25 · 741 阅读 · 0 评论 -
[Python] 先读后覆盖写文件
Python先读后覆盖写文件只打开一次文件,先把文件内容读取出来,处理之后形成新的数据,重新写入新的数据,完成先读取后覆盖写文件。比如有一个文件内容如下,需要将内容全转为大写然后覆盖:Now York is 3 hours ahead of California, but it does not make California slow.Someone graduated at the age of 22, but waited 5 years before securing a good job.原创 2020-12-06 13:16:18 · 3121 阅读 · 0 评论 -
[Python] 读写yaml文件和处理yaml分段
安装处理yaml的模块pip install pyyamlyaml.load(stream) / yaml.safe_load(stream):将输入stream对象加载为字典类型。推荐使用yaml.safe_load(),将加载对象限制为简单的Python对象,如整数或列表 。yaml.load() 能通过加载yaml文件构建任何类型的python对象,若加载的yaml文件来源不可信,则可能产生注入攻击的风险。yaml.dump(data) / yaml.safe_dump(data)原创 2020-12-06 13:14:37 · 3720 阅读 · 1 评论 -
[Python] 设计模式之简单理解原型模式
什么是原型模式?原型模式,就是“克隆”对象。当一个现有对象需要保持不变,而我们想创建它的精确副本,以便更改副本的某些部分时,原型模式非常有用。Python中的原型模式Python天然就有使用原型模式的优势,使用copy.deepcopy()就能实现对象的完全复制(深拷贝)。import copyobj1 = object()obj2 = copy.deepcopy(obj1)print(id(obj1), id(obj2)) # 输出的两个对象的id是不一样的原型模式示例我们有一个Web原创 2020-11-14 22:34:07 · 218 阅读 · 0 评论 -
[Python] 传递参数前面的*或**
Python传递参数前面的*或**先上结论:func(*[1, 2, 3]) == func(1, 2, 3)func(**{'name':'Spade_', 'number':'888888'}) == func(name='Spade_', number='888888')如果你不懂Python四种常用的传参方式,参考:[Python] 仅限位置参数和仅限关键字参数1. 单星号 * 解析可变参数传递参数前面的*,和不带星号的使用,func()是一个接收可变参数的函数。func(*[1原创 2020-10-30 23:56:27 · 1163 阅读 · 0 评论 -
[Python] 多线程同步问题——信箱传递
题目有n个线程,向同一个信箱(信箱的大小为k)里传递消息,放入的消息为数字i(i=1…n),有m个线程从信箱里取数字,取出来将数字*10并打印。代码实现"""有n个线程,向同一个信箱(信箱的大小为k)里传递消息,放入的消息为数字i(i=1...n),有m个线程从信箱里取数字,取出来将数字*10并打印。"""import timeimport randomfrom threading import Thread, Semaphore, Locklist_len = 5in_index, o原创 2020-10-29 23:09:44 · 239 阅读 · 0 评论 -
[Python] 多进程和多线程在共享资源上的区别
独立与非独立的内存空间同一进程的线程共享本进程的地址空间和资源,而进程之间的地址空间和资源相互独立。我们看一个简单的例子,使用多个线程/进程向同一个list内添加值。多线程的代码这样写:from threading import Thread, Lockimport timedef func(nums, i, lock: Lock): lock.acquire() # 打印控制台是共享资源,需要请求锁 print(f"Thr原创 2020-10-29 23:01:53 · 473 阅读 · 0 评论 -
[Python] 三种文件读取方式:生成器分块/按行/一次读取
三种文件读取方式。按行读取文件、按行读取并跳过某些行、一次读取文件。后续继续增加其他用法。def read_file_by_line(file): """ 按行读取,遇到空行退出 """ with open(file, mode='r', encoding='utf8') as f: while True: one_line = f.readline().strip() if not one_line:原创 2020-10-19 22:30:28 · 5060 阅读 · 2 评论 -
[Python] 4种方式优雅地连接字符串
看了很多其他人写的Python代码,不少是“+”连接字符串。各位,别再使用"+"号连接你的字符串了,这会耗费很多时间空间。优雅的字符串连接,能让你的代码更具有可读性,同时还能优化时间问题。country, city, street = '中国', '深圳市', '南山区'# f-string连接字符串,速度最快address = f"{country}.{city}.{street}"# ''.join连接字符串address = '.'.join([country, city, street原创 2020-10-19 22:21:11 · 407 阅读 · 0 评论 -
[Python] 获取前一日/周/月/年或相对任意时间
Python获取前一日/周/月/年或相对任意时间一、当前时间二、相对当前时间的前一天、前一周、前一月、前一年等三、相对(现在、或特定时间)任意时间一、当前时间# 使用time模块import timecurrent_time = time.strftime("%Y-%m-%d %H%M%S", time.localtime())# 使用datetime模块import datetimecurrent_time = datetime.datetime.now().strftime("%Y-%m原创 2020-10-19 22:15:41 · 1850 阅读 · 0 评论 -
[Python] 实现单例模式的四种方式及单例模式日志
0. 前情提要我们知道类 __init__ 方法,还应该知道类的 __new__方法,和元类的 __call__ 方法。这三个方法的执行顺序是:元类的 __call__ 方法 ==> 类的 __new__方法 == > 类的 __init__ 方法只要利用三者的执行顺序,我们就可以在创建实例对象的时候,判断实例对象是否已经创建,如果是,则返回已经创建好的实例对象,否则新建一个实例对象并返回。这样就可以实现单例模式了。1. 使用__new__实现单例模式利用运行 __ini原创 2020-09-05 23:38:50 · 1064 阅读 · 0 评论 -
[Python] selenium 的封装之报错拦截
使用selenium的时候,总是会报错、报错、各种运行中断,无奈封装一下常用的操作。包括打开页面、等待元素加载、点击元素、切换窗口、输入值等。后续会持续完善。from selenium.common.exceptions import TimeoutException, NoSuchElementException, InvalidElementStateExceptionfrom selenium.webdriver.common.by import Byimport selenium.webdri原创 2020-08-29 20:17:20 · 435 阅读 · 0 评论 -
[Python] nametuple 的使用详解及读取 csv 文件
平时偶尔会看到namedtuple,但不知道这玩意儿到底有什么用,特此学习一下。1. namedtuplenamedtuple 是一个类工厂,它接受一个类型名称和一个属性列表,并从中创建一个类。明晰类工厂这一点,即使用 namedtuple 创建的是一个类。namedtuple 结合了字典和元组的优点:访问性能优势,namedtuple 是基于元组的,通过索引访问元素非常快。存储性能优势,namedtuple 是不可变的,底层的数组存储被精确地分配所需的大小,内存效率胜过字典。生成的类可以被子类原创 2020-08-24 23:04:47 · 1152 阅读 · 3 评论 -
[Python] 生成器按行读取大文件
我们平时很少读取1个G或者N个G的大文件。但假如要读取500G的大文件,是不可能直接通过 f.read() 读到内存的,因为内存会爆掉··· 如果是超过内存容量的大文件,需要分次从磁盘内读取到内存中,这时候生成器就格外的重要了。直接上代码,非常简单。按行读取生成器:def read_file(file): with open(file, mode='r', encoding='utf8') as f: while True: one_line = f.re原创 2020-08-24 22:52:54 · 1154 阅读 · 0 评论 -
[Python] 高级用法 - 弱引用详解
前言正是因为有引用,对象才会在内存中存在。当对象的引用数量归零后,垃圾回收程序会把对象销毁。如果我们使用一个全局变量引用了一个对象,那直到程序退出前,对象的内存都不会被释放掉。此时,我们可以使用弱引用。什么是弱引用?弱引用不会增加对象的引用数量,引用的目标对象称为所指对象(referent)。因此我们说,弱引用不会妨碍所指对象被当作垃圾回收。使用弱引用import weakref_ = {0, 1}wref = weakref.ref(_)print(wref()) # {0, 1原创 2020-08-20 00:58:08 · 1884 阅读 · 1 评论 -
[Python] 深入理解 self、cls、__call__、__new__、__init__、__del__、__str__、__class__、__doc__等
[Python] 深入理解 self、cls、__call__、__new__、__init__、__del__、__str__、__class__、__doc__等Python self、cls、\_\_call\_\_、\_\_new\_\_、\_\_init\_\_、\_\_del\_\_、\_\_str\_\_、_\_class\_\_、\_\_doc\_\_等1. self 和 cls 的区别1.1 self 关键字1.2 类的变量(公有、保护、私有)1.3 cls 关键字1.3.1 static原创 2020-08-10 23:28:27 · 7948 阅读 · 7 评论 -
[Python] 仅限位置参数和仅限关键字参数
1. 四种常用的传参方式def func(a=None, b=None, *args, **kwargs): print(a, b, args, kwargs)# 1. 位置参数(positional arguments):按 位置顺序 传参func(1, 2)# 1 2 () {}# 2. 关键字参数(keyword arguments):按 关键字=值 传参func(a = 1, b = 2)# 1 2 () {}# 3. 可变参数func(1, 2, 3, 4)#原创 2020-08-02 21:33:55 · 1928 阅读 · 0 评论 -
[Python] Pandas读写Excel,读取单个、多个或全部表
Python 读写 Excel 可以使用 Pandas,处理很方便。但如果要处理 Excel 的格式,还是需要 openpyxl 模块,我个人不喜欢旧的 xlrd 和 xlwt 模块。步入正题。Pandas 读写 Excel 主要用到两个函数,下面分析一下 pandas.read_excel() 和 DataFrame.to_excel() 的参数,以便日后使用。1. pandas.read_excelpandas.read_excel(io,sheet_name=0,header=0,names=No原创 2020-07-30 23:07:39 · 18486 阅读 · 0 评论 -
[Python] 变量名的四个作用域及 nonlocal 关键字
Python 变量名的四个作用域及 nonlocal 关键字变量访问顺序Python访问一个变量时,其查找顺序遵循变量解析机制LEGB法则,依次搜索:局部作用域、嵌套作用域、全局作用域、以及内置作用域。L:local,局部作用域,即函数中定义的变量;E:enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部作用域,但不是全局的;G:global,全局变量,就是模块级别定义的变量;B:built-in,系统固定模块里面的变量,比如int, bytearray等。 搜索变量的原创 2020-07-30 22:55:51 · 725 阅读 · 1 评论 -
[Python] Pandas 里 DataFrame 常用操作记录
解决 Pandas 输出省略的问题pd.set_option('display.max_columns', 1000)pd.set_option('display.width', 1000)pd.set_option('display.max_colwidth', 1000)设置某一列为索引列,加快查找df.index = df["Name"] # 设置列为索引df = df.drop(columns = "Name") # 删除列读取某一列并转 listname_list =原创 2020-07-30 22:54:12 · 443 阅读 · 0 评论 -
[Python] 数据分析之NumPy、Pandas、Matplotlib 常用知识点总结
学了数据分析之后,呕心沥血做的思维导图。后续会继续更新其中内容。原创 2020-07-20 00:07:46 · 644 阅读 · 1 评论 -
阿里云ESC-CentOS7 安装Chrome+Webdriver+Selenium
1. 创建yum源vim /etc/yum.repos.d/google-chrome.repo # 添加如下内容:[google-chrome]name=google-chromebaseurl=http://dl.google.com/linux/chrome/rpm/stable/$basearchenabled=1gpgcheck=1gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub2. 安装google c原创 2020-07-04 22:17:38 · 4178 阅读 · 0 评论 -
CentOS7初始化配置Python3+Django+Nginx+uwsgi+celery+MySQL+Redis
Linux初始化配置Python3+Django+Nginx+uwsgi+celery+MySQL+Redis—阿里云CentOS7Linux初始化配置Python3+Django+Nginx+uwsgi+celery+MySQL+Redis—阿里云CentOS70.修改主机名1. 安装Python32. 安装MySQL3. 安装redis4. 配置git5. 安装相关的python包和celery配置setting.py文件数据库迁移6. 运行Django项目7. 安装Nginx + uwsgi7.1 安原创 2020-06-29 23:15:13 · 6922 阅读 · 0 评论 -
【Python】sorted排序list和dict的混合
【Python】sorted排序list和dict的混合1. 二维list排序2. list中混合字典3. 字典中混合list4. 对字典中的多维list进行排序先看看我们排序的有哪些类型的数据结构#### 二维list排序l1 = [['Bob', 95.00, 'A'], ['Alan', 86.0, 'C'], ['Mandy', 82.5, 'A'], ['Rob', 86, 'E']]#### list中混合字典l2 = [{'name':'alice', 'score':38}, {原创 2020-06-07 15:07:51 · 9634 阅读 · 2 评论 -
【Python】sorted排序list
①按一种规则排序listfrom operator import itemgetterdata = [('c', 3, 'Apple'), ('d', 1, 'Cat'), ('a', 2, 'Banana')]# 根据字母升序print(sorted(data, key=lambda x: x[0], reverse=False)) # <class 'list'># 根据数字升序print(sorted(data, key=lambda x: x[1], reverse=Fal原创 2020-06-07 15:00:34 · 9512 阅读 · 0 评论 -
Linux阿里云ECS-CentOS7——查看celery存储在redis内的数据
找到你redis的安装目录,进入,启动redis-cli。此处我已经配置了软连接。使用keys * 和 smembers查看[root@banana ~]# redis-cli127.0.0.1:6379> select 8OK127.0.0.1:6379[8]> keys *1) "_kombu.binding.celeryev"2) "_kombu.binding.celery"3) "_kombu.binding.celery.pidbox"127.0.0.1:6379[原创 2020-06-01 14:24:15 · 8714 阅读 · 0 评论 -
【Django】celery收到发送邮件任务没反应(无限等待)- 阿里云ECS-CentOS7
一、起因:celery收到发送邮件任务没反应(无限等待)- 阿里云ECS-CentOS7最近用阿里云部署Django项目,用celery处理发送邮件任务,celery服务已经启动,能Received task,但是收到任务后无限等待,没有进行Task xxx succeeded in.我一直以为是celery没有配置好的问题,百度各种无果。以为是代码问题?看了又看,没问题啊、、、以为是 时区问题?AsiaShanghai? 没有效果。。。。。。遂尝试放弃celery,开启一个线程去处理发送邮原创 2020-06-01 14:12:52 · 9342 阅读 · 2 评论 -
【Python】itsdangerous在Django中加密解密的使用
起因我们知道HTTP是不安全的,所以在Django中,为了加密传输的数据(可以是密码、邮件、URL,类型可以是字符串、JSON、列表等等),可以使用itsdangerous进行加密和解密数据。如加密一个URL的参数。加密前:http://127.0.0.1/user/1233145加密后:http://127.0.0.1/user/eyJhbGciOiJIUzUxMiJ9.IjEyMzMxNDUi.3bDpp2x73YsS4w6p_5Dg_4sgO49iJyWCjZsiFIdLczjawsxVVH原创 2020-05-22 21:26:41 · 1313 阅读 · 0 评论 -
【Python】List 二级归并排序(不使用sorted)
做了一道跟二级排序相关的笔试题,不用sorted函数,手撸Python归并排序,撸了很久才出来,被参数传递坑了一道,太菜了我~~~怀念C++,参数传递很清晰,想传值传引用都是自己说了算。我用Python在赋值、传参、返回值的时候,总是忍不住去想,这个赋值、参数或者返回是不是又开辟空间了?我的原变量会不会被修改掉?我要不要传引用?怎么节省内存?毕竟是以前写C++留下来的病。言归正传。问题描述给出一个n*m的列表,先按第二列进行升序排序,第二列值相同的,按第一列的值进行升序排序。输入:[[4, 8原创 2020-05-21 23:24:47 · 1177 阅读 · 0 评论 -
【Python】基金/股票 最大回撤率计算与绘图详解(附源码和数据)
起因前一段时间投了一家金融公司的Python开发工程师,让我做以下事情:以月为窗口,挑选一只基金or股票,查看它近2年最大回撤率;找到从08年-至今的金融危机时间段,并呈现在这些危机时间段内,该基金or股票的历次回撤率。给了3天时间,代码我1天不到就写完了,写完之后我就去做自己的项目了,沉迷技术无法自拔~~~3天过后,没想到打电话过来的是产品经理,完全不问代码的事情,问我平时是怎么学习的;问我有没有考虑为什么要分析这些东西;问我以后的方向;问我学习中遇到过的最大的问题是什么,我说了我最近做的原创 2020-05-20 21:33:15 · 14853 阅读 · 1 评论 -
【Python】存储字典的四种方法
Python存储字典的四种方法0.直接字典和被字符串包裹的字典1.eval + str2.json3.pickle4.numpy扩展:Python 三种方法字符串转字典0.直接字典和被字符串包裹的字典d = {'技术': {'后端开发': ['Java', 'C++', 'PHP'], '移动开发': ['HTML5', 'JavaScrpit']},'产品':{'产品经理': ['产品经理'...原创 2020-04-14 17:01:40 · 38487 阅读 · 1 评论