Annie's Blog


Python中的默认参数值

Problem 今天在写代码时,踩了一个坑,问题复现如下: class ipNode(object): def __init__(self, name, children={}): self.name = name self.children = children 以上代码定义了一个ipNode类,其中的实例变量children被赋予了默认值,但是在后续的处理中发现,不同的...

Python并发--Event Loop & Coroutine

Event Loop 实现并发,可以采用多线程/多进程方式,但是多线程/多进程有可能引起其它问题(如:数据同步,竞争条件,上下文切换的开销等)。 那么除了多线程/进程外,还有哪些实现并发的方式?--event loop(即利用IO多路复用机制)。 首先,我们需要使用一个系统调用去轮询文件描述符(stdin) 查看是否有输入,根据不同的操作系统,有不同的系统调用如:poll, select,...

搜索引擎原理 -《数学之美》读书笔记

建立搜索引擎的步骤 建立一个搜索引擎需要通过三步: 下载:自动下载尽可能多的网页 索引:建立快速有效的索引 排序:根据相关性对网页进行公平准确的排序 爬虫 什么是爬虫 可以从任何一个网页出发,用图的遍历算法,自动访问到每一个网页并把它们存起来,这就是爬虫(其中,使用哈希表来记录网页是否下载过) 构建爬虫的工程要点 ...

动态规划-01背包问题

可以用动态规划求解的问题的特点 最优化问题 最优子结构性质:当问题的最优解包含了其子问题的最优解时,成该问题具有最优子结构性质 重叠子问题:每次产生的子问题并不总是新问题,有些子问题被反复计算多次 满足以上两个特点的问题可考虑用动态规划求解 例子1 背包问题 问题 给定n种物品和一背包,物品i的重量是Wi,其价值为Vi,背包的容量为C...

Hash Table (Dictionary Implementation in Python)

Python中字典的内部实现是Hash Table 建立Hash Table 字典实际上是一个hash table,而hash table实际上是一个数组 Hash Table实际上是一个数组,数组中存放着键值对(Key Value Pairs),数组的下标则是由键(Key)通过hash函数算出来的一个整数 一个空字典是一个长度为8的数组(这个数组拥有连续的内存地址) 将键(Key...

Python中的全局变量

外部的不可变数据对象 对于外部的不可变数据对象,你的函数里如果只使用到了它的值,而没有对其赋值的话,就不需要声明global。相反,如果你对其赋了值的话,那么你就需要声明global。声明global的话,就表示你是在向一个全局变量赋值,而不是在向一个局部变量赋值(否则会被认为是在向局部变量赋值) 外部的可变数据对象 对于外部的可变数据对象,无论你的函数是使用它还是对它赋值,都不需要声明g...

Python中的变量赋值和函数参数传递特性

动态特性:引用与对象分离 python会缓存整数和短小字符 变量赋值 在其他语言中,对一个变量赋值可以看作是把对象放到该变量所代表的盒子中(即将对象放到该变量所申请的内存空间中),如 a=1: 此时,盒子”a”装有整数1 当把另外一个对象赋值给同一个变量,将会替换到盒子中原来的内容(即将另一个对象放到原变量申请的内存空间中(新对象替换旧对象)), 如 a=2: 此时...

Python 单线程/多线程/多进程 爬虫的比较

写了一个爬虫爬取拉勾网的数据,用了单线程,多线程,和多进程三种方式 我用这三种方式爬取了部分数据,比较了一下三者的爬取速度,结果如下: 单线程爬虫 多线程爬虫 多进程爬虫 可见 单线程用时 > 多线程用时 > 多进程用时 1.多进程爬虫效果 优于 多线程爬虫效果 优于 单线程爬虫效果 2.多线程的效果虽然由于CPython有GIL的...

Python中的可哈希对象

字典(dictionary)的key 和 集合(set)的元素 都必须是可哈希的(hashable) 不可哈希(unhashable)的数据类型: list: 可用tule代替 set: 可用frozenset 代替 dictionary: 暂时没有较好的替代者, 不过可以自己写一个可哈希的字典, 如下: class h...

Python Peewee Select Length

参考:http://stackoverflow.com/questions/31694616/how-to-get-peewee-result-length result = Job.select().where(Job.position_name == ‘python’) result_num = result.count() vs result_num = len(list(resu...

OperationalError: (2006, 'MySQL server has gone away')

解决办法 找到my.cnf文件 我的my.cnf文件在: /usr/local/opt/mysql 将max_allowed_packet值增大: [mysqld] max_allowed_packet=256M

socket.error: [Errno 48] Address already in use

报错原因 曾启动过相同或者类似的服务占用了这个端口,一般来讲,在Mac上直接用Python启动的话,会导致退出不完整,你不能通过点击GUI的“退出”按钮来一步到位,后台的Python进程还是存在的,而它就是一直占用端口不释放的元凶 解决办法 找到占用这个端口的进程 查看当前python进程: ps aux | grep python 杀掉进程: sudo kill [进程号]