python
文章平均质量分 80
Ayhan_huang
Die Nacht ist dunkel und voller Schrecken.
展开
-
PYMODM使用记录
PYMODM使用TIPSListField存储其他文档的引用列表时,可以这样定义:class MongoPaper(MongoModel): """mongo试卷""" paper_id = fields.IntegerField(verbose_name='sql试卷pk', primary_key=True) outlines = fields.ListFiel...原创 2019-05-09 16:50:32 · 842 阅读 · 0 评论 -
协程
概念协程的yield实现greenlet模块gevent概念协程:是单线程下的并发,又称微线程,纤程。英文名Coroutine。一句话说明什么是线程:协程是一种用户态的轻量级线程,即协程是由用户程序自己控制调度的。 需要强调的是: 1. python的线程属于内核级别的,即由操作系统控制调度(如单线程一旦遇到io就被迫交出cpu执行权限,切换其他线程运行) 2. 单线程内开启协程,一原创 2017-07-20 19:06:25 · 1832 阅读 · 0 评论 -
进程和线程
概念进程:程序运行的状态就是进程。进程包括三个部分:程序(一堆代码)、数据集(程序在执行过程中的所有数据的集合)、进程控制块PCB(寄存器保存状态,OS利用它来管理进程)线程:在现代操作系统中,进程相当于一个容器,线程是其中的执行单位。二者的关系: 3.1 一个线程只能属于一个进程,一个进程至少有一个线程。 3.2 进程都是最小的资源管理单元,线程是最小的执行单元:即操作系统分配资源给进程原创 2017-07-17 16:49:26 · 332 阅读 · 0 评论 -
BeautifulSoup 用法总结
介绍简介BeautifulSoup 是一个可以从HTML或XML文件中提取数据的Python库安装pip install beautifulsoup4解析器Beautiful Soup支持Python标准库中的HTML解析器(’html.parser’),还支持一些第三方的解析器,比如lxml,推荐用后者,纯C实现的,速度更快:pip install lxml引入及容错处理from bs4 impo原创 2017-11-09 13:36:27 · 1080 阅读 · 0 评论 -
matplotlib 简单试用
介绍是什么Matplotlib是一个强大的Python绘图和数据可视化的工具包。安装pip install matplotlib引用import matplotlib.pyplot as plt绘制一个简单的图形import matplotlib.pyplot as pltimport numpy as np# plot(x, y, z)绘图函数, show显示图像plt.plot([1,2,3原创 2017-10-31 13:06:29 · 343 阅读 · 0 评论 -
继承、派生、组合
继承类之间会有一些相同的属性,提取这些相同的属性做成基类(父类) 继承是创建类的一种方式,通过代码重用,减少代码冗余。把父类的属性遗传给子类。 在创建类时,新建的类可以继承一个或多个父类,方式如下:class ClassName(BaseName1, BaseName2,...): # 括号内是继承的父类 '类注释文档' pass继承是一种类与类之间的关系: 什么 是 什么 。原创 2017-07-03 16:26:23 · 363 阅读 · 0 评论 -
NumPy基本使用
简介一句话介绍NumPy是高性能科学计算和数据分析的基础包。它是pandas等其他各种工具的基础。主要功能ndarray,一个多维数组结构,高效且节省空间无需循环对整组数据进行快速运算的数学函数注意:数组不同与python中列表,数组中的元素类型是一致的,并且数组长度也是确定的。安装pip install numpy引用方式import numpy as np创建ndarray对象创建a =原创 2017-10-30 12:53:16 · 1115 阅读 · 0 评论 -
再谈迭代器,生成器,yield,及和类的使用
再谈迭代器,生成器,yield,及和类的使用最近写项目时,遇到类嵌套和yield的混合使用,正好借此加深对迭代器和生成器的理解。代码代码抽象如下:from types import FunctionTypeclass RowItems(object): def __init__(self,option,x1,x2,x3): self.option = option原创 2017-10-26 21:53:22 · 737 阅读 · 0 评论 -
kindeditor图片上传
KindEditor是一款用Javascript编写的开源在线HTML编辑器,主要用户是让用户在网站上获得可见即可得的编辑效果,开发人员可以用 KindEditor 把传统的多行文本输入框(textarea)替换为可视化的富文本输入框使用到官网下载 KindEditor 最新版本,解压后将所有文件拷贝到项目的static文件夹下。注意,可以根据需要删除以下目录:asp - ASP程序asp.n原创 2017-10-11 06:45:58 · 4170 阅读 · 1 评论 -
迭代器和生成器
迭代器迭代的含义重复下一次重复是基于上一次的结果可迭代对象和迭代器python中,对于有序对象,比如列表、元组、字符串,可以通过索引的方式来遍历元素。像字典和集合这样的无序的对象,没办法索引。 为了提供一种不依赖于索引的迭代方式,python为一些对象内置了 obj.iter 方法:有这种方法的obj称为可迭代对象。一个可迭代对象执行obj.iter()得到的结果就是迭代器;iter(o原创 2017-06-17 13:25:33 · 432 阅读 · 0 评论 -
进程池和线程池
我们知道多进程可以利用多核CPU进行并行计算,但多进程的资源开销很大,因此不可能无限开。举个栗子,假设有100块砖,是请5个人去搬,还是请100个人去搬?答案是5个人,100个人工钱太贵了。。。这就和开多进程是一样的道理。那如何限制进程数量呢?通过进程池。 Pool可以提供指定数量的进程,供用户调用,当有新的请求提交到pool中时,如果池还没有满,那么就会创建一个新的进程用来执行该请求;但如果池原创 2017-07-20 17:04:21 · 960 阅读 · 0 评论 -
selenium模块
阅读目录一 介绍二 安装三 基本使用四 三种选择器五 等待元素被加载六 元素交互操作七 其他八 项目练习一 介绍selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题selenium本质是通过驱动浏览器,完全模拟浏览器的操作,比如跳转、输入、点击、下拉等,来拿到网页渲染之后的结果,可支持多种浏览器from selenium i转载 2017-11-08 09:50:41 · 474 阅读 · 0 评论 -
pandas 基本使用
介绍是什么pandas是一个强大的Python数据分析的工具包,它是基于NumPy构建的。关于NumPy,参考这里。主要功能具备对其功能的数据结构DataFrame、Series集成时间序列功能提供丰富的数学运算和操作灵活处理缺失数据安装pip install pandas引用pip install pandasSeriesSeries是一种类似于一维数组的对象,由一组数据和一组与之相关的原创 2017-10-30 20:29:07 · 10043 阅读 · 1 评论 -
mongo数据库CRUD
#准备从官网下载合适的安装包。这里以win10为例,一路next即可完成安装。安装完成后,进入这个目录:C:\Program Files\MongoDB\Server\4.0\bin\在当前目录打开PowerShell窗口,先启动服务端: .\mongod.exe服务端默认在本地的27017端口运行。启动客户端: .\mongo.exe将默认连接本地27017端口的服务端,并...原创 2019-04-02 12:19:55 · 492 阅读 · 0 评论 -
Python排序算法总结
Python排序算法总结递归在正式讲算法之前,先介绍一下递归。递归是一种解决问题的思路。特点调用自身必须有一个明确的结束条件,比如if...递归的两个阶段: 递推(压栈):到某个阶段,该阶段返回一个值(没有返回值,默认返回None)回溯(出栈):从那个阶段回溯每进入更深一次递归时,问题规模减少递归效率不高(保存系统堆栈,跳进去,还要再跳出来)应用场景知道结束的条件,但不确定循环次数。原创 2017-11-17 19:22:59 · 1088 阅读 · 1 评论 -
API验证
API验证在web应用中,服务端提供的API接口必须有某种安全机制,来识别Http请求是否合法,以防别有用心之人截获http请求,对服务端进行攻击的行为。这里,参考Tornado签名cookie源码,来实现一个API验证的功能。基本思路:服务端给有权限访问的客户端发放key,客户端每次访问时携带key给服务端进行验证。为了防止请求被截获后key泄露,将key与当前时间进行加密后生成动态密钥。请原创 2017-10-11 13:49:19 · 1014 阅读 · 0 评论 -
Python数据结构之列表、栈、队列、链表、字典
什么是数据结构简单来说,数据结构就是设计数据以何种方式组织并存储在计算机中。比如:列表、集合与字典等都是一种数据结构。列表python的列表在其他编程语言中称为“数组”,不过二者是有区别的。在C语言中,必须指定数组的长度,并且数组中的元素具有相同的数据类型。而python中则没有这些限制,这是因为二者在内存中存储方式不一样。数组我们知道,计算机将内存分割为字节,每个字节可以存储8位的二进制信息:每个原创 2017-11-14 06:39:56 · 11774 阅读 · 1 评论 -
WebSocket剖析
WebSocket剖析http协议在了解WebSocket之前,有必要简单复习一下http协议。请求和响应Http协议用于客户端与服务端的通信,客户端发出请求(request),服务端返回响应(response)。下面我们以访问https://www.sogou.com/搜狗首页为例,来看看请求报文和响应报文: 下面是从客户端访问服务器的请求报文的截取内容:GET / HTTP/1.1Host:原创 2017-12-07 20:24:50 · 930 阅读 · 0 评论 -
Cookie & Session
Http协议和Cookie请求和响应Http协议用于客户端与服务端的通信,客户端发出请求,服务端返回响应。下面我们以访问https://www.sogou.com/搜狗首页为例,来看看请求报文和响应报文: 下面是从客户端访问服务器的请求报文的截取内容:GET / HTTP/1.1Host: www.sogou.comConnection: keep-aliveCache-原创 2017-09-19 17:03:54 · 661 阅读 · 0 评论 -
python设计模式总结
介绍 每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样你就能一次又一次地使用该方案而不必做重复劳动。—— Christopher Alexander软件危机催生了设计模式,面向对象,软件工程。是什么每一个设计模式系统地命名、解释和评价了面向对象系统中一个重要的和重复出现的设计。热身既然是针对面向对象的,让我们先来回顾一下面向的三大特性和接口面向对象的三大特性:原创 2017-11-16 17:28:16 · 1588 阅读 · 0 评论 -
为tornado自定义session
cookie和session在自定义session前,我们需要先了解cookie和session是什么,可以参考我之前的博客:http://blog.csdn.net/ayhan_huang/article/details/78032097简单来说:cookie是保存在浏览器的键值对session是保存在服务端的键值对session依赖于cookie在Django框架中,我们可以直接操作co原创 2017-12-06 16:07:32 · 2875 阅读 · 3 评论 -
scrapy框架架构
介绍 Scrapy一个开源和协作的框架,其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的,使用它可以以快速、简单、可扩展的方式从网站中提取所需的数据。但目前Scrapy的用途十分广泛,可用于如数据挖掘、监测和自动化测试等领域,也可以应用在获取API所返回的数据(例如 Amazon Associates Web Services ) 或者通用的网络爬虫。 Scrapy 是基于t原创 2017-11-10 20:46:48 · 1651 阅读 · 0 评论 -
python数据类型和循环控制
一、变量变量名 = 变量值 # = 绑定;变量名(标识符)映射变量值,当定义一个变量时,解释器开辟一块儿内存空间,存入变量的值。也可以说,变量名指向值在内存中的地址。二、内存回收没有绑定关系的变量值被回收,即值的引用计数器为0时,python解释器会自动回收该值。当变量名绑定新的值时,原来的值无绑定,被回收。一个值可以绑定多个变量名del 变量名 # 解除绑定i原创 2017-06-06 22:10:38 · 758 阅读 · 1 评论 -
模块和包
Module模块为什么使用模块模块是一种组织代码的形式,它用文件的形式,将函数、变量组织起来。大大提高了代码的可维护性编写代码不必从零开始模块的两个方向用于执行用于被调用(没有执行效果)调用模块的方式import module1 import module2import module1, module2以上更推荐第一种,代码可读性更强。 另外在调用时,也可以给模块重新命名:原创 2017-06-28 16:09:45 · 292 阅读 · 0 评论 -
RE模块
re的功能:字符串的模糊匹配查询。元字符是实现这种功能的工具。元字符元字符包括符号和转义的特殊字符。符号 特殊字符转义的问题python解释器先解释规则pattern, 然后传给RE处理,如果python解释器对pattern进行了转义,那么传给RE的规则pattern就变味了。为了避免出现这种情况,都应该在pattern前加字母 r , 禁止解释器作转义处理,就像这样:r'pattern'函数原创 2017-06-26 14:26:21 · 309 阅读 · 0 评论 -
python中的文件I/O
读/写文件:常规操作读文件:f = open('文件路径',‘r‘ - 读文本文件 ‘rb' - 读二进制文件 encoding = 'utf-8' - 指定读取时的字符编码)写文件:f = open('文件路径','w‘ - 写入 'a‘ - 追加写入 ’wb' - 写入二进制 ‘ab’ - 追加写入二进制)文件操作关闭文件:f.close()说明原创 2017-06-13 20:06:58 · 1069 阅读 · 0 评论 -
递归函数
递归调用在调用一个函数的过程中,直接或间接调用了该函数本身。 1. 直接调用的栗子:def foo(): print('hello, python') foo()foo() # 执行foo函数,直接调用本身,并且无无限递归下去,直接报错间接调用的栗子:def fxx(): print('from xx') foo()def foo(): print('原创 2017-06-20 19:11:33 · 410 阅读 · 0 评论 -
Socket网络编程
C/S架构和SoketC/S架构即客户端/服务器架构,包括软件(web应用)和硬件(比如打印机)两种架构方式。客户端和服务端的通信基于网络协议,而Socket套接字将复杂的网络协议(TCP/IP、UDP/IP协议族)封装起来,提供一组简单的接口供使用者调用。因此基于Socket,我们能方便地开发符合网络协议标准的客户端和服务端软件。套接字家族AF_UNIX > 地址家族:U原创 2017-07-12 19:59:24 · 801 阅读 · 0 评论 -
Python模块
模块的本质模块的本质就是一个.py 文件。 导入和调用模块:import module_name >>> module_name.method(args) python中有三种模块: 1. 内置模块(内置于解释器中,不用导入,直接调用) 2. 第三方模块(在lib目录下,导入后可以调用) 3. 自定义模块(默认从当前工作目录下导入,导入后可以调用) python解释器对于模块的查找也是原创 2017-06-21 14:38:06 · 1192 阅读 · 0 评论 -
内置函数与lambda匿名函数
内置函数all(iteralble) 如果可迭代对象内的所有元素的bool值为真,那么返回真,如果这个可迭代对象是空,也返回真。all([1,2,3,4]) # return Trueall([]) # return Trueall([None, 1, 'a']) # return Falseany(iterable) 和 all(iteralble) 类似,只是只要有一原创 2017-06-20 16:12:21 · 841 阅读 · 0 评论 -
yield表达式形式的应用
基本格式x = yield 把yield的接收值,赋值给xdef foo(): while True: x = yield # 函数执行到yield处,暂停,yield后面没有任何返回值,默认返回yield None print("x's value is ", x) # next执行,打印出x的值,yield 没有接收任何传值,默认接收None,并赋值给原创 2017-06-19 16:10:23 · 589 阅读 · 0 评论 -
Python 装饰器
软件开发的一条原则是开放封闭原则:对扩展是开放的,对修改是封闭的。装饰器的功能:在不修改被装饰对象源代码以及调用方式的前提下,为其添加新的功能原则:1、不能修改源代码 2、不修改调用方法目标:添加新功能最简单的装饰器,举个栗子:定义一个简单的函数 def = web(),其执行效果是停顿,然后的输出一条信息 ,现在我们为其增加一个功能,让web函数在执行完毕后原创 2017-06-14 23:05:15 · 268 阅读 · 0 评论 -
闭包函数
定义:函数内部定义的函数,该函数包含对外部作用域,而不是对全局作用域的应用。name = 'seb'def func(): name = 'ayhan' def my_name(): # 函数my_name定义在函数func内部,包含了对外部作用域(上一层) name = 'ayhan'的引用 print('我的名字',name) # 相当于函数外包原创 2017-06-14 22:16:03 · 242 阅读 · 0 评论 -
多态
多态就是同一类事物的多种形态。python对传入参数的数据类型没有限制,因此,只要是同一类的(比如序列),都可以用一些方法。比如序列:字符串、列表、元组 都有一些方法:obj.__len__、 切片。那么对于字符串 s, 列表 l,元组 t,都可以通过len(s)、len(l)、len(t) 来获取长度。上面是内置函数的,下面的栗子我们来自定义一类事物及其多种形态:import abcclass原创 2017-07-06 13:00:10 · 211 阅读 · 0 评论 -
绑定方法与非绑定方法
绑定方法绑定到对象的方法定义:凡是在类中定义的函数(没有被任何装饰器修饰),都是绑定给对象的,就是给对象用的。 特点:obj.method() 自动把obj作第一个参数传入,因为method的逻辑就是要处理这个obj tips: 对象的绑定方法,类也可以调用,但是必须把对象传入作为第一个参数。绑定到类的方法定义:凡是在类中定义的,被@classmethod装饰的函数,就是绑定到类的方法。 特点原创 2017-07-06 13:21:29 · 554 阅读 · 0 评论 -
字符编码
字符编码就是将人能识别的字符编码翻译成计算机能识别的二进制。几种字符编码的对比:编码编码方式表示字符数特点ANSⅡ1 Byte (8bit) 表示一个字符255适用于英文,表示的字符数太少,非字母文字表示不了。Unicode2 Bytes (16bit) 表示一个字符655535兼容万国语言;所有字符统原创 2017-06-13 14:25:26 · 535 阅读 · 0 评论 -
互斥锁、死锁、递归锁、信号量、Event
互斥锁互斥锁也叫用户锁、同步锁。 在多进程/多线程程序中,当多个线程处理一个公共数据时,会有数据安全问题,唯一能保证数据安全的,就是通过加锁的方式,同一时间只能有一个修改数据的操作,将处理数据变为串行。虽然牺牲了速度,但是保证了数据安全。来看一个不加锁的栗子:import timedef sub(): global num temp = num time.sleep(0.0原创 2017-07-18 18:22:21 · 1659 阅读 · 0 评论 -
queue队列
概念队列也是一种数据结构,和列表有点像,但是内置了锁。队列用于多线程编程时线程间的通讯,能保证线程安全。创建import queue q = queue.Queue(maxsize) 括号内可以指定队列长度,默认是无限长度。 这样就创建了一个FIFO先进先出队列,它是单向的,左边放,右边取。方法 q.put(item, block=True, timeout=None) 往队列内放入元素it原创 2017-07-19 14:52:48 · 430 阅读 · 0 评论 -
进程间的通信
由于Cpython中GIL的存在,想要做到真正的并行,充分利用多核CPU,那只能开多进程,进程数通常等于CPU的核心数,过多的进程也无法做到并行。进程的资源开销很大,当多进程数量很多时,OS忙着切换进程,就会出现硬盘狂闪,系统假死的情况。每个进程都是一个独立的内存空间,因此进程间的通信,并不像线程间的通信那么容易。下面介绍三种进程间通信的方式:对列,管道,共享数据。对列我们知道在多线程中,创建一个线原创 2017-07-20 16:24:10 · 271 阅读 · 0 评论 -
I/O多路复用
I/O多路复用(I/O multiplexing),单个进程,就可以实现并发处理多个网络连接。目前有三种实现方式:select(全平台)、poll(linux)、epoll(linux)。前两者的基本原理是,轮询其监听的所有socket,一旦有数据到达,就将目标soket取出,就通知用户处理。epoll的实现略有不同,它为每个socket绑定一个回调函数,一旦socket有数据到达,就会触发回调函数原创 2017-07-21 16:59:18 · 293 阅读 · 0 评论