随笔分类 - Python
摘要:什么是assert assert的语法: 例: 相当于 assert 在程序中的作用,是对代码做一些 internal 的 self-check。使用 assert,就表示你很确定。这个条件一定会发生或者一定不会发生。 注意:不能在使用assert时加上括号 assert(1 == 2, 'This
阅读全文
摘要:PEP 8 规范 PEP 是 Python Enhancement Proposal 的缩写,翻译过来叫“Python 增强规范”。 缩进规范 PEP 8 规范告诉我们,请选择四个空格的缩进,不要使用 Tab,更不要 Tab 和空格混着用。 第二个要注意的是,每行最大长度请限制在 79 个字符。 空
阅读全文
摘要:主要有以下两种代码规范 《8 号 Python 增强规范》(Python Enhacement Proposal #8),以下简称 PEP8; 《Google Python 风格规范》(Google Python Style Guide),以下简称 Google Style,这是源自 Google
阅读全文
摘要:垃圾回收是 Python 自带的机制,用于自动释放不会再用到的内存空间; 什么是内存泄漏呢? 内存泄漏,并不是说你的内存出现了信息安全问题,被恶意程序利用了,而是指程序本身没有设计好,导致程序未能释放已不再使用的内存。 内存泄漏也不是指你的内存在物理上消失了,而是意味着代码在分配了某段内存后,因为设
阅读全文
摘要:一个不解之谜 一段代码 可以看出,多线程并没有让上面代码变得更快,这是Python的问题? Python的线程,的的确确封装了底层操作系统线程。在Linux系统里是Pthread(全称为POSIXThread),而在Windows系统里是WindowsThread。 可以看出,多线程并没有让上面代码
阅读全文
摘要:什么是Asyncio 多线程有诸多优点且应用广泛,但也存在一定的局限性: 比如,多线程运行过程容易被打断,因此有可能出现 race condition 的情况;再如,线程切换本身存在一定的损耗,线程数不能无限增加,因此,如果I/O 操作非常 heavy,多线程很有可能满足不了高效率、高质量的需求。
阅读全文
摘要:区分并发和并行 并发(Concurrency). 由于Python 的解释器并不是线程安全的,为了解决由此带来的 race condition 等问题,Python 便引入了全局解释器锁,也就是同一时刻,只允许一个线程执行。当然,在执行 I/O 操作时,如果一个线程被 block 了,全局解释器锁便
阅读全文
摘要:从一个爬虫说起 Python 2 的时代使用生成器协程,Python 3.7 提供了新的基于 asyncio 和 async / await 的方法。先看一个简单的爬虫代码,爬虫的 scrawl_page 函数为休眠数秒,休眠时间取决于 url 最后的那个数字。 import time def cr
阅读全文
摘要:从容器、可迭代对象谈起 所有的容器都是可迭代的(iterable),迭代器提供了一个next方法。iter()返回一个迭代器,通过next()函数可以实现遍历。 除了数字外,其他数据结构都是可迭代的。 生成器是什么 生成器是懒人版本的迭代器。例: import os import psutil #显
阅读全文
摘要:metaclass 的超越变形特性有什么用? 来看yaml的实例: import yaml class Monster(yaml.YAMLObject): yaml_tag = u'!Monster' def __init__(self, name, hp, ac, attacks): self.n
阅读全文
摘要:函数 -> 装饰器 函数的4个核心概念 1.函数可以赋与变量 2.函数可以当作函数的参数 3.函数里嵌套函数 4.函数作为函数返回值(闭包) 简单装饰器 例 使用语法糖 @ 带有参数的装饰器 直接在 wrapper函数中加上参数 直接在 wrapper函数中加上参数 这个装饰器只能用在有一个参数的函
阅读全文
摘要:Python的变量及其赋值 Python的变量及其赋值 c/c++/c#/java 里面都有值传递,引用传递的概念,在Python中是如何的? 例 a = 1 b = a print(id(a),id(b)) #140723344823328 140723344823328 此时,变量a与变量b指向
阅读全文
摘要:"==" 与 is python 为 10 开辟内存空间, a与b同时指向这块内存,即a与b的值相等,a与b的id也相等.因此 a==b 与 a is b 都返回True: 在[-5,256]范围内的整数会有上面代码的性能优化,而不在这范围内的数字就会重新开辟内存空间。 【实验证明,下面代码只在终端
阅读全文
摘要:简单模块化 import 最好在最顶端 sys.path.append("..")表示把当前程序所在位置向上提了一级 [python 3.6 以上要加上 sys.path.extend([os.path.join(root, name) for root, dirs, _ in os.walk(".
阅读全文
摘要:实例 搜索引擎 一个搜索引擎由搜索器、索引器、检索器和用户接口四个部分组成 搜索器就是爬虫(scrawler),爬出的内容送给索引器生成索引(Index)存储在内部数据库。用户通过用户接口发出询问(query),询问解析后送达检索器,检索器高效检索后,将结果返回给用户。 以下5个文件为爬取的搜索样本
阅读全文
摘要:类,一群有着相同属性和函数的对象的集合 如果你不满足于只做一个+CRUD“码农”,而是想成为一个优秀的工程师,那就一定要积极锻炼直觉思考和快速类比的能力,其是在找不到bug的时候 类的示例: class Document(): def __init__(self, title, author, co
阅读全文
摘要:格式 与常规函数区别 匿名函数 lambda 和常规函数一样,返回的都是一个函数对象(function object) lambda 是一个表达式(expression),并不是一个语句(statement)。表达式是可以被求值,类似"公式"的代码,而语句是一段完成了某种功能的可执行代码。 所以,l
阅读全文
摘要:函数的形式: 和其他需要编译的语言(比如 C 语言)不一样的是,def 是可执行语句,这意味着函数直到被调用前,都是不存在的。当程序调用函数时,def 语句才会创建一个新的函数对象,并赋予其名字。 Python 是 dynamically typed ,对函数参数来说,可以接受任何数据类型,这种行为
阅读全文
摘要:如何处理异常 无论发生什么情况,finally block 中的语句都会被执行,哪怕前面的 try 和 excep block 中使用了 return 语句。 import sys try: f = open('file.txt', 'r') #.... # some data processing
阅读全文
摘要:条件语句 除了 boolean 类型的数据,条件判断最好是显性的 if i != 0: ... 而不是只写出变量名: if i: ... For循环与While循环 通常来说,如果你只是遍历一个已知的集合,找出满足条件的元素,并进行相应的操作,那么使用 for 循环更加简洁。 但如果你需要在满足某个
阅读全文
浙公网安备 33010602011771号