![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
python学习笔记
Vince Li
人生苦短,Python当歌
展开
-
Python3.6字符串新特性
字符串前加 f1、作用:字符串格式化(python 3.6 新增,类似于变量内插赋值),格式化的字符串文字前缀为"f",类似str.format()。包含由花括号包围的替换区域。替换字段是表达式,在运行时进行评估,然后使用format()协议进行格式化。和之前的format字符串格式化差不多,但是用起来更简化2、例子:Python 3.6.5 >>> var = "py...原创 2020-03-24 21:21:43 · 439 阅读 · 0 评论 -
Python中的抽象类和抽象方法
Python如何实现抽象类在python中类 通过继承metaclass =ABCmeta类来创建抽象类,抽象类是包含抽象方法的类,其中ABCmeta类(Metaclass for defining abstact baseclasses,抽象基类的元类)是所有抽象类的基类。定义了抽象类后,在要实现抽象方法的前一行使用@abc.abstractmethod来定义抽象方法。抽象方法不包含任何可实...原创 2020-03-14 11:02:45 · 1966 阅读 · 0 评论 -
如何向女朋友解释什么是HTTP协议
HTTP协议HTTP协议(Hyper Text Transfer Protocol),超文本传输协议,该协议规定了你使用的浏览器和服务器之间的数据传输规则.HTTP基于TCP/IP通信协议来传递数据。...原创 2019-04-18 21:04:03 · 311 阅读 · 2 评论 -
python常用魔术方法
常见的魔方属性、方法__doc__ 表示类的描述信息__module__表示当前操作的对象在那个模块(main)__class__表`示当前操作的对象的类是什么__new__ 创建对象时为对象分配空间,在初始化方法__init__之前被调用__init__ 初始化方法,通过类创建对象时,自动触发执行,一般用来定义实例属性__del__当对象在内存中被释放时,自动触发执行__call_...原创 2019-04-21 20:32:13 · 209 阅读 · 0 评论 -
python3中的property使用方法
property属性定义一个可以使实例方法用起来像实例属性一样的特殊关键字,可以对应于某个方法,通过使用property属性,能够简化调用者在获取数据的流程(使代码更加简明)。property属性的定义和调用要注意以下几点:调用时,无需括号,加上就错了;并且仅有一个self参数实现property属性的两种方式装饰器新式类中的属性有三种访问方式,并分别对应了三个被@pro...原创 2019-04-21 20:14:09 · 338 阅读 · 0 评论 -
python中静态方法存在的意义
实例方法、类方法、静态方法的区别这三种方法都是保存在类的内存中,调用者不同。实例方法由对象调用,至少一个self参数,self代表对象的引用。self指向当前的实例对象,所以只要该方法有self参数,在调用此方法的时候会先把这个对象的内存空间加载进来,以便在方法中使用该实例对象的属性或者方法类方法由类调用,至少一个cls参数,并且需要装饰器@classmethod修饰cls指向当前的类...原创 2019-04-21 19:53:56 · 3906 阅读 · 0 评论 -
python3多继承以及MRO顺序
多继承以及MRO顺序多继承指的是子类继承多个父类,可以通过三种方式访问父类的方法:父类名.父类方法(self):这种方式容易造成父类方法被调用多次的问题(菱形继承问题),而且一旦父类名称发生变化,子类调用的地方都需要修改。super(指定某个类名, self).父类方法():从指定类名的MRO下一级开始调用super().父类方法():按照MRO顺序查找上级父类的方法。多继承中的菱形...原创 2019-04-21 19:42:12 · 787 阅读 · 0 评论 -
Python3 协程 + 正则 批量爬取斗鱼美女图片
from urllib import requestfrom gevent import monkeyimport randomimport reimport geventmonkey.patch_all()def get_html(): with open("s_html","r")as f: # 此处打开的s_html文件为斗鱼颜值区的网页源码(源码自己使用浏览器查看...原创 2019-04-13 21:01:32 · 490 阅读 · 3 评论 -
正则表达式 之 python3
re模块操作在Python中需要通过正则表达式对字符串进行匹配的时候,可以使用一个模块,名字为rere模块的使用过程import re # 导入re模块result = re.match(正则表达式,要匹配的字符串) # 使用match方法进行匹配操作result.group() # 如果上一步匹配到数据的话,可以使用group方法来提取数据,如果没有匹配到数据则会报错说明...原创 2019-04-13 18:44:14 · 188 阅读 · 2 评论 -
python3 一 多线程死锁问题及解决方案
死锁:前提是有多个锁所谓死锁: 是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程在线程间共享多个资源的时候,如果两个线程分别占有一部分资源并且同时等待对方的资源时,就会造成死锁。尽管死锁很少发生,但一旦发生就会造成应用的停止响应。产生死锁的代码...原创 2019-04-09 19:41:02 · 1058 阅读 · 0 评论 -
python3 一 线程与互斥锁详解
什么是线程?可以简单理解为同一进程中有多个计数器,每个线程的执行时间不确定,而每个进程的时间片相等,线程是操作系统调度执行的最小单位.线程的创建步骤Import threading # 导入模块 threading# 创建一个线程对象t1 = threading.Thread(target=func_name, args=(num,), name=”子线程名字”)t1.start...原创 2019-04-09 18:49:25 · 890 阅读 · 0 评论 -
python3生成器类题目易错写法
遍历定义一个生成器列表a = [(i for i in range(10))]使用for遍历for i in a: print(i) # <generator object <genexpr> at 0x0000014D0579A888>但是输出的结果并不是我们想象的哪像,而是输出了一个生成器原因:在定义a时,并不是直接使用[]的列表推导式,也不...原创 2019-04-12 21:24:34 · 232 阅读 · 0 评论 -
生成器和迭代器的区别
生成器和迭代器的区别生成器的另一个优点就是它不要求你事先准备好整个迭代过程中所有的元素,即无须将对象的所有元素都存入内存之后,才开始进行操作。生成器仅在迭代至某个元素时才会将该元素放入内存,而在这之前或之后,元素可以不存在或者被销毁。这个特点使得它特别适合用于遍历一些巨大的或是无限的类序列对象,大文件/大集合/大字典/斐波那契数列等。这个特点被称为 延迟计算 或 惰性求值(Lazy evalu...原创 2019-04-12 21:09:57 · 2989 阅读 · 0 评论 -
[ python ] 基础技巧
###合并字典d = {"a": 1, "b": 2}e = {"c": 3, "d": 4}f = {**d,**e}print(f)运行结果为:{'a': 1, 'b': 2, 'c': 3, 'd': 4}###高级拆包a = [1, 2, 3, 4, 5]#列表也可以拆包z, x, c, v, b = aprint(z, x, c, v, b)#1 2 3 4 5...原创 2019-04-14 14:06:29 · 187 阅读 · 2 评论 -
子网掩码
子网掩码是什么?子网掩码(network)即该子网的地址。即规定所有该子网内的IP地址的前若干位应相同(网络号)。每一个IP地址包括两部分:网络地址(网络号)和主机地址(主机号)但是由于IP地址分为A类,B类,C类等,其网络号的位数并不相同,主机号位数也不相同,所以当你单独达到一个IP地址的时候你并不能确定该IP地址的网络号是多少,也不知道该子网中可以有多少个用户如255.255.255....原创 2019-04-18 20:53:42 · 606 阅读 · 0 评论 -
python各个版本改动
该网站可以看到python各个版本的改动,貌似需要翻墙…https://docs.python.org/zh-cn/3/whatsnew/index.html原创 2019-06-30 08:29:40 · 595 阅读 · 0 评论 -
python中的map,feilter,和reduce函数
python中的map,feilter,和reduce函数map()map()的原型是map(function, iterable, …)参数 function: 传的是一个函数名,可以是python内置的,也可以是自定义的。 就像上面的匿名函数lambda参数 iterable: 传的是一个可以迭代的对象,例如列表,元组,字符串这样的。返回值是一个map...原创 2019-06-29 20:18:34 · 357 阅读 · 0 评论 -
collections模块之defaultdict
初识defaultdict之前在使用字典的时候, 用的比较随意, 只是简单的使用dict.然而这样在使用不存在的key的时候发生KeyError这样的一个报错, 这时候就该defaultdict登场了.如何使用defaultdict可以这样from collections import defaultdictd1 = defaultdict(int)或者这样import coll...原创 2019-04-24 21:28:55 · 546 阅读 · 0 评论 -
Python heapq模块
Python heapq模块heapq模块提供了如下几个函数:函数用法heapq.heappush(heap, item)把item添加到heap中(heap是一个列表)heapq.heappop(heap)把堆顶元素弹出,返回的就是堆顶heapq.heappushpop(heap, item)先把item加入到堆中,然后再pop,比heappush()再...原创 2019-04-20 11:48:44 · 264 阅读 · 0 评论 -
堆的概念
堆的概念堆(heap)又被为优先队列(priority queue)。尽管名为优先队列,但堆并不是队列。回忆一下,在队列中,我们可以进行的限定操作是dequeue和enqueue。dequeue是按照进入队列的先后顺序来取出元素。而在堆中,我们不是按照元素进入队列的先后顺序取出元素的,而是按照元素的优先级取出元素堆是一种基本的数据结构。在一个二叉堆的数组中,每一个元素都要保证大于等于另...原创 2019-04-20 11:43:27 · 225 阅读 · 0 评论 -
面向对象三大特性总结
三大特性:封装,继承,多态封装、继承、多态————————封装和继承目的都是为了代码重用,多态目的是为了接口重用。封装---->减少了大量的冗余代码---->封装将具有独立功能的代码封装成一个函数,使用时直接调用即可。---->将具有相同特征的描述事物的数据和操作封装在一起形成一个类;使用时实例化即可.被封装的数据和操作只有通过提供的公共方法才能被外界访问(封装隐藏...原创 2019-04-20 09:27:44 · 250 阅读 · 0 评论 -
python3中import的那么些坑
多模块开发时注意事项通过from 模块 import 变量,此时相当于给一个变量赋值import time # 相当于在本文件中创建了一个名为time变量,这个变量指向python标准库中的time模块from time import ctime # 相当于在本文件中创建了一个ctime变量,这个变量指向time模块中的ctime方法如果在程序中修改了变量的值就导致这个变量成了局部变...原创 2019-04-19 19:03:48 · 905 阅读 · 0 评论 -
深拷贝和浅拷贝
深拷贝和浅拷贝copy()与deepcopy()使用方法注:使用前需要导包import copy浅拷贝(copy.copy())是对一个对象的顶层(外层)拷贝,只是拷贝了引用,并没有拷贝内容。变量的赋值(如:a = b )是地址的引用,也算是一种浅拷贝。深拷贝(copy.deepcopy())则是对一个对象深层(递归)的拷贝,保证了数据的独立性(深拷贝会判断全部数据无论结构有多少层,...原创 2019-04-19 18:22:17 · 169 阅读 · 0 评论 -
GIL对多线程的影响
什么是GIL?GIL对多线程的影响GIL全称Global Interpreter Lock(全局解释器锁)。GIL和Python语言没有任何关系,只是因为历史原因导致在官方推荐的解释器Cpython中遗留的问题。(多线程)每个线程在执行的过程中都需要先获取GIL,保证同一时刻只有一个线程可以执行代码,但是当遇到IO阻塞会自动的释放GIL锁,所以使用多线程还是比单线程的效率要高但是在同一时间还是只...原创 2019-04-19 18:01:16 · 201 阅读 · 0 评论 -
TCP/IP协议简述
TCP/IP协议简述什么是TCP/IP协议族TCP/IP 协议族是一系列网络协议的总和,它定义了电脑手机等电子设备如何连入因特网,以及电子设备间如何通过互联网进行数据传输。TCP/IP 协议采用4层结构,分别是应用层、传输层、网络层和链路层,每一层都呼叫它的下一层所提供的协议来完成自己的需求。由于我们大部分时间都工作在应用层,下层的事情不用我们操心;其次网络协议体系本身就很复杂庞大,入门门槛...原创 2019-04-18 21:17:23 · 542 阅读 · 0 评论 -
什么是猴子补丁(monkey patch)
猴子补丁根据维基百科上的解释,猴子补丁是一种让程序行为在运行时拓展或变更的方法定义猴子补丁的定义取决于使用它的社区,在Ruby、Python等动态编程语言中,猴子补丁仅指在运行时动态改变类或模块,为的是将第三方代码打补丁在不按预期运行的bug或者feature上monkey patch指的是在运行时动态替换,一般是在start up的时候.用过gevent就会知道,会在最开头的地方ge...原创 2019-04-12 20:55:35 · 592 阅读 · 0 评论 -
协程与线程, 进程的区别
进程、线程、协程的区别进程是资源分配的单位,真正执行代码的是线程,操作系统真正调度的是线程。进程没有线程效率高,进程占用资源多,线程占用资源少,比线程更少的是协程。协程依赖于线程、线程依赖于进程,进程一死线程必挂,线程一挂协程必死一般不用多进程,可以考虑使用多线程,如果多线程里面有很多网络请求,网络可能会有堵塞,此时用协程比较合适。简单总结进程是系统资源分配的单位线程是操作系统调...原创 2019-04-12 18:54:54 · 299 阅读 · 0 评论 -
Python3高级 之 协程
协程协程,又称微线程,纤程。英文名Coroutine。协程是啥?协程是python个中另外一种实现多任务的方式,只不过比线程占用更少资源是更小的执行单元。 为啥说它是一个执行单元,因为它自带CPU上下文。这样只要在合适的时机, 我们可以把一个协程 切换到另一个协程。 只要这个过程中保存或恢复 CPU上下文那么程序还是可以运行的。通俗的理解:在一个线程中的某个函数,可以在任何地方保存当前函数...原创 2019-04-12 18:49:05 · 215 阅读 · 0 评论 -
python中encode与decode编码转换
encode()查看源码,encode()是str类的一个成员方法,可以把str类型的数据变成bytes(字节对象)当我们想把str类型的数据通过网络传输时,使用encode()编码再传输.decode()查看源码,decode是bytes类的一个成员方法,可以把bytes类型的数据变成str类型,当我们中网络中直接获取到未经处理的数据时,直接输出会出现乱码,使用decode()方法把数...原创 2019-04-06 20:33:13 · 484 阅读 · 3 评论 -
python网络编程之 一 socket(套接字)
什么是socketsocket(简称 套接字) 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的例如我们每天浏览网页、QQ 聊天、收发 email 等等在此解释一下什么是通信:通:指互通,共用信:指信息通信:使信息在多个进程中被共用下面讲解下 Socket模块功能在 Pyt...原创 2019-04-06 20:05:09 · 270 阅读 · 0 评论 -
什么是 IP 地址?
什么是IP地址?如果有人问你什么是IP地址?你会怎么回答呢?ip地址:一台电脑在网络中的唯一标识,比如192.168.1.1:用来在本地局域网上中标记一台电脑。ip地址的分类每一个IP地址包括两部分:网络地址(网络号)和主机地址(主机号)A类IP地址一个A类IP地址由1字节的网络地址和3字节主机地址组成,网络地址的最高位必须是“0”,地址范围1.0.0.1-126.255.255...原创 2019-04-06 17:18:11 · 310 阅读 · 0 评论 -
python也有数组 --- 标准库中的列表工具array()
array()很多数据结构可能会用到内置列表类型。然而,有时可能需要不同性能代价的实现。array 模块提供了一个类似列表的 array() 对象,它仅仅是存储数据,更为紧凑。使用方式与列表一样:array(类型编码 ,列表)返回一个新数组定义了以下类型代码:类型代码C类型最小大小(以字节为单位)'b'带符号整数1'B'无符号整数1“u”Unicode字符2(见注释)'h'带...原创 2019-03-31 20:26:01 · 400 阅读 · 0 评论 -
Pycharm代码格式化快捷键及其设置方法
Pycharm代码格式化快捷键及其设置方法格式化快捷键Ctrl + Alt + L可一个通过下面的方法修改首先找到settings接下来找到keymap按照这个路径找到Code下的Reformat Code就是这个快捷键,找到后就可以修改了其中后面的Ctrl + L 是我自己加的...原创 2019-03-26 20:47:26 · 36203 阅读 · 1 评论 -
python3中sort和sorted的区别详解
sort和sorted的区别虽然python3中sort()和sorted()都可以用来排序,但二者有以下两个最主要的区别:sort只能应用在列表list上,而sorted可以对所有可迭代的对象进行排序的操作sort方法会在原list上直接进行排序,不会创建新的list。而sorted方法不会对原来的数据做任何改动,排序后的结果是新生成的。如果我们不需要原来的数据而且数据是list类型,...原创 2019-03-26 20:28:05 · 1831 阅读 · 0 评论 -
Python3 字典 items() 方法
Python3 字典 items() 方法描述Python 字典 items() 方法以列表返回可遍历的(键, 值) 元组数组。[ (键,值) , (键,值) , (键,值) ]语法items()方法语法:dict.items()返回值返回可遍历的(键, 值) 元组数组。实例以下实例展示了 items() 方法的使用方法:#python3a = {"a": 1,...原创 2019-03-26 18:44:42 · 2018 阅读 · 1 评论 -
Python的闭包的后期绑定问题
阅读一下代码他们的输出结果是什么?def multi(): return [lambda x : i*x for i in range(4)]print([m(3) for m in multi()])正确答案是[9,9,9,9],而不是[0,3,6,9]产生的原因是Python的闭包的后期绑定导致的,这意味着在闭包中的变量是在内部函数被调用的时候被查找的,因为,最后函数被调用的...原创 2019-03-29 17:07:42 · 366 阅读 · 3 评论 -
Python - 遍历列表时删除元素的正确做法
Python-遍历列表时删除元素的正确做法一.问题描述因为删除元素后,整个列表的元素会往前移动,而i却是在最初就已经确定了,是不断增大的,所以并不能得到想要的结果。问题现象如下:a = [1, 2, 3, 4, 5, 6, 7, 8]for i in a: if i > 5: a.remove(i)print(a)运行结果:[1, 2, 3, 4,...原创 2019-03-29 15:49:01 · 1242 阅读 · 0 评论 -
Python中__new__和__init__的区别与联系
Python中__new__和__init__的区别与联系只有继承自object的新式类才有__new__方法主要区别:__new__负责对象的创建,如:为对象分配空间__init__负责对象的初始化,如:初始化成员变量调用时间:__new__:创建对象时自动调用执行,会返回当前类的一个实例对象__init__:对象创建完成后自动调用执行,无返回值1. 在类中,如果__new__...原创 2019-03-13 18:38:54 · 241 阅读 · 0 评论 -
列表,元组,集合,字典常用方法
列表(元组)常用方法append(data)追加 将参数data追加到列表末尾,不管data是个什么玩意都当做元素对待list.append(data)extend(model)合并 将两个列表合并成一个列表,参数为数据存储结构你能为单个数据list1.extend(list2)结果放在第一个列表中insert(index, data)在列表指定索引出插入数据remove(dat...原创 2019-03-17 20:49:41 · 324 阅读 · 0 评论 -
python中多进程及进程间通信的方法
什么是进程?程序是静态的,当程序运行起来就叫做进程。是操作系统分配资源的基本单元。进程、线程的区别与优缺点定义的不同:进程是系统进行资源分配的最小单位.线程是进程的一个实体,是CPU进行调度的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.区别:一个程序至少有一个进程...原创 2019-04-10 22:22:44 · 1416 阅读 · 1 评论