python
昆昆欧粑粑
这个作者很懒,什么都没留下…
展开
-
Python正确的初始化一个二维数组,避开浅拷贝问题
因为python中没有数组,所以一般用列表来实现二维数组。都知道Python中有深拷贝和浅拷贝的问题,所以在初始化二位数组的时候可能不小心就会遇到这样的问题,比如:arr = [[0] * 3] * 4或者a = [[]]*4这样的问题在于其实*4只是复制了n个[0,0,0]或者[]的引用,改任何一个数组都会让另外3个发生改变。那么正确的初始化方法:(避免发生浅拷...原创 2019-07-21 15:04:40 · 1190 阅读 · 0 评论 -
python中计算a的b次方
python计算功能很强大计算a的b次方:a ** b原创 2018-12-06 18:23:29 · 11755 阅读 · 0 评论 -
python里用ORM——SQLAlchemy操作mysql数据库
ORM介绍orm全称object relational mapping,就是对象映射关系程序。简单来说,对于面向对象的语言来说一切皆对象,但是我们使用的数据库却都是关系型的。为了保证一致的使用习惯,通过orm将编程语言的对象模型和数据库的关系模型建立映射关系,这样我们在使用编程语言对数据库进行操作的时候可以直接使用类似面向对象的操作进行,而不用直接使用sql语言。也就是对sql...原创 2018-10-20 17:48:54 · 754 阅读 · 0 评论 -
python操作mysql数据库,pymysql
python里操作mysql的模块是pymysql一、安装mysql参考https://blog.csdn.net/likunkun__/article/details/83180772二、安装pysqlpip3 install pymysql如果是在pycharm里安装pymysql模块,如图进去安装界面,搜索pymysql然后安装就行。三、使用pymysql...原创 2018-10-20 17:00:35 · 325 阅读 · 0 评论 -
python之select与epoll
select的用法写网络socket的服务端详解在注释里import selectimport socketimport queueserver = socket.socket()server.bind(('localhost',9000))server.listen(1000)server.setblocking(False) #设置非阻塞模式#accept不会堵...原创 2018-10-17 16:29:56 · 688 阅读 · 0 评论 -
redis的应用场景以及命令参考
Redis应用场景:新浪微博在线用户很多,做数据分析,想看在线用户有多少,怎么算?每一个用户只要一登录,就把计数器加一。当前用户在线怎么看?一张mysql表,select当前在线状态用数据库存几亿个数据,就太大、太慢了(mysql超过500万就慢了)最高效的方式:用Redis里的setbit方法,直接通过二进制位,比特位统计,比如第555位登录了,就吧第555比特位置为1,...原创 2018-10-18 18:09:13 · 137 阅读 · 0 评论 -
python之Redis pipline管道
在python中的redis默认在执行每次请求都会创建(连接池申请连接)和断开(归还连接池)一次连接操作,如果想要在一次请求中指定多个命令,则可以使用pipline实现一次请求指定多个命令,并且默认情况下一次pipline 是原子性操作。import redis, timepool = redis.ConnectionPool(host='localhost', port=6379)...原创 2018-10-18 13:29:42 · 716 阅读 · 0 评论 -
python之协程
协程了解协程之前,需要先了解多线程和多进程以及函数的工作模式:进程与线程对操作系统来说,线程是最小的执行单元,进程是最小的资源管理单元。函数(子程序),在所有语言中都是层级调用,比如A调用B,B在执行过程中又调用了C,C执行完毕返回,B执行完毕返回,最后是A执行完毕。def A(): print('a') B() print('aa') return ...原创 2018-09-29 15:08:19 · 203 阅读 · 0 评论 -
python之rpc实现远程运算斐波那契函数然后返回本地
RPC模式发一条消息到远程机器去执行,然后吧执行结果返回,这种模式叫rpc(remote procedure call) 运用rpc之前要先了解RabbitMQ:python之RabbitMQ消息队列然后我们用rpc模拟一个服务端和客户端,实现客户端传送数字,服务端运算斐波那契函数,然后返回值给客户端具体看代码,里面有注释。服务端import pikaimport ...原创 2018-10-17 23:54:59 · 225 阅读 · 0 评论 -
python之RabbitMQ消息队列
RabbitMQ:消息队列PY里的队列有:线程QUEUE、进程QUEUE进程queue可以用于父进程与子进程进行交互,或者同属于一父进程下多个子进程进行交互,但如果是两个独立的程序,是不能用这个QUEUE进行通讯的。两个独立的程序之间,要找一个中间代理,比如可以用socket通讯,或者用json通讯(放在硬盘上,然后在读取,速度慢),还有就是RabbitMQ消息队列。这个中间代理的...原创 2018-10-17 21:08:02 · 2710 阅读 · 0 评论 -
python之进程池
进程池:pool就是一堆事先创建好的进程。进程池内部维护一个进程序列,当有程序要使用进程(运行)时,则去进程池中获取一个进程,如果进程池序列中没有可供使用的进进程,那么程序就会等待,直到进程池中有可用进程为止。进程池里有两个方法:apply串行和apply_async并行from multiprocessing import Process, Poolimport time...原创 2018-09-26 17:52:33 · 231 阅读 · 0 评论 -
python之进程锁
进程锁:multiprocessing下的Lock方法这个的主要作用是让进程不乱掉,下面代码就是可以避免 i 乱打印from multiprocessing import Process, Lockdef f(l, i): l.acquire() #锁住进程 try: print('hello world', i) finally: ...原创 2018-09-26 17:33:47 · 1389 阅读 · 0 评论 -
python之进程间的通信(queue,pipe,Manager)
不同进程间内存是不共享的,要想实现两个进程间的数据交换,可以用多进程里的Queue来解决:Queues使用方法跟threading里的queue差不多,注意在执行的时候,queue是一个备份,而不是原来的queue,不过实现了数据共享。from multiprocessing import Process, Queue#注意这里要import Queue,之后的使用相当于备份一个q...原创 2018-09-26 17:09:15 · 4284 阅读 · 0 评论 -
python之多进程模块multiprocessing
进程:python里进程是multiprocessing模块用法和多线程没有什么区别(os.getpid()是获得进程号,ppid是父进程号)import time ,osimport multiprocessingdef f(name): time.sleep(2) print('hello', name) print(os.getpid()) ...原创 2018-09-26 14:41:01 · 376 阅读 · 0 评论 -
Django报RuntimeError at /...错误
Django报如下错误:RuntimeError at /loginYou called this URL via POST, but the URL doesn't end in a slash and you have APPEND_SLASH set. Django can't redirect to the slash URL while maintaining POST dat...原创 2019-02-15 19:21:59 · 8117 阅读 · 0 评论 -
Django框架中定位URL的render、redirect和HttpResponse方法区别
Django中在views里有3种返回url的形式:HttpResponse:可以直接返回一个html页render:用于页面渲染,需要传入request参数,除了html文件名,还可以传数据到页面上,源码里的介绍如下:实际还是调用HttpResponsedef render(request, template_name, context=None, content_t...原创 2019-02-23 16:30:49 · 2137 阅读 · 0 评论 -
Django的html继承(extends)和引入(include)用法
Django提供html网页的继承和引入机制,减少重复代码母板继承先写一个母板:master.html关键语法:{% block content1 %} {% endblock %}<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <t原创 2019-03-02 20:14:47 · 2399 阅读 · 0 评论 -
解决Django文件上传views报错NoneType,其他能收到
Django通过form表单给后台提交一个文件的时候,报错'NoneType' object has no attribute 'name'前端:<form accept-charset="UTF-8" action="跳转链接" method="post"> <div> <input type="file" name="t...原创 2019-07-03 20:19:03 · 1764 阅读 · 0 评论 -
用Python实现9种常用设计模式
设计模式设计模式是一套被反复使用的代码结构,是代码设计经验的总结。他提高了代码的可重用性,让代码更容易被他人理解,保证代码可靠性。这里总结9种常见的设计模式作为参考,并用Python实现。设计模式分类点击链接跳转:创建型设计模式单例模式工厂模式结构型设计模式门面模式代理模式行为型设计模式命令模式模板方法模式观察者模式状态模式复合型设计模式MV...原创 2019-06-27 18:45:48 · 2112 阅读 · 0 评论 -
MVC模式介绍
MVC模式概念模型-视图-控制器模式模型:声明存储和操作数据的类视图:声明构建用户界面和显示数据的类控制器:连接模型和视图的类客户端:根据某些操作来获得某些结果各层的定义模型层定义针对数据的所有操作,并且提供与数据使用方式有关的方法。比如数据库连接等。视图层代表用户界面,比如GUI,web的前端等,他没有逻辑处理,只用来显示数据。控制层用来请求接收视图层的数据,然后...原创 2019-06-27 18:41:11 · 2519 阅读 · 0 评论 -
Python设计模式之状态模式
状态模式目录状态模式概念实现计算机状态例子状态设计模式优缺点优点缺点状态模式概念一个对象可以基于其内部状态封装多个行为也可以看做在运行时改变对象行为的一种方式(Python正好擅长这一点)实现例子:收音机具有AM/FM两种调频方式和一个扫描按钮,扫描可以扫描到多个FM/AM频道。当用户打开,设置为FM。点击扫描,可以扫到多个有效FM频道。如果改变为AM,扫描只会扫到AM频道。也就是...原创 2019-06-27 18:35:01 · 616 阅读 · 0 评论 -
Python设计模式之模板方法设计模式
模板方法目录模板方法——封装算法概念实现模板方法UML图实例模板方法的有点和缺点优点缺点一些问题模板方法——封装算法概念模板方法通过一种称为模板方法的方式来定义程序框架或者算法使用基本操作定义算法框架重新定义子类某些操作实现代码重用利用通用接口实现比如:我们封装了制作饮料的算法,那么现在可以用制作饮料的模板方法来实现沏茶。但需要改变步骤。实现一个编译器:收集源代码,把源代码...原创 2019-06-27 18:31:21 · 417 阅读 · 0 评论 -
Python设计模式之命令模式
命令模式目录命令模式——封装调用实现证券交易所的例子命令模式的优缺点优点缺点命令模式——封装调用命令模式是一种行为设计模式,他用于封装触发事件(完成任何一个操作)所包含的所有信息。一般有方法名称,拥有方法对象,方法参数等。一个安装向导的例子:每一步选择的都会存在Command对象里,在最后一步点击finish的时候,Command会运行execute进行安装。class Wizar...原创 2019-06-27 18:26:59 · 1262 阅读 · 0 评论 -
Python设计模式之观察者模式
观察者模式目录观察者模式行为型设计模式实现观察者模式的通知方式观察者模式优缺点一些问题观察者模式是一种行为型设计模式行为型设计模式创建型模式基于对象的创建机制,隔离对象的创建细节,使得代码能够与对象类***相互独立***。结构型设计模式用于***设计对象和类的结构***,从而优化他们的结构,和他们之间的关系。行为型设计模式在于***关注对象的职责***,用来处理对象之间的交互。...原创 2019-06-27 18:25:36 · 502 阅读 · 0 评论 -
Python设计模式之代理模式
代理模式目录代理模式概念实现:代理有什么用?代理和门面区别常见问题代理模式概念代理就是一个中间系统代理模式关键在于对外屏蔽真实对象通过代购可以类比一下演员与经纪人的例子来理解一下:class Actor(object): def __init__(self): self.is_busy = False def occupied(self): ...原创 2019-06-27 18:21:33 · 578 阅读 · 0 评论 -
Python设计模式之门面模式
门面模式目录门面模式UML图结构型设计模式概述实现门面模式是一个结构型设计模式给子系统中的接口提供统一接口,使用更加简单。实现:用单一接口解决复杂问题。不是对子系统的再封装,而是对子系统进行组合。UML图结构型设计模式概述用于描述如何将对象和类组合成更好的结构是一种能够简化设计工作的模式,因为他能够找出更简单的方法来表示实体(对象或者类)之间的关系。类模式通过继承描述对...原创 2019-06-27 18:08:27 · 568 阅读 · 0 评论 -
Python实现简单工厂、工厂方法、抽象工厂设计模式
工厂模式概念实现简单工厂工厂方法工厂方法优点抽象工厂工厂方法和抽象工厂的比较概念在面向对象中,工厂表示一个负责创建其他类型对象的类。工厂具有:松耦合客户端无需了解创建对象的类,但是照样可以使用它来创建对象。可以轻松的在工厂中添加其他类来创建其他类型的对象。工厂模式有3种变体:简单工厂:允许接口创建对象,但不会暴露对象的创建逻辑。工厂方法:允许接口创建对象,但使用哪个类来创建...原创 2019-06-27 16:01:37 · 1815 阅读 · 0 评论 -
Python实现单例模式的三种方法
单例模式定义实现饿汉式单例懒汉式单例使用元类实现单例单例模式优缺点定义他提供了一个机制:确保一个类只有一个实例对象。例如日志记录,数据库操作,打印机后台处理程序等。实现最简单的实现方法是使构造函数私有化,并创建一个静态方法来完成对象的初始化。然后对象将在第一次调用时创建,之后这个类将返回同一个对象。注意:类只创建一个对象为对象提供一个访问点,使程序可以全局访问该对象控制共享资源...原创 2019-06-27 15:55:28 · 1602 阅读 · 1 评论 -
python爬取糗事百科文字段子
思路:找到网页,获取url 分析网页的html结构 用requests和lxml库请求和在网页中找内容 保存数据直接爬的简单代码:(后面有封装成class的写法)import requestsimport jsonfrom lxml import etree# 请求头headers = { "User-Agent": "Mozilla/5.0 (Windows N...原创 2019-04-18 00:26:19 · 514 阅读 · 0 评论 -
解决:python爬取豆瓣电影遇到的KeyError: 'subject_collection_items'错误
今天在学习爬虫,爬取豆瓣电影的一些json资料存到本地的时候遇到了一些问题,先解释一下:在豆瓣手机版的“正在热映”页面里可以找到一些包,里面有当前页的内容(json格式):所以requests模块可以去爬这些下来:找到url,然后找到提交规律url里是用的start来表示当前页面显示的是哪些片。还可以找到数据都放在subject_collection_items下面:...原创 2019-04-15 23:07:27 · 3343 阅读 · 5 评论 -
python之Event事件标志
Event:Event就是一个在线程里的标志,随时可以切换event = threading.Event() 设置标志位:event.set()清除标志:event.clear()判断是否设置标志位:event.is_set()等待被设定:event.wait() 模拟红绿灯来使用一下event:标志位设定了,代表绿灯,直接通行。标志位被清空,代表红灯,...原创 2018-09-26 13:01:47 · 1424 阅读 · 0 评论 -
python之队列queue
队列queue解耦,直接实现松耦合,放一个拿一个提高处理效率queue.Queue(maxsize=0) #先入先出queue.LifoQueue(maxsize=0) #后进先出(栈)queue.PriorityQueue(maxsize=0) #存储数据时可设置优先级的队列import queueq = queue.Queue()for i in range(10...原创 2018-09-26 11:59:38 · 301 阅读 · 0 评论 -
python中time模块和datetime
time模块一、时间的三种表示形式:1.时间戳(time stamp):从1970年到此刻的秒数。2.格式化的字符串(format string):支持自定义格式,如下表所示 %a 星期几的简写,如Wed。 %A 星期几的全写,如Wednesday。 ...原创 2018-08-15 11:12:22 · 424 阅读 · 0 评论 -
python之time模块中:时间字符串格式
%a 星期几的简写,如Wed。 %A 星期几的全写,如Wednesday。 %b 月份简写,如Aug。 %B 月的全写,如August。 %c 适当的日期时间表示,如Wed Aug 15 10:36:4...原创 2018-08-15 11:01:17 · 592 阅读 · 0 评论 -
python中sys模块方法
sys模块内置方法:sys.argv #命令行参数List,第一个元素是程序本身路径sys.exit(0) #退出程序,正常退出时exit(0)sys.version #获取Python解释程序的版本信息sys.maxint #最大的Int值sys.path #返回模块的搜索路径,初始化时使用P...原创 2018-08-15 12:04:38 · 251 阅读 · 0 评论 -
python 字典的键排序和值排序
用sorted函数,在用 lambda指定排序方式a = { 2:22, 6:26, 22:34, -32:52, 523:11, 31:12}print(sorted(a.items(), key = lambda x:x[0]))#x表示a里的一对键值,x[1]表示用值排序,x[0]表示用键排序x表示a里的一对键值,x[1]表示用...原创 2018-08-12 15:16:56 · 695 阅读 · 0 评论 -
python之生成器
在了解生成器之前,必须要了解一下:列表生成式生成器:generator通过列表生成式,列表元素可以一个个推算出来,但当他算出来全部存放着的时候,还是很占用空间。那我们是否可以在循环过程中不断推算,要用到多少,算到多少,这样就可以节省大量空间。在Python中,这种一边循环一边计算的机制,叫做生成器。 生成器如何定义?定义方式一:把上面列表生成式的最外层中括号改成小括号:...原创 2018-08-12 12:04:40 · 126 阅读 · 0 评论 -
python之迭代器
迭代器:首先需要搞清楚两个概念:可迭代,迭代器,两者不能混为一谈。可以直接作用于for循环的对象统称为可迭代对象(Iterable)。Python里可以用isinstance( [] , Iterable)来检测第一个参数是不是可迭代的(这里第一个参数是一个列表[])。注意,可迭代 和 迭代器 是不一样的!!!可以被next()函数调用并不断返回下一个值的对象称为迭代器(Ite...原创 2018-08-12 11:09:58 · 730 阅读 · 0 评论 -
python之列表生成式
列表生成式用一个公式,利用循环,生成一个列表,就叫列表生成式,如下代码所示:#普通列表a = [1,2,3]#列表生成式a = [i * 2 for i in range(10)]'''上面列表生成式的一行代码等价于下面3行'''a = []for i in range(10): a.append(i*2) ...原创 2018-08-11 11:26:29 · 187 阅读 · 0 评论 -
python之函数装饰器详解
装饰器定义:本质是函数,(装饰其他函数),就是为其他函数添加附加功能。原则: 不能修改被装饰的函数的源代码 不能修改被装饰的函数的调用方式 不能影响原函数的返回值 公式:高阶函数 + 嵌套函数 + 运用函数即变量的思想 = 装饰器示例:#装饰器,为函数test加上计时功能def timer(func): def secend(*name):...原创 2018-08-10 22:25:55 · 341 阅读 · 0 评论