Python
本栏目主要介绍Python 基础知识讲解,
web端开发,爬虫
Lzs1998
略懂编程技术,多思进取,精益求精
展开
-
python底层设计:String对象设计
目录1.PyStringObject与PyString_Type2.PyStringObject的创建3.Intern机制4.字符缓冲池5.PyStringObject 效率问题1.PyStringObject与PyString_Type 在python中,PyStringObject是对字符串对象的实现,PyStringObject是一个拥有可变长度内存的对象...原创 2020-01-13 11:55:12 · 737 阅读 · 0 评论 -
python底层设计:整数对象设计
目录1.初识整数2.PyIntObject创建与维护2.1 对象的创建途径2.2小整数对象2.3大整数对象2.4 添加和删除1.初识整数 python中整数是通过PyIntObject对象实现的,它属于imutable(不可变对象),也就是说在创建一个PyIntObject对象后,就再也不能改变该对象的值了;另外这里的int并非真正的int,而是long...原创 2020-01-10 16:45:32 · 531 阅读 · 0 评论 -
python底层设计:对象设计思想
目录1.对象机制的基石PyObject2.可变对象类型基石:PyVarObject3.类的设计核心PyTypeObject3.1.对象的创建原理3.2 对象行为3.3 类型的类型4.对象的多态/动态语言的原理5.计数引用在python中,很多模块都是直接由c实现的,所有东西都是对象,即使是int,float等这样的基本数据类型,都是一个对象,比如>&...原创 2020-01-09 19:27:19 · 573 阅读 · 0 评论 -
python底层设计:列表对象设计
目录1.初识PyListObject2.PyListObject对象的创建和维护2.1创建对象2.2设置元素2.3 内存分配方式2.4.常见操作原理:3.PyListObject对象缓冲池1.初识PyListObject python里的列表不是书上基于链表的列表,而是基于可变长度的数组。PyListObject对象可以有效支持元素插入添加删除等操作...原创 2020-01-14 11:25:13 · 916 阅读 · 1 评论 -
自定义小型分布式任务队列,实时采集地区人口数据
由于项目需要设计分布式架构,在这里给大家稍微介绍下分布式,并且写了一个单核分布式任务模版给大家做参考ps:由于服务器很垃圾,只有一核,所以就只写了单核模版给大家。架构图如下:ps:该图引用自互联网接下来的例子主要分为两个部分,一是实时监测是否有新数据进来,二是多任务请求数据。整个模块大概有一亿左右的任务需要处理。以下是是单核处理模型import requestsimpo...原创 2019-07-08 16:10:52 · 506 阅读 · 0 评论 -
shell运行python工程模块脚本时需要注意的问题
这两天忙于产品上线,原先在pycharm可以直接运行的工程,部署到服务器后使用shell命令启动时出现了模块加载错误问题,查阅了很多文档,在这里给大家做个总结。举例:这里我有一个工程,结构如下。main程序入口代码如下:from shellpath.pack1.model1 import Afrom shellpath.pack1.model2 import Bfrom ...原创 2019-06-02 20:46:35 · 951 阅读 · 0 评论 -
内置函数
内置函数 zip sorted max eval zip-----拉链,生成键值对l1 = ["name","age","height"]l2 = ["lian",20,175]z = zip(l1,l2)print(list(zip))sorted ----排序#若想对序列中字典进行排序,则使根据key进行排序,而若想对根据其中...原创 2019-02-24 12:06:51 · 223 阅读 · 0 评论 -
函数----迭代器和生成器
迭代器 迭代器协议:对象需要提供__next__方法,他要么返回迭代器下一项,要么引起StopIteration异常 可迭代对象:对象内置有__iter__,实现迭代器协议的对象 迭代器对象:对象除了内置有 __iter__,还有__next__,可不断返回下一项或者异常的对象。由上述可知,迭代器对象是可迭代对象的子集。 迭代器内部机制举例:num = [1,2,3,4,...原创 2019-02-24 10:52:39 · 215 阅读 · 1 评论 -
高阶函数---map,reduce,filter函数
高阶函数 定义:一个函数可以作为参数传给另外一个函数,或者一个函数的返回值为另外一个函数(若返回值为该函数本身,则为递归)# 满足其一则为高阶函数。def bar(): print("bar")def foo(func): func() print("foo")foo(bar)#返回值为函数def bar(): print("in t...原创 2019-02-23 22:06:48 · 355 阅读 · 0 评论 -
函数----形参和实参,位置参数与关键字参数
1.形参和实参形参:函数完成其工作时所需的一项信息,不占用内存空间,只有在被调用时才会占用内存空间,调用完了即被释放。实参:实际参数,调用函数时传给函数的信息例如:def hello(name):#name是形参 print(name)hello("lian") #"lian"是实参2.位置参数和关键字参数位置参数: 在调用函数时,Python必须...原创 2019-02-23 21:02:24 · 5254 阅读 · 0 评论 -
记录下我的Python生活
现在是2019年2月12日10:33:14,在Python之路上越走越远。加油~~~原创 2019-02-15 10:34:12 · 328 阅读 · 2 评论 -
实现状态对象或者状态机
你想实现一个状态机或者是在不同状态下执行操作的对象,但是又不想在代码中出现太多的条件判断语句。在很多程序中,有些对象会根据状态的不同来执行不同的操作。比如考虑如下的一个连接对象:class Connection: """普通方案,好多个判断语句,效率低下~~""" def __init__(self): self.state = 'CLOSED' ...原创 2019-04-30 11:12:23 · 571 阅读 · 0 评论 -
类扩展功能的方法
你有很多有用的方法,想使用它们来扩展其他类的功能。但是这些类并没有任何继承的关系。 因此你不能简单的将这些方法放入一个基类,然后被其他类继承。假设你想扩展映射对象,给它们添加日志、唯一性设置、类型检查等等功能。下面是一些混入类:from collections import defaultdictclass Log: __slots__ = () def _...原创 2019-04-30 10:46:54 · 330 阅读 · 0 评论 -
类初始化的多种方式
1.直接__init__import timeclass Date: def __init__(self, year, month, day): self.year = year self.month = month self.day = dayDate(2019,4,30)2.使用类方法实例化class Date:...原创 2019-04-30 10:18:27 · 1014 阅读 · 0 评论 -
collections容器详解
collections--- 容器数据类型这个模块实现了特定目标的容器,以提供Python标准内建容器dict,list,set, 和tuple的替代选择。namedtuple() 创建命名元组子类的工厂函数 deque 类似列表(list)的容器,实现了在两端快速添加(append)和弹出(pop) ChainMap 类似字典(dict)的容器...原创 2019-04-30 00:12:51 · 351 阅读 · 0 评论 -
简化数据结构的初始化方法
你写了很多仅仅用作数据结构的类,不想写太多烦人的__init__()函数。可以在一个基类中写一个公用的__init__()函数,然后使你的类继承自这个基类。# 公共结构class Struct: _filed = [] def __init__(self, *args): if len(args) != len(self._file...原创 2019-04-28 19:52:15 · 589 阅读 · 0 评论 -
延迟计算
你想将一个只读属性定义成一个property,并且只在访问的时候才会计算结果。 但是一旦被访问后,你希望结果值被缓存起来,不用每次都去计算。import mathclass lazyproperty: def __init__(self, func): self.func = func def __get__(self, instance, cls):...原创 2019-04-28 19:33:12 · 889 阅读 · 0 评论 -
文件与IO
前面介绍过文件类的操作,今天给大家更加全面深入的介绍 文件不存在时的写入: 你想像一个文件中写入数据,但是前提必须是这个文件在文件系统上不存在。 也就是不允许覆盖已存在的文件内容。 ''' ========= =============================================================== Character Meani...原创 2019-04-27 16:35:21 · 180 阅读 · 0 评论 -
深入了解迭代器
实例:实现一个以深度优先方式遍历树形节点的生成器class Node: def __init__(self, value): self._value = value self._children = [] def __repr__(self): return 'Node({!r})'.format(self._value)...原创 2019-04-27 14:38:35 · 183 阅读 · 0 评论 -
函数---全局变量和局部变量及作用域
全局变量 在函数外,一开始被赋予变量值,可以被所有函数使用的变量,作用域为全局,称为全局变量 局部变量 在函数内部,只能在函数内使用,称为局部变量举例name = "lian"#全局变量def call(): name = "zong"# 局部变量 print(name) #输出『zong』print(name)#输出『lian』若想在函数...原创 2019-02-23 20:27:50 · 1582 阅读 · 0 评论 -
使用IO多路复用实现FTP上传下载
服务端import time,os,selectorsfrom socket import *BASE_DIR = os.path.dirname(os.path.abspath(__file__))class Server: def __init__(self): self.ip_port = ("127.0.0.1",8001) ...原创 2019-02-23 19:22:50 · 443 阅读 · 0 评论 -
进程(六)----IO模型简介
了解IO 前需要了解这几个概念用户空间和内核空间 进程切换 进程阻塞 文件描述 缓存I/O这里就不做解释了,大家自行百度Stevens在文章中一共比较了五种IO Model: * blocking IO * nonblocking IO * IO multiplexing * signal driven IO * asynchrono...原创 2019-02-23 19:19:33 · 215 阅读 · 1 评论 -
进程(五)----事件驱动模式
事件驱动模型事件源 事件对象 监听器 Manager类上节问题:协程:遇到IO操作就切换但是什么时候切回去呢?确定IO 操作就完了吗?今天重点讲解事件驱动模型传统的编程是如下线性模型的:开始---代码块A---代码块B---代码块C---....---结束对于事件驱动型程序模型,它的流程大致如下:请求 - 响应, 事件发生 - 事件 处理说白了就是...原创 2019-02-22 09:49:24 · 953 阅读 · 0 评论 -
进程( 四)----协程加进程
什么是协程 协程,又名微线程。协程:协作式 -----非抢占式的程序协程主要解决的也是IO操作的协程:本质上就是一个线程协程的优势:没有切换的消耗 没有锁的概念优点1:协程极高的执行效率。因为子程序切换不是线程切换,而是由程序自身控制,因此。没有线程切换的开销,和多线程相比,线程数量越多,协程的性能就越明显。 优点2:不需要多线程的锁机制,因为只有一个线程,...原创 2019-02-21 18:42:38 · 391 阅读 · 1 评论 -
进程( 三)----进程同步,进程池
进程同步 进程与进程之间相互独立是不是就不需要同步了呢?答案是否定的,计算机系统有很多东西比如不允许多个并发进程同时访问临界资源,临时区等临界资源和临界区(临界部分)临界资源:一次只能供一个进程访问的资源。 临界区:把不允许多个并发进程交叉执行的一段程序称为临界区(critical region)或临界部分(critical section)。临界区是由属于不同并发进程的程序段...原创 2019-02-21 15:59:43 · 271 阅读 · 0 评论 -
进程(二)----多进程通讯--队列,管道,共享内存Manager
进程通讯 进程之间的操作是相互独立的,进程之间的数据共享是一个重要的问题,这里给大家介绍几种进程通讯的方法。进程队列 管道 Manager共享内存操作系统会复制一个与父进程完全相同的子进程,虽说是父子关系,但是在操作系统看来,他们更像兄弟关系,这2个进程共享代码空间,但是数据空间是互相独立的,子进程数据空间中的内容是父进程的完整拷贝,指令指针在不同操作平台上出现的情况不一,...原创 2019-02-21 13:56:20 · 374 阅读 · 0 评论 -
进程(一)----多进程的调用
由于GIL的存在,python中的多线程其实并不是真正意义的多线程,如果想要充分地使用多核cpu的资源,在Python中大部分情况需要使用多进程。multiprocessing包是python中的多进程管理包。与threading.Thread类似,他利用multiprocessing.Process对象来创建一个进程。该进程可以运行在python程序内部编写的函数。该process对象与Th...原创 2019-02-21 10:40:44 · 539 阅读 · 0 评论 -
线程(六)-----生产者消费者模式
为什么要使用生产者消费者模式在线程世界里,生产者就是生产数据的线程,消费者就是消费数据的线程。在多线程开发张当中,如果生产者处理速度很快,而消费者处理速度很慢,那么生产者就必须等待消费者处理完,才能继续生产数据。同样道理,如果消费者的处理能力大于生者。为了解决这一问题于是引入了生产者消费者模式。什么是生产者消费者模式生产者消费模式是通过一个容器来解决生产者和消费者的强耦合问题。生...原创 2019-02-21 09:42:25 · 293 阅读 · 0 评论 -
线程(五)----队列
列表是不安全的数据结构。举例:使用线程移除列表的最后一位直至空import threading,timeli = [1,2,3,4,5]def pri(): while li: a = li[-1] print(a) time.sleep(1) try: li.remov...原创 2019-02-20 20:39:51 · 243 阅读 · 1 评论 -
线程(四)----信号量
信号量 信号量是用来控制并发数的,BoundedSemaphore或Semaphore管理一个内置的计数器,每当调用acquire()时-1,调用release()时+1。计数器不能小于0,当计数器为0 时,acquire()将阻塞线程至同步锁定状态,直到其它线程调用release()。(类似停车位的概念)BoundedSemaphore与Semaphore的唯一区别在于前者将在调...原创 2019-02-20 17:16:44 · 196 阅读 · 0 评论 -
线程(三)----同步对象(Event)
Python threading模块提供Event对象用于线程间通信。它提供了一组、拆除、等待用于线程间通信的其他方法。event它是沟通中最简单的一个过程之中,一个线程产生一个信号。实例方法: event.wait(timeout=None):调用该方法的线程会被阻塞,如果设置了timeout参数,超时后,线程会停止阻塞继续执行; event.set():将eve...原创 2019-02-20 16:52:49 · 259 阅读 · 0 评论 -
线程(二)---GIL、同步锁、死锁与递归锁
线程需要掌握的知识点:同步锁 死锁 递归锁 信号量和同步对象(了解) 队列---生产者消费者模式 进程线程相关概念 并发 &并行并发:是指系统具有处理多个任务(动作)的能力并行:是指系统具有同时处理多个任务(动作)的能力 根据定义,可以得出并行是并发的子集。同步与异步同步:当进程执行到一个IO(等待外部数据)的时候 ------等:同步异步 ...原创 2019-02-20 16:05:19 · 365 阅读 · 0 评论 -
线程(一)------线程入门
1.一个程序至少有一个进程,一个进程至少有一个线程,进程可以理解成线程的容器。2.进程在执行中拥有独立的内存单元,而多个线程共享内存,从而极大提高了程序的运行xiaol。3.线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口,顺序执行序列和程序的出口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个现场执行控制。4.进程是具有一定独立功能的程序关...原创 2019-02-20 10:02:18 · 268 阅读 · 0 评论 -
Python基础----Socket编程规范及底层原理(三)---socketserver实现并发及底层原理
Socket网络编程:前面实现的TCP服务端只能接受一个用户接入,这里使用了并发来实现多用户接入,不废话直接上代码!原理后面慢慢给大家讲!import socketserverclass MyServer(socketserver.BaseRequestHandler): def handle(self): #根据底层源码可以发现handle会自动执行 pri...原创 2019-02-19 10:15:48 · 444 阅读 · 1 评论 -
Python基础----Socket编程规范及底层原理(二)---粘包现象及解决方法
一.什么是粘包TCP粘包是指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。-----官方解释粘包说白了就是上次从缓冲区拿的数据拿少了,下次和其它数据一起接收过来,比如缓冲区有『abcdefg』,设rec()一次接受5个字符,那么用户第一次只能接收到「abcde」,「fg」接收不到,那么下次「fg」和其它数据一起被用户接收。二.为什么出...原创 2019-02-17 10:39:59 · 441 阅读 · 0 评论 -
Python基础----Socket编程规范及底层原理(一)
今天先给大家讲讲什么是Socket,明白其底层实现原理是非常重要的,不明白底层的话写出来的代码会非常low,能否明白底层实现是正规军和杂牌军的重要区别之一,好了,不废话了,开始干!一.Socket1.为什么要socket?可能很多人都听说过C/S架构,即client/server架构(客户端/服务端架构),而C/S架构有硬件C/S架构(打印机),软件C/S架构(如百度网站就是服务...原创 2019-02-16 22:50:00 · 824 阅读 · 0 评论 -
Python基础杂货店(一)
一.变量的定义格式:变量使用时=进行赋值左边是变量名 右边是变量值练习a = 1b = 1.232c = "lian"d = ['lian',"zs",1,{"name":"lian"},[1,2,4,4]]e = (1,2,3,"lian",["z","s"])f = {"name":"lian",原创 2019-02-15 12:03:19 · 358 阅读 · 0 评论 -
Python基础---全网最全time,datetime,calendar时间模块
目录一.time时间模块二.datetime时间模块三.calendar模块一.time时间模块 time模块中时间表现的格式主要有三种: a、timestamp时间戳,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量 b、struct_time时间元组,共有九个元素组。 c、format time 格式化时间,已格式化的结构使...原创 2019-02-19 20:20:18 · 833 阅读 · 1 评论 -
Python基础杂货店(二)
一.条件语句① if语句if语句if 条件:条件成立时执行的语句注意:代码的缩进问题,代码的缩进要使用一个tab键或者四个空格(建议使用四个空格,tab和空格最好不要混用)if逻辑图:例子:name = "lianZS"if "lian" in c: print("ok")if-elseif 条件:条件成立时,执行的语句else:...原创 2019-02-15 15:00:13 · 7674 阅读 · 0 评论 -
Python基础杂货店(三)
注释1. 注释的作用注释就是对某些代码进行标注说明,以增强代码的可读性。我们在写程序的时候,编写的某一部分代码的意图不太明显,这时候就需要对这一部分代码加以说明,来明确这一部分到的意图。一般的编程语句有单行注释和多行注释2. 单行注释 单行注释是以#开头,#右边的所有的文字都被当做说明文字,而不是真正要执行的程序,只起到辅助说明作用 示例代码如下(为了保障可读性,#后面一...原创 2019-02-15 15:05:49 · 7687 阅读 · 9 评论