
Python
Python基础知识,笔记形式呈现
So.ne
while 2020:
earn() and learn()
展开
-
Python核心丨代码规范
PEP 8规范PEP是Python Enhancement Proposal的缩写,翻译过来教"Python增强规范"。缩进规范Python的缩进其实可以写成很多种,Tab、双空格、四空格、空格和Tab混合等。而PEP 8规范要求,选择四个空格的缩进,不要使用Tab,更不要使用Tab和空格混着用。第二个注意:每行最大长度限制在79个字符空行规范Python中的空行对Python解释器的执行没有影响,但对阅读体验有很深刻的影响。PEP 8规定,全局的类和函数的上方需要空两个空行,而类的函数之间原创 2020-07-01 14:27:04 · 293 阅读 · 0 评论 -
Python核心丨垃圾回收机制
Python垃圾回收机制计数引用Python中一切皆对象,因此,所看到的一切变量,本质上都是对象的一个指针。如何知道一个对象,是否永远都不能被调用了?可以通过这个对象的引用计数(指针数)为0的时候,说明这个对象永不可达,自然它就称为了垃圾,需要被回收。示例import osimport psutil# 显示当前 python 程序占用的内存大小def show_memory_info(hint): pid = os.getpid() p = psutil.Process原创 2020-06-30 13:54:03 · 181 阅读 · 0 评论 -
Python核心丨GIL(全局解释器锁)
GIL每一个Python线程,在CPython解释器中执行时,都会先锁住自己的线程,阻止别的线程执行。为什么又GILCPython引进GIL主要两个原因设计者为了规避类似于内存管理这样的复杂的竞争风险问题(race condition)二是因为CPython大量使用C语言库,但大部分C语言库都不是原生线程安全的(线程安全会降低性能和增加复杂度)GIL是如何工作的如下图,其中Thread 1、2、3轮流执行,每一个线程在开始执行时,都会锁住GIL,以阻止别的线程执行;同样的,每一个原创 2020-06-29 15:01:00 · 159 阅读 · 0 评论 -
Python核心丨并发编程之Asyncio
AsyncioAsyncio概念Sync(同步)和Async(异步)的概念Sync,是指操作一个接一个地执行,下一个操作必须等上一个操作完成后才能执行。Async是指不同操作间可以相互交替执行,如果其中的某个操作被block了,程序并不会等待,而是会找出可执行的操作继续执行。Asyncio工作原理Asyncio和其他Python程序一样,是单线程的,它只有一个主线程,但是可以进行多个不同的任务(task),这里的任务,就是特殊的future对象。这些不同的任务,被一个叫做even原创 2020-06-28 11:16:28 · 251 阅读 · 0 评论 -
Python核心丨并发编程之Futures
Futures区分并发和并行并发(Concurrency)并行(Parallelism)在Python中,并发并不是指同一时刻有多个操作(thread、task)同时进行。相反某个特定的时刻,它只允许有一个操作发生,只不过线程/任务之间互相切换,直到完成。thread和task分别对应Python中并发的两种形式threading和asyncio。threading,操作系统知道每个线程的所有信息,因此它会做主在适当的时候做线程切换。asyncio,主线程想要切换任务时,必须得到此任务可以原创 2020-06-24 13:34:17 · 336 阅读 · 0 评论 -
Python核心丨协程
Python协程基础协程是实现并发编程的一种方式实例简单的爬虫import timedef crawl_page(url): print('crawling {}'.format(url)) sleep_time = int(url.split('_')[-1]) time.sleep(sleep_time) print('OK {}'.format(url))def main(urls): for url in urls: c原创 2020-06-23 12:29:25 · 219 阅读 · 0 评论 -
Python核心丨迭代器和生成器
迭代器和生成器可迭代对象和迭代器在Python中一切皆对象,对象的抽象就是类,而对象的集合就是容器。列表(list),元组(tuple),字典(dict),集合(set)都是容器。所有的容器都是可迭代的(iterable)。迭代器提供了一个next的方法。调用这个方法后,要么得到这个容器的下一个对象,要么得到一个StopIteration的错误。而可迭代对象,通过iter()函数返回一个迭代器,再通过next()函数就可以实现遍历。判断一个对象是否可迭代def is_iterable(par原创 2020-06-22 15:50:52 · 145 阅读 · 0 评论 -
Python核心丨装饰器
装饰器函数 - > 装饰器在Python中,函数也是对象,可以把函数赋予变量**def func(message): print('Got a message:{}'.format(message))send_message = funcsend_message('hello world')# 输出Got a message: hello world函数func赋予了变量send_message,调用send_message,就相当于调用函数func()可以把函原创 2020-06-19 14:52:59 · 162 阅读 · 0 评论 -
Python核心丨Python参数的传递
Python参数的传递Python变量及其赋值Python代码示例a = 1b = aa = a + 1首先将1赋值于a,即a指向了1这个对象接着b = a 则表示,让变量 b 也同时指向 1 这个对象。注: Python 里的对象可以被多个变量所指向或引用最后执行 a = a + 1,Python的数据类型,例如整数(int)、字符串(string)等等,是不可变的。所以 a = a + 1,并不是让 a 的值增加 1,而是表示重新创建了一个新的值为 2 的对象,并让 a 指向它原创 2020-06-18 11:50:45 · 807 阅读 · 2 评论 -
Python核心丨对象的比较、拷贝
Python对象的比较、拷贝‘==’ VS ‘is’等于 (==) 和 is 是 Python 中对象比较常用的两种方式。简单来说,’=='操作符比较对象之间值是否相等。示例a == b而’is’操作符比较的是对象的身份标识是否相等,即它们是否是同一对象,是否指向同一内存地址。在Python中,每个对象的身份标识,都能通过函数id(object)获得。因此’is’操作符相当于比较对象之间 ID 是否相等。示例a = 10b = 10a == bTrueid(a)44275原创 2020-06-17 12:15:58 · 161 阅读 · 0 评论 -
Python核心丨模块化
模块化简单模块化最简单的模块化方式,是把函数、类、常量拆分到不同的文件,把它们放在同一个文件夹,然后使用from your_file import funcion_name,class_name的方式调用# utils.pydef get_sum(a, b): return a + b# class_utils.pyclass Encoder(object): def encode(self, s): return s[::-1]class Decod原创 2020-06-16 11:48:07 · 250 阅读 · 0 评论 -
Python核心丨面向对象(下)
面向对象实现Python的搜索引擎一个搜索引擎由搜索器、索引器、检索器和用户接口四个部分组组成。搜索器通俗来讲就是爬虫,它能在互联网上大量爬取各类网站的内容,送给索引器。索引器拿到网页和内容后,对内容进行处理,形成索引,存储于内部的数据库等待检索。接口是指网页和App前端界面。例如百度和谷歌的搜索页面,用户通过接口,向搜索引擎发出询问,询问解析后送达检索器;检索器搞笑检索后,再将结果返回给用户。实例五个文件的检索# 1.txtI have a dream that my four l原创 2020-06-15 13:23:45 · 191 阅读 · 0 评论 -
Python核心丨面向对象(上)
面向对象对象生物课上的“界门纲目科属种”的概念,就是将生物分化为不同的类型,生活中我们也习惯对身边事物进行分类:猫和狗都是动物;直线和圆都是平面几何的图形;《哈利波特》和《冰与火之歌》都是小说同一类事物有着相似的特性:动物会动;平面图形有面积和周长;小说有作者Python面向对象的应用代码class Document(): def __init__(self, title, author, context): print('init function原创 2020-06-12 11:10:01 · 292 阅读 · 0 评论 -
Python核心丨匿名函数
匿名函数描述匿名函数格式lambda argument1, argument2, ... argumentN : expression匿名函数的关键字是lambda,之后是一系列的参数,然后用冒号隔开,最后则是由这些参数组成的表达式。square = lambda x: x**2square(3)9写成常规函数def square(x): return x**2square(3) 9匿名函数和常规函数区别lambda是一个表达式,并不是一个语句所谓的表达式原创 2020-06-11 14:36:30 · 1107 阅读 · 2 评论 -
Python核心丨自定义函数
自定义函数函数基础函数就是为了实现某一个功能的代码段,只要写好以后,就可以重复利用。def my_func(message): print('Get a message:{}'.format(message))# 调用函数my_func()my_func('Hello World')# 输出Get a message: Hello Worlddef是函数的声明;my_func是函数的名称;括号里的message则是函数的参数;而print那行则是函数的主体部分,可以执行相原创 2020-06-10 14:21:08 · 706 阅读 · 0 评论 -
Python核心丨异常处理
异常处理错误与异常程序中的错误至少包含两种,一种是语法错误,另一种则是异常示例if name is not Noen print(name)if语句漏掉了冒号,不符合Python的语法规范,所以程序就会报错invalid syntax。而异常则是指程序的语法正确,也可以被执行,但在执行过程中遇到了错误,抛出了异常。10 / 0Traceback (most recent call last): File "<stdin>", line 1, in <modu原创 2020-06-09 15:06:50 · 206 阅读 · 0 评论 -
Python核心丨条件与循环
条件与循环条件语句语法if condition_1: statement_1elif condition_2: statement_2...elif condition_i: statement_ielse: statement_n整个条件语句是顺序执行的,如果遇到一个条件满足,如condition_i满足时,在执行完statement_i后,便会退出整个if、elif、else条件语句,而不会继续向下执行实例表示y=|x|这个函数if x &l原创 2020-06-08 16:42:00 · 163 阅读 · 0 评论 -
Python核心丨输入与输出
输入与输出输入输出基础最简单直接的输入来子键盘操作name = input('your name:')gender = input('you are a boy?(y/n)')###### 输入 ######your name:Jackyou are a boy?(y/n) ywelcome_str = 'Welcome to the matrix {prefix} {name}.'welcome_dit = { 'prefix': 'Mr.' if gender == 'y原创 2020-06-04 11:18:46 · 284 阅读 · 0 评论 -
Python核心丨字符串
字符串字符串基础字符串是Python中很常见的一种数据类型,比如日记的打印,函数的注释、数据库的访问、变量的基本操作等等。描述字符串是由独立字符组成的一个序列name = 'jason'city = 'beijing'# 单引号、双引号和三引号的字符串是一模一样的s1 = 'hello's2 = "hello"s3 = """hello"""s1 == s2 == s3True# 内嵌带引号的字符串"I'm a student"三引号字符串,主要应用于多行字符串的情原创 2020-06-03 11:09:02 · 307 阅读 · 0 评论 -
Python核心丨字典和集合
字典和集合字典和集合基础字典字典是一系列由(key)和值(value)配对组成的元素的集合在Python3.7+,字典被确定为有序相比于列表和元组,字典的性能更优,特别是对于查找、添加和删除操作,字典都能在常数时间复杂度内完成。集合集合和字典基本相同,唯一的区别,集合没有键和值的配对,是一系列无序的、唯一的元素集合字典和集合的创建d1 = {'name': 'jason', 'age':20, 'gender': 'male'}d2 = dict({'name': 'jason'原创 2020-06-02 11:31:16 · 833 阅读 · 0 评论 -
Python核心丨列表和元组基础
列表和元组基础列表和元组,都是一个可以放置任意数据类型的有序集合l = [1, 2, 'hello', 'world'] # 列表中同时含有int和string类型的元素tup = ('jason', 22) # 元组中同时含有int和string类型的元素区别列表是动态的,长度大小不固定,可以随意地增加、删减或者改变元素(mutable)元组是静态的,长度大小固定,无法增加删减或者改变(immutable)实例l = [1, 2, 3, 4]l[3] = 40l[1,原创 2020-06-01 11:10:14 · 249 阅读 · 0 评论 -
Python进阶丨正则表达式(下)
正则表达式- 内容search方法sub方法- search方法语法:re.search(pattern, string, falgs=0)参数:pattern:要匹配的正则表达式string:要匹配的字符串flags:标志位,用于控制正则表达式的匹配方式例# 实现功能:比较search方法和match方法的区别import recontent = '点赞数:1...原创 2020-01-10 10:41:52 · 156 阅读 · 0 评论 -
Python进阶丨正则表达式(中)
正则表达式.- 内容组的概念贪婪与非贪婪- 组连续的满足某个条件的字符串,()内的内容构成一个组。# 提取文章发布日期import recontent = '发布于2020/1/9'result = re.findall('.*?(\d.*\d)', content)# .*表示匹配除换行符外的任意字符,?表示非贪婪匹配# (\d.*\d)表示一个组,以数字开头,以数字...原创 2020-01-09 14:04:58 · 169 阅读 · 0 评论 -
Python进阶丨正则表达式(上)
正则表达式.- 描述官方解释:正则表达式的概念是使用但字符串来描述、匹配一系列匹配某个句法规则的字符串。通俗来说:正则表达式是通过一定的匹配规则,从一个字符串中提取出想要的数据。在Python中要使用正则表达式,首先要导入Python内置的re模块- 普通字符import retarget = 'life is short,i learn python.'result = re...原创 2020-01-08 14:27:17 · 351 阅读 · 0 评论 -
Python进阶丨进程和线程 —— 进程 vs 线程
进程 vs 线程- 描述要实现多任务,通常会设计Master-Worker模式,Master负责分配任务,Worker负责执行任务。多环境任务下,通常是一个Master,多个Worker多进程最大的优点就是稳定性高,因为一个子进程崩溃了,不会影响主进程和其他子进程。缺点是创建进程的代价大,在Windows下创建进程开销巨大。多线程模式通常比多进程快一点,但是也快不到哪去,而且多线程模式致...原创 2020-01-06 11:26:25 · 307 阅读 · 0 评论 -
Python进阶丨进程和线程 —— ThreadLocal
ThreadLocal- 描述只用全局变量并不能满足多线程环境的需求,很多时候线程还需要拥有自己的私有数据,这些数据对于其他线程来说是不可见的。Python提供了ThreadLocal变量,本身是一个全局变量,但是每个线程却可以利用它来保存属于自己的私有数据,这些私有数据对其他线程也是不可见的。- 起源在多线程环境下,每个线程都有自己的数据,一个线程使用自己的局部变量比使用全局变量好,因...原创 2020-01-03 10:24:20 · 242 阅读 · 0 评论 -
Python进阶丨进程和线程 —— 多线程
多线程- 描述多线程类似于同时执行多个不同程序- 优点a.使用线程可以把占据长时间的程序中的任务放到后台去处理b.用户界面可以更加吸引人,比如用户点击一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度c.程序的运行速度可能加快d.在一些等待的任务实现上如用户输入。文件读写和网络收发数据等,线程就比较有用。- 线程种类内核线程:由操作系统内核创建和撤销用户线程:不需...原创 2020-01-02 14:42:32 · 142 阅读 · 0 评论 -
Python进阶丨进程和线程 —— 多进程
多进程- 描述由于Python中全部解释器锁(GIL)的存在,所以Python多线程并不能有效利用CPU多核的性能(相当于单核并发)实现多线程多核并行。如果想充分地使用多核CPU的资源,需要使用多进程,Python中提供multiprocessing实现。- multiprocessingmultiprocessing模块就是跨平台版本的多进程模块,提供了一个Process类来代表一个进...原创 2019-12-31 13:53:39 · 209 阅读 · 0 评论 -
Python进阶丨 进程和线程
进程和线程.- 描述进程(process):是一个具有独立功能的程序关于某个数据集合的一次运行活动线程(thread):是操作系统能够进行运算调度的最小单位- 通俗案例对于操作系统来说,一个任务就是一个进程,比如打开一个浏览器,就是启动一个浏览器进程,打开一个记事本,就是启动一个记事本进程,打开两个记事本,就是启动了两个记事本进程。打开Word,就启动了一个Word进程,它可以...原创 2019-12-30 13:28:06 · 606 阅读 · 0 评论 -
python进阶丨IO编程 —— 序列化
序列化描述变量从内存中变成可存储或传输的过程称之为序列化百科:对象的状态信息转换为可以存储或传输的形式的过程通俗解释:序列化是把其他数据类型转换城字符串或bytes能够在文件里存储的只有bytes和str,能够在网络上传输的只能是bytes。目的a.以某种存储形式使自定义对象持久化b.将对象从一个地方传递到另一个地方c.使程序更具维护性实例Python提供了pic...原创 2019-12-27 13:16:04 · 481 阅读 · 0 评论 -
Python进阶丨IO编程 —— 操作文件和目录
操作文件和目录.描述Python内置的os模块可以直接调用操作系统给提供的接口函数import osprint(os.name)# 输出结果:nt输出 nt 表明是Windows系统,输出 posix 表明是Linux、Unix或Mac OS X 系统。获取详细的系统信息,可以调用uname()函数,不过uname()函数在 Windows 上不提供。(os模块的某些函数跟...原创 2019-12-26 10:46:00 · 217 阅读 · 0 评论 -
Python进阶丨IO编程 —— 文件读写
文件读写.open方法完整语法open(file, mode='r', buffering=-1, encoding=None, errors=None,newline=None, closefd=True, opener=None)参数说明file —— 必须,文件路径(相对或者绝对路径)mode —— 可选,文件打开模式buffering —— 设置缓冲encoding...原创 2019-12-24 10:22:02 · 482 阅读 · 0 评论 -
Python进阶丨错误、调试和测试 —— 单元测试
单元测试.描述单元测试是用来对一个模块,一个函数或者一个类进行正确性检验的测试工作例测试函数abs()a.输入正数,1、0.1、11.1,期待返回值与输入相同b.输入负数,-1、-1.1,期待返回值与输入相反c.输入0,期待返回0d.输入非数值类型,期待抛出TypeError如果单元测试通过,说明测试这个函数能够正常工作意义以测试为驱动的开发模式最大好处就是确保一个...原创 2019-12-23 13:09:39 · 160 阅读 · 0 评论 -
Python进阶丨 错误、调试和测试 —— 调试
调试.print()把可能有问题的变量打印出来def fo(s): n = int(s) print('n = {}'.format(n)) return 10 / ndef main(): fo('0')main()输出n = 0Traceback (most recent call last): File ...line 4,...原创 2019-12-19 10:44:27 · 208 阅读 · 0 评论 -
Python进阶丨错误、调试和测试 —— 记录和抛出异常
调用栈如果错误没有被捕获,它就会一直往上抛,最终被Python解释器捕获,打印一个错误信息,然后程序退出例def fo(s): return 10/int(s)def bar(s): return fo(s) * 2def main(): bar('0')main()输出结果# 告诉我们错误跟踪信息Traceback (most recent ca...原创 2019-12-18 11:00:57 · 212 阅读 · 0 评论 -
Python进阶丨错误、调试和测试 —— 错误处理
错误处理.try/except异常捕捉可以使用try/except语句try: 执行代码except: 发生异常时执行的代码例try: print('try...') r = 10 / 0 print('result:', r)except ZeroDivisionError as e: print('except:', e)...原创 2019-12-17 10:54:35 · 237 阅读 · 0 评论 -
Python进阶丨错误、调试和测试 —— 错误和异常
错误和异常.语法错误:Python的语法错误又称解析错误While True print('hello')报错信息 While True ^SyntaxError: invalid syntax语法分析器指出了出错的一行,出错原因是少写了一个:.异常:即使语句或表达式在语法上是正确的,但在尝试执行时,仍可能会引发错误/。在执行时检测...原创 2019-12-16 17:07:24 · 228 阅读 · 0 评论 -
Python进阶丨面向对象高级编程 —— 枚举类
枚举类.描述枚举类型可以看作是一种标签或是一系列常量的集合,通常用于表示某些特定的有限集合(例如星期,月份)在没有专门提供枚举类型的时候,一般通过字典或类实现Color = { ‘Red' : 1, 'Green':2, 'Blue':3,}class Color: Red = 1 Green = 2 Blue = 3它的隐患在于可以被修改...原创 2019-12-13 14:35:55 · 141 阅读 · 0 评论 -
Python进阶丨面向对象高级编程 —— 定制类
定制类.-描述看到形如__xxx__的变量或者函数名需要注意,这些在Python中是由特殊用途的__str __例class Student(object): def __init__(self, name): self.name = nameprint(Stduent('Maybe')输出<__main__.Student object a...原创 2019-12-10 13:40:03 · 154 阅读 · 0 评论 -
Python进阶丨面向对象高级编程 —— 多重继承
多重继承.描述通过多重继承,一个子类就可以同时获得多个父类的所有功能就像二哈即继承了狼的能力,还继承了宠物的能力例class Animal(object): pass # 狼类class wolf(Animal): passclass Erha(Mammal): pass 然后我们想给二哈增加犯傻的功能,只需要先定义一个Pets的类cl...原创 2019-12-05 11:33:25 · 131 阅读 · 0 评论