![](https://img-blog.csdnimg.cn/20200831160342349.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Python学习笔记
Python学习过程中的一些知识笔记
小朱小朱绝不服输
这个作者很懒,什么都没留下…
展开
-
Python学习:垃圾回收机制
Python 程序在运行的时候,需要在内存中开辟出一块空间,用于存放运行时产生的临时变量;计算完成后,再将结果输出到永久性存储器中。如果数据量过大,内存空间管理不善就很容易出现 OOM(out of memory),俗称爆内存,程序可能被操作系统中止。而对于服务器,这种设计为永不中断的系统来说,内存管理则显得更为重要,不然很容易引发内存泄漏。什么是内存泄漏呢?这里的泄漏,并不是说你的内存出现了信息安全问题,被恶意程序利用了,而是指程序本身没有设计好,导致程序未能释放已不再使用的内存。内存泄漏也不是指原创 2020-09-19 21:00:49 · 2427 阅读 · 0 评论 -
Python学习:并发编程之Asyncio
在Python学习:Python并发编程之Futures学习了 Python 并发编程的一种实现——多线程。本博客继续学习 Python 并发编程的另一种实现方式——Asyncio。在处理 I/O 操作时,使用多线程与普通的单线程相比,效率得到了极大的提高。多线程有诸多优点且应用广泛,但也存在一定的局限性:比如,多线程运行过程容易被打断,因此有可能出现 race condition 的情况;再如,线程切换本身存在一定的损耗,线程数不能无限增加,因此,如果 I/O 操作非常 heavy,多线程很有可能原创 2020-09-19 17:03:24 · 2044 阅读 · 2 评论 -
Python学习:Python GIL(全局解释器锁)
在Python学习:Python并发编程之Futures中解释为什么多线程每次只能有一个线程执行?是由于GIL(全局解释器锁)的存在,导致无论你启多少个线程,你有多少个cpu, Python在执行的时候会淡定的在同一时刻只允许一个线程运行。通过例子发现了多线程比单线程没什么效率提高,甚至有时候效率更差,多核比单核也没有提高。难道Python的线程是假线程?Python 的线程,的的确确封装了底层的操作系统线程,在 Linux 系统里是 Pthread(全称为 POSIX Thread),而在 Windo原创 2020-09-18 16:27:45 · 842 阅读 · 0 评论 -
Python学习:Python并发编程之Futures
我们每天在各个网站、各个 App 上获取的新闻信息,很大一部分便是通过并发编程版的爬虫获得。正确合理地使用并发编程,无疑会给我们的程序带来极大的性能提升。今天学习理解、运用 Python 中的并发编程——Futures。一、区分并发和并行在操作系统中,并发和并行的概念如下:并发:在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。简言之,是指系统具有处理多个任务的能力。并行:当系统有一个以上原创 2020-09-17 16:35:42 · 1446 阅读 · 0 评论 -
Python学习:揭秘Python协程
协程是实现并发编程的一种方式。一说并发,肯定想到了多线程 / 多进程模型,没错,多线程 / 多进程,正是解决并发问题的经典模型之一。协程 ,又称为微线程,它是实现多任务的另一种方式,只不过是比线程更小的执行单元。因为它自带CPU的上下文,这样只要在合适的时机,我们可以把一个协程切换到另一个协程。通俗的理解: 在一个线程中的某个函数中,我们可以在任何地方保存当前函数的一些临时变量等信息,然后切换到另外一个函数中执行,注意不是通过调用函数的方式做到的 ,并且切换的次数以及什么时候再切换到原来的函数都由开发者原创 2020-09-16 22:22:39 · 1483 阅读 · 0 评论 -
Python学习:深入理解迭代器和生成器
在第一次接触 Python 的时候,可能写过类似 for i in [2, 3, 5, 7, 11, 13]: print(i) 这样的语句。for in 语句理解起来很直观形象,比起 C++ 和 java 早期的 for (int i = 0; i < n; i ++) printf("%d\n", a[i]) 这样的语句,不知道简洁清晰到哪里去了。但是, Python 在处理 for in 语句的时候,具体发生了什么吗?什么样的对象可以被 for in 来枚举呢?一、容器、可迭代对象和迭代器原创 2020-09-13 16:08:34 · 1441 阅读 · 2 评论 -
Python学习:强大的装饰器
装饰器(Decorators)是 Python 的一个重要部分。简单地说:他们是修改其他函数的功能的函数。他们有助于让我们的代码更简短,也更Pythonic(Python范儿)。因此,本博客主要学习函数装饰器的知识以及使用。函数->装饰器一、函数核心知识回顾引入装饰器之前,首先复习一下,必须掌握的函数的几个核心概念。可以学习:Python学习:自定义函数。第一点,在 Python 中,函数也是对象。我们可以把函数赋予变量,比如下面这段代码:def func(message): pri原创 2020-09-11 16:29:10 · 1094 阅读 · 2 评论 -
Python学习:Python中参数传递,是值传递,引用传递or其它
本博客主要学习python参数传递机制,了解python的参数是如何传递的。学过其它语言如(C,C++),都知道参数传递有值传递和引用传递,python的参数传递属于哪种?一、值传递和引用传递值传递(passl-by-value)过程中,被调函数的形式参数作为被调函数的局部变量处理,即在堆栈中开辟了内存空间以存放由主调函数放进来的实参的值,从而成为了实参的一个副本。值传递的特点是被调函数对形式参数的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值。(被调函数新开辟内存空间存放的是实参的副本值原创 2020-09-09 22:26:20 · 2176 阅读 · 0 评论 -
Python学习:Python对象的比较、拷贝
我们在写python代码时,经常用到 Python 对象比较和复制的语句,但语句背后发生了什么,总是不清楚。举一些我们用到的例子:判断a和b是否相等的例子:if a == b: ...两个列表之间的拷贝,l2 就是 l1 的拷贝。l1 = [1, 2, 3]l2 = list(l1)其中a == b是比较两个对象的值相等,还是两个对象完全相等呢?l2 是 l1 的浅拷贝(shallow copy)还是深度拷贝(deep copy)呢?一、比较’==’ VS ‘is’等于()原创 2020-09-08 15:01:22 · 1308 阅读 · 0 评论 -
Python学习:面向对象(下):实现一个搜索引擎
根据学到的面向对象的一些知识,然后模拟敏捷开发过程中的迭代开发流程,巩固面向对象的程序设计思想。从最简单最直接的搜索做起,一步步优化,但不可避免会介绍一些现代搜索引擎中的基础概念,例如语料(corpus)、倒序索引(inverted index)等。一、“高大上”的搜索引擎一个搜索引擎由搜索器、索引器、检索器和用户接口四个部分组成。搜索器,通俗来讲就是我们常提到的爬虫(scrawler),它能在互联网上大量爬取各类网站的内容,送给索引器。索引器拿到网页和内容后,会对内容进行处理,形成索引(index)原创 2020-09-06 17:16:05 · 1312 阅读 · 0 评论 -
Python学习:面向对象(上),你找到了吗?
Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的。本章节我们将详细介绍Python的面向对象编程。我们先来学习,面向对象编程中最基本的概念。一、面向对象基本概念我们先来看一段最基本的 Python 面向对象的应用代码,根据代码了解概念:class Document(): def __init__(self, title, author, context): print('init function called')原创 2020-09-05 19:02:12 · 2525 阅读 · 0 评论 -
Python学习:匿名函数,简约不简单
在Python中,除了常规函数,你应该也会在代码中见到一些“非常规”函数,它们往往很简短,就一行,并且有个很酷炫的名字——lambda,没错,这就是匿名函数。一、匿名函数基础首先,什么是匿名函数呢?以下是匿名函数的格式:lambda argument1, argument2,... argumentN : expression可以看到,匿名函数的关键字是 lambda,之后是一系列的参数,然后用冒号隔开,最后则是由这些参数组成的表达式。带参数的匿名函数:lambda x: x**3 #一个参原创 2020-09-04 16:26:22 · 2029 阅读 · 0 评论 -
Python学习:自定义函数,不可或缺
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。一、函数基础说白了,函数就是为了实现某一功能的代码段,只要写好以后,就可以重复利用。你可以定义一个由自己想要功能的函数,以下是简单的规则:函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。函数原创 2020-09-03 17:26:46 · 3130 阅读 · 0 评论 -
Python学习:异常处理,提高程序的稳定性
和其他语言一样,异常处理是 Python 中一种很常见,并且很重要的机制与代码规范。一、异常与错误通常来说,程序中的错误至少包括两种,一种是语法错误,另一种则是异常。所谓语法错误,也就是你写的代码不符合编程规范,无法被识别与执行,比如下面这个例子:if name is not None print(name)If 语句漏掉了冒号,不符合 Python 的语法规范,所以程序就会报错invalid syntax。而异常则是指程序的语法正确,也可以被执行,但在执行过程中遇到了错误,抛出了异常原创 2020-09-02 22:03:36 · 2949 阅读 · 0 评论 -
Python学习:条件和循环,基本功
在学习了列表、元祖、字典、集合和字符串等一系列 Python 的基本数据类型后,如何把这一个个基本的数据结构类型串接起来,就需要条件和循环了。一、条件语句Python 的条件语句,用法很简单。比如,想要表示 y=|x|这个函数,那么相应的代码便是:# y = |x|if x < 0: y = -xelse: y = x需要注意的是,在条件语句的末尾必须加上冒号(:),这是 Python 特定的语法规范。由于 Python 不支持 switch 语句,因此,当存在多个条件原创 2020-09-02 17:26:01 · 1721 阅读 · 0 评论 -
Python学习:输入输出--”黑箱“
本博客记录的是对Python输入输出的一个简单学习。一、输入输出基础最简单直接的输入来自键盘操作,如下:name = input('your name:')gender = input('you are a boy?(y/n)') ###### 输入 ######your name:zhuyou are a boy?ywelcome_str = 'Welcome to the matrix {prefix} {name}.'welcome_dic = { 'prefix': '原创 2020-09-01 18:59:26 · 1983 阅读 · 0 评论 -
Python学习:字符串的深入浅出
字符串是python很常见的一种数据类型,比如日志的打印,程序中函数的注释,数据库的访问,变量的操作都需要用到字符串。一、字符串基础字符串是由独立字符组成的一个序列,通常包含在单引号(’’)双引号("")或者三引号之中(’’’ ‘’'或""" “”",两者一样),比如下面几种写法。name = 'jason'city = 'beijing'text = "welcome to jike shijian"Python 中单引号、双引号和三引号的字符串是一模一样的,没有区别。s1 = 'hell原创 2020-09-01 11:10:54 · 1156 阅读 · 0 评论 -
Python学习:字典和集合,真的了解吗?
Python除了列表和元组还有两个很常见并且很有用的数据结构:字典(dict)和集合(set)。字典和集合在 Python 被广泛使用,并且性能进行了高度优化,故是非常重要的。注:笔记来源于景霄老师的Python核心技术和实战。一、字典和集合基础字典是一系列由键(key)和值(value)配对组成的元素的集合,在 Python3.7+,字典被确定为有序(注意:在 3.6 中,字典有序是一个 implementation detail,在 3.7 才正式成为语言特性,因此 3.6 中无法 100% 确保原创 2020-08-31 20:56:21 · 2209 阅读 · 0 评论 -
Python学习:列表和元组用哪一个?
对于每一门编程语言来说,数据结构都是其根基。Python 中最常见的两种数据结构:列表(list)和元组(tuple)。学习的知识来自景霄老师。一、列表和元组基础实际上,列表和元组,都是一个可以放置任意数据类型的有序集合。在绝大多数编程语言中,集合的数据类型必须一致。不过,对于 Python 的列表和元组来说,并无此要求:(我认为这是Python相对厉害的地方)l = [1, 2, 'hello', 'world'] # 列表中同时含有 int 和 string 类型的元素[1, 2, 'hel原创 2020-08-31 16:01:19 · 1387 阅读 · 0 评论