- 博客(197)
- 资源 (9)
- 收藏
- 关注
原创 python怎么做类型标注
文章目录1. 为变量做类型标注1.1 简单的数据类型1.2 使用 Optional1.3 使用Union1.4 为容器类型做标注1.4.1 为集合做标注1.4.2 为列表做标注1.4.3 为元组做标注1.4.4 为字典做标注1.4.5 容器类型标注总结2. 为函数做标注类型2.1 对形参和返回值进行标注2.1 对可变参数进行标注2.3 callable对象做参数3. 标注自定义类3.1 自定义类实例3.2 标注类属性4. 不常见的类型标注4.1 迭代器4.2 字典的items(), keys(), valu
2021-09-22 11:18:37 5134 1
原创 闲聊flask web编程中的cookie
在web编程中,cookie和session的区别于联系并不是一个很容易搞清楚的事情。在我从事后端工作的很长时间里,对于他们的应用也并不多,因为大多数时间都是在编写API接口供其他系统调用,而cookie与session恰恰是一项只和终端用户联系紧密的技术。1. http协议无状态在尝试搞清楚cookie之前,你首先接受并理解一个事实,http协议是一个无状态的协议。所谓的无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态,这意味着每个请求都是独立的。这样的无状态会产生什么问题呢?假
2021-09-03 14:32:06 354
原创 python计算大文件的hash值,为什么要分块读取数据
import ioimport hashlibdef read_chunks(file, size=io.DEFAULT_BUFFER_SIZE): """Yield pieces of data from a file-like object until EOF.""" while True: chunk = file.read(size) if not chunk: break yield chunkd
2021-08-26 15:32:07 1479
原创 pip---判断path对于当前用户是不是可写的
1. 代码片段def check_path_owner(path): # type: (str) -> bool # If we don't have a way to check the effective uid of this process, then # we'll just assume that we own the directory. if sys.platform == "win32" or not hasattr(os, "geteuid"):
2021-08-23 10:26:10 278
原创 下载文件时,浏览器是怎么知道文件名称的?
当你在浏览器里下载一个文件时,浏览器是如何知道你所下载的文件的名称的呢?这或许是你从未考虑过的事情,但浏览器必须知道,否则,它就不知道如何保存文件。1. Content-Disposition 首部如果能在在http 响应头中找到一个content-disposition 首部,那么就根据这个首部里的内容来确定所下载文件的名称,通常它的格式是这样的Content-Disposition: attachment; filename=filename.jpgattachment表示附件,filena.
2021-08-13 17:19:44 1649
原创 python读写csv文件的正确方式
1. 读取csv文件准备数据data.csvname,age小明,14小刚,15通常,我们用下面的代码读取csvimport csvwith open(r'C:\Users\zhangdongsheng\Desktop\data.csv', encoding='utf-8')as f: reader = csv.reader(f) headers = next(reader) print(headers) for row in reader: .
2021-08-10 09:10:11 873
原创 python读取csv文件的正确方式
准备数据name,age小明,14小刚,15通常,我们用下面的代码读取csvimport csvwith open(r'C:\Users\zhangdongsheng\Desktop\data.csv', encoding='utf-8')as f: reader = csv.reader(f) headers = next(reader) print(headers) for row in reader: print(row)程序输出结果
2021-08-09 17:31:32 887 1
原创 python的split函数切分字符串时为什么会产生空字符串
群里的一个小伙伴提了一个问题,他使用split函数切分字符串得到的结果里有空字符串,他对空字符串的出现感到困惑不解。text = '1aa2'print(text.split('a')) # ['1', '', '2']这个空字符串是如何产生的呢?以a为分隔符切分时,我们认为两个a之间有一个空字符串,因此产生一个空字符串。感觉很奇怪,但是很合理。如果不这样处理,那么结果就变成了 [‘1’, ‘2’],符合你的直觉,但这回导致一个尴尬的情况text = '1aa2'print(tex
2021-08-05 10:12:21 2006
原创 一张图学会python递归函数
递归函数属于那种“难者不会,会者不难”的事情,回想自己大学时学习递归函数的经历,简直是痛不欲生,代码里没有一行是看不懂的,但就是理解不了它是怎样运行的。 等到自己悟通了原理,就又会觉得这东西太简单了,不明白自己当初为何想不清楚。对于递归函数,你就把握以下几点:在函数内调用函数自身,和调用其他函数没有区别,反正都是函数递归函数存在条件,在这个条件下必须return,否则递归就成了死循环最后一条,也是容易出错的地方,函数多次递归调用,形成了一个多层次的调用关系,函数return 时,是从最底层开始逐层
2021-08-03 19:51:26 1393 1
原创 flask_migrate---处理 sqlalchemy 数据迁移的工具
1. 什么是flask_migrateflask_migrate 是专门用来做sqlalchemy 数据迁移的工具,当据模型发生变化的时可将修改后的模型重新映射到数据库中,这意味着数据库也将被修改。本文介绍flask_migrate如何在flask项目中使用,所依赖的第三方库和版本信息如下pip install flask==1.1.4pip install flask-script==2.0.6pip install flask_migrate==2.7.0pip install sqlalc
2021-07-28 19:39:35 507
原创 使用python的tempfile模块创建临时文件
什么样的情况下需要我创建临时文件呢?我很早就知道tempfile这个模块,但一直没有使用过它,也没有兴趣去研究它,一度认为自己用不到这个模块。存在即合理,合理的才能存在,想来是我不够虚心,才没有看到这个模块的应用价值。1. 临时文件目录在linux系统下有一个/tmp 目录,这个目录下存储的都是些临时文件,创建这些临时文件的可能是操作系统,也可能是你安装的某个软件系统,比如hadoop,你自己写的程序也可以对这里的文件进行读写操作。临时文件目录下的文件夹和文件,会被定期清理,默认是30天。这就要求/t
2021-07-27 11:39:36 413
原创 一文看懂python的迭代器和可迭代对象
阅读完本文,你将收获以下知识点:什么是迭代器和可迭代对象,他们之间有什么关系迭代器可以迭代的底层原理是什么如何自定义可迭代对象和迭代器迭代器和可迭代对象是两个非常难以搞懂的python概念,我试图用最轻松的方式为你揭开它们的神秘面纱,你也将在这个过程中学习到研究技术的方法。1. 判断一个对象是不是可迭代对象,是不是迭代器我研究的思路,第一步先找到一种办法,可以判断一个对象是不是可迭代对象,是不是迭代器。如果我掌握了这种方法,那么我就可以用它来识别哪些是可迭代对象,哪些是迭代器,这样做非常关
2021-07-23 16:33:37 314 2
原创 python判断一个进程是否存在的3种方法
在python中,如何判断一个进程是否存在呢?可以使用Popen执行shell命令判断进程是否存在,或者检查/proc 目录下是否存在进程相对应的目录,最佳的方法是向进程发送信号0, 下面分别介绍1. Popen使用subprocess模块的Popen执行shell 命令,ps -ef | grep 126055 会筛选出进程执行命令中带有126055 的进程信息。import subprocesspid = 126055p = subprocess.Popen('ps -ef | grep.
2021-07-22 10:11:14 4887 1
原创 从python列表里删除一个元素会对reversed() 产生怎样的影响
这是一个在stackoverflow上看到的问题,非常的有趣且值得研究。1. iter使用iter函数返回列表的迭代器,随后从列表里删除一个元素,在遍历迭代器时,输出的内容会是怎样的呢?lst = ['a', 'b', 'c', 'd']iter_lst = iter(lst)lst.remove('c')print(list(iter_lst))考虑2分钟,想一想print函数会输出什么呢?答案是['a', 'b', 'd']从列表里删除元素c并不影响迭代器的使用,这也揭示了迭代器的
2021-07-21 10:45:18 180
原创 用python实现一个自动保存复制图片的功能
由于经常写作,需要为文章准备一些配图,通常这些配图是从百度图片搜索里准备的。在准备图片时,我遇到了两个小麻烦:有些图片的格式是webp,需要在另存为时指定格式有些图片需要剪切,剪切后不能直接复制到桌面,我总是先复制到qq聊天窗口,然后另存为,步骤繁琐有没有什么办法能让我轻松的获得复制的图片呢?经过一番思索,我研究出一个方案:让程序每隔一秒钟监听一次剪贴板,如果剪贴板里是图片,就保存到指定文件夹里,这样,在复制图片1秒钟后程序就自动的帮我把图片保存下来。说干就干。1. 验证可行性首先,我需要
2021-07-16 11:43:34 1079 3
原创 从零开始写一个推荐系统第二篇,推荐电影
1. 准备数据上一篇文章讲解了两种计算相似度的方法,理论部分就已经准备完毕了。实践部分,考验的是你的工程能力。首先,我们需要准备一份数据,这份数据我们没办法自己去造,自己造的数据不真实,没有实践的意义。可供与实战的数据有很多,很多研究机构和大学都会公开实验的数据,本文选择使用ml-100k数据集,它是一份电影评分的数据集,我这里提供一份百度网盘的下载地址: https://pan.baidu.com/s/1KWe7gmsFoEHvDd0W762fcA 提取码:6skh下载后解压,找到u.data文件,
2021-07-13 10:04:11 740 2
原创 从零开始写一个推荐系统第一篇,谁和你相似
1. 谁和你相似我们在电商网站上购买一件商品后,网站总是会提醒我们,购买这件商品的用户还购买了哪些商品,网站会猜出你可能会购买的商品。网易云音乐有一个每日推荐功能,会根据你的个人喜好为你推荐一批歌曲。这些推荐并不是随机的,而是经过一系列复杂的计算生成的。网站背后的算法是非常复杂的,但可以总结为一个简单的目标:找到和你相似的人,把这个人喜欢的东西推荐给你。那么谁和你相似呢?这又是一个复杂的问题,为了找到和你相似的人,必须将人的行为进行量化,所谓量化,就是用数学来描述人的行为。假设有4部电影,分别是霸王别
2021-07-09 11:44:18 317
原创 zodb,一个python对象数据库
1. 什么是对象数据库关系型数据库,是指采用了关系模型来组织数据的数据库,以行和列的形式存储数据库,典型如mysql。NoSQL数据库,是指非关系型数据库,典型如mongodb。对象数据库,是一种以对象形式表示信息的数据库,对于关系型数据库,你必须事先定义一张表,在写入数据时,必须通过sql语句按照表的定义写入字段值;对于NoSQL数据库,已经没有了表的概念,你实现不需要做任何定义,可以将python字典直接写入mongodb,每次写入的字典里,key的数量和内容都可以不同, NoSQL在操作上已经方
2021-07-08 17:33:57 448
原创 将docker容器作为进程来使用
1. 容器只是一个进程使用docker部署一个mysql服务,或者一个nginx服务,这些服务是持久存在的,加上环境的隔离特性,我一直都将docker容器的使用限定在容器这个范围内。在容器内,启动某个程序对外提供服务。但本质上,容器相对于宿主机,不过是一个进程而已。用进程的视角去看待它,我突然有了一个想法,或许早已经有人在这样做,或许我的这个思路存在一些问题,如果你对此有自己的经验和看法,欢迎你能够与我交换意见。我的想法很简单,对于一些任务,或者一些命令,如果执行他们需要特定的环境,那么就可以将这个环
2021-07-08 17:33:11 503
原创 用python制作一个简单的zip压缩工具
1. 功能设计对文件或文件夹压缩,是日常工作中经常要做的事情,市面上也有非常多的压缩工具,在linux系统里,有zip, tar等命令可以用于压缩。最近学习了python的zipfile模块,它提供了通用的创建,读取,写入压缩文件的方法,使用方法非常简单,我尝试使用tkinter 写一个简单的压缩小工具。界面这块,需要一个文件选择框,一个文件选择按钮,一个压缩按钮和一个label用于显示压缩过程中被压缩的文件。功能方面,不提供对压缩文件命名的能力,只对文件夹进行压缩,压缩后的文件保存在和被压缩文件夹同
2021-06-30 11:20:01 809 1
原创 使用pyfakefs在内存中创建文件,而非硬盘
pyfakefs 是一个假文件系统,它模拟的是python的文件系统,简单来说,它提供了和python的os模块,Path模块一样的功能,所有的文件操作,例如创建,修改,删除,重命名等操作都是在内存中进行的。做出一个假的文件系统,有什么用处呢,我最开始看到这个模块的介绍时,心中是一样的疑问,直至看到它的示例,才明白它的奥妙之处。我们在编写python模块时,如果这个模块的功能是和文件操作有关的,比如遍历某个文件夹,移动一些文件到另一个文件夹,如果你想做单元测试,就必须准备这些文件,麻烦的是随着测试的进行,
2021-06-25 17:15:13 627
原创 解密python虚拟环境是如何创建的
python虚拟环境,允许你在同一台机器上部署不同版本的python项目,即便是同一个python版本的项目,其依赖的第三方库也可以不同。在python2.7时代,实现虚拟环境最流行的库是virtualenv, 进入到python3时代后,内置了venv来支持虚拟环境的创建,此外,conda也可以非常方便的管理虚拟环境。那么,你是否好奇过,虚拟环境是如何实现的,不同的环境之间究竟是如何做到隔离的,进入虚拟环境后,在shell命令行的最前端,还是显示虚拟环境的名称,这又是怎么实现的?带着这些疑问,本文以v
2021-06-24 17:30:21 306
原创 在python代码中,写其他编程语言的hello world
1. hello world不论哪种编程语言,在你最开始学习时,都会给你一个在终端输出hello world的示例print("hello world")这已经成为一种惯例,最近在github上闲逛时,偶遇了一个特别有趣的项目,这个作者实现了一个模块,可以让你在python代码里,使用其他编程语言的语法和关键字来编写hello world , 就像下面这样import anyprintprintf("printf %d\n", 10) # cfmt.Println("hello
2021-06-23 15:27:32 405 1
原创 掌握hashtable,深度理解python字典的数据结构
文章目录1. hash函数2. hashtable2.1 链地址法实现hashtable2.2 解决冲突2.3 开放寻址法实现hashtable2.4 逻辑删除key3. python的字典字典在python中几乎无处不在,它性能强劲,而且可靠,这源于底层的数据结构—hashtable。本文将向你介绍hashtable这种数据结构,你将学习掌握到以下知识点:hash函数hashtable数据结构python字典顺序写入1. hash函数在学习hashtable之前,首先需要掌握hash函数,
2021-06-10 09:28:50 459 2
原创 忘掉python的os.path吧,pathlib巨好用
1. pathlib 取代os.path模块从python3.4开始,pathlib正式成为标准库,旨在取代老旧的os.path模块和一些os模块中对系统路径的操作。pathlib提供了表示文件系统路径的类,而os.path提供的是各种操作路径的函数,如果你已经熟练的掌握了os.path,那么学习pathlib将非常容易。从使用情况来看,pathlib的功能对编程人员更加友好,对系统路径的操作更便捷。2. 纯路径与具体路径下图是pathlib所提供的类的继承关系纯路径与具体路径的区别在于,具体路
2021-06-09 15:50:11 234
原创 用python为网站画一张用户分布地图
我的个人博客网站coolpython.net上线已经有将近两年的时间了,一直都想画一张用户分布的地图,今天终于完成了,效果图如下本文记录下地图的制作过程1. 第一步,提取用户ip我的网站是用python编写的,使用uwsgi部署,会产生一个名为uwsgi.log的日志文件,记录的内容如下[pid: 4758|app: 0|req: 62019/129930] 113.110.227.224 () {42 vars in 930 bytes} [Mon Jun 7 16:21:15 2021] G
2021-06-08 18:08:54 829 4
原创 python web框架多进程部署下数据库连接问题
python常用的web框架,诸如flask,django,在生产部署时,都会选择多进程的部署方式,选用的中间件多为uwsgi或者gunicorn。如果项目里使用了数据库,那么就要考虑数据库连接在多进程下的一些问题,本文以mysql数据库为例。1. 多进程下共用数据库连接python连接mysql的客户端驱动库有很多种,例如pymysql,它们都提供了数据库连接池,连接池是多线程安全的,多进程下并不安全。多线程的安全,是通过线程锁解决的,这非常容易做到,而多进程加锁则并不容易。我所谓的多进程,是由
2021-03-16 20:17:35 767 4
原创 认识flask蓝图 blueprint
1. 一个最小的应用flask教程都喜欢用一个非常小的应用示例向你展示flask的小巧灵活,例如下面的这个应用from flask import Flaskapp = Flask(__name__)@app.route('/')def hello_world(): return 'Hello World!'if __name__ == '__main__': app.run(port=5678)真正的flask应用,绝不可能是如此的短小,而是划分许多模块,要提供很多
2021-03-16 20:16:48 161
原创 python使用正则表达式实现字符串替换
python的字符串提供了replace方法,可以将子串替换成其他字符串,例如下面的代码name= 'flask_script'name = name.replace('_', '-')print(name) # flask-script替换的前提是清楚的知道哪些字符串需要被替换,如果规则模糊了,replace方法就不奏效了,比如下面的字符串name = 'fla346s35k_sc32ript'现在要求你将字符串里的所有数字都去掉,使用replace就非常困难了,这种情况下,可以求
2021-03-16 20:16:00 18426
原创 有关python包名的规范
你可以自己做一个实验,执行下面的命令安装一个第三方库 pip isntall flask-script安装好以后,使用pip show flask-script 命令可以查看这个库的具体信息Name: Flask-ScriptVersion: 2.0.6Summary: Scripting support for FlaskHome-page: http://github.com/smurfix/flask-scriptAuthor: Dan JacobAuthor-email: dan
2021-03-16 20:15:32 821
原创 pip是如何卸载你安装的第三方库的
使用pip uninstall 命令可以卸载掉你所安装的第三方库,所有与其相关的文件都将被pip整理出来展示并询问是否真的要删除,类似下面的提示pip uninstall noxFound existing installation: nox 2020.8.22Uninstalling nox-2020.8.22: Would remove: d:\python\lib\site-packages\nox-2020.8.22.dist-info\* d:\python\lib\si
2021-03-16 20:14:47 2745
原创 解决阿里云服务器使用git操作慢的问题
最近遇到一个闹心的事情,我自己网站的源码放在github上托管,项目部署在阿里云服务器上。每次更新时,都是用git pull 命令拉取最新的代码,git命令年后突然变慢了,根本拉取不了。提了工单,回复说github是外网,难免有线路不稳定的情况。使用ping命令测试,延迟很高。经过一番谷歌和摸索,终于找到了解决办法,为git配置ssh代理。第一步,需要申请一台阿里云香港服务器,我原本就有。第二步,生成ssh keyssh-keygen -t rsa -C "your mail"一路回车就行,在
2021-03-16 20:14:03 1269
原创 轻松学会python面向对象第8篇---类可以规范数据的行为
类可以规范数据的行为,数据有什么样的行为,是人赋予的,因此,类规范的是人的行为。1. 保护数据不被肆意修改class Student(): def __init__(self, name, age): self.name = name self.age = agestu = Student('小明', 14)print(f"{stu.name}今年{stu.age}岁")stu.age = 1000print(f"{stu.name}今年{stu.a
2021-03-16 20:13:21 154
原创 轻松学会python面向对象第7篇---类可以形象的描述数据之间的关系
不考虑特殊情况,一个班主任带一个班级,这位班主任老师与学生之间就建立起了一对多的关系。如果不用面向对象,你难以用代码来描述他们之间的关系。类,是一种约定,是对内容的约定,对关系的约定,对行为的约定。在没有实例被创建出来之前,仅仅通过约定,就能够让你对数据有一个非常全面且形象的理解。class Student(): def __init__(self, name, yw_score, sx_score): self.name = name # 姓名
2021-03-15 12:38:48 152
原创 轻松学会python面向对象第6篇---类可以准确描述数据内容
封装,是面向对象三大特性之一,我将其分解为三个方面:对数据内容的准确描述对数据之间关系的形象描述对数据行为的规范和约定接下来几篇文章降重点讲解封装1. 程序员真的不善于沟通么?没有人会否定沟通的重要性,在工作当中,我们需要与其他人进行协作,才能顺利的完成工作内容,能做领导的,一定具备很好的沟通能力,否则,工作难以开展。在人们眼中,程序员是一群相对比较沉默的群体,甚至是有些木讷,给人一种不善交流沟通的印象。这种评价正确么?我认为,要分开来看,程序员和程序员群体以外的人沟通,确实存在一些阻碍
2021-03-15 12:37:59 177
原创 轻松学会python面向对象第5篇---继承
任何一门编程语言,其根本目的都是用抽象的方式来描述具体的世界,也就是建模。现实中的世界,是非常复杂的,为了应对这种复杂性,理所应当的引入了继承。狗是人类的好朋友,在一个游戏里,需要创建很多狗的对象,也就是需要定义很多狗的类。前面的文章里,我定义个Dog类,泛指狗,但实际上狗也分很多种类,比如猎狗,哈士奇,金毛。。。。。。。不同种类的狗,有不同的技能,不同的用途,如果只定义一个Dog类,就如同一个大杂烩,所有的代码都要写在一个类里,太臃肿。所以,你应当想到,对每一种狗针对性的创建一个类:HuntDo
2021-03-15 12:36:59 170
原创 轻松学会python面向对象第4篇---神奇的点
点动成线,线动成面,面动成立体,宇宙起源于一个奇点,看来,点是一个很神奇的东西。在编程语言里,点无处不在。1. 追踪寻找import osprint(os.path.exists('/data'))上面的代码里出现了两个点,那么这两个点的作用是什么呢?代码的目的是要判断/data目录是否存在,要用到exists函数,而这个exists函数写在了path模块里,path并没有直接对外暴露,而是存在与os模块里。因此,想要使用exists函数,就要从os模块开始,用“点”来一步步追踪寻找。你也可以换
2021-03-15 12:36:23 121
原创 轻松学会python面向对象第3篇---翻译翻译,什么叫对象
黄四郎承诺三天后要给县长大人一个惊喜,马县长并不买账,逼师爷翻译,什么叫惊喜,我就叫你翻译翻译,什么TM的,叫TM的惊喜。现在,你学了面向对象了,请翻译翻译,什么叫对象。有人告诉你,在python中,一切皆对象,可你还是不理解,心中一遍遍嘶吼着,翻译翻译,什么叫对象,什么TM的,叫TM的对象。别急,听我慢慢道来。1. 对象老规矩,先来看代码class Dog(): def __init__(self, _name, _age): self.name = _name
2021-03-15 12:35:42 176
原创 轻松学会python面向对象第2篇---属性与方法
接上文,是什么很重要,而你最好不要强行的将编程领域的概念与现实生活中的事物相关联,那么,我们就从代码形式上入手,在缺少代码实践之前,暂且用这种笨拙但有效的方法来学习面向对象。1. 什么属性什么是属性?极难定义,因此,不下定义,直接上代码,我告诉你,代码里哪些是属性class Book(): def __init__(self, _name, _author, _price): self.name = _name # 书名 self.a
2021-03-15 12:34:54 211
原创 轻松学会python面向对象第1篇---是什么很重要
1. 现实与虚幻请关注下列名词苹果鸡蛋大象苹果与鸡蛋都是常见之物,只需看到这两个词,你脑海里便浮现出它们的画面,大象虽不常见,但你仍然可以想到它的样子,这便是耳听为虚,眼见为实。接下来,请关注下列名词面向对象类属性方法继承多态够了,够了,很多人已经快要吐了,这都是些什么东西啊,完全不懂。编程领域的许多名词,侧重于概念,当你听到或看到这些名词的时候,不同于苹果鸡蛋,你无法找到一个具体的事物与之相对应,这或许就是你学习面向对象过程中感到痛苦的根源。2. 请多关注它是什么如果
2021-03-15 11:51:43 133
巩固基础提升算法能力的130道python练习题
2019-11-11
flask-login 使用示例
2018-10-30
Kmeans算法为各国体育水平分类
2016-08-15
simhash算法
2016-06-04
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人