2016年5月16日

摘要: TCP是建立可靠连接,并且通信双方都可以以流的形式发送数据。相对TCP,UDP则是面向无连接的协议。 使用UDP协议时,不需要建立连接,只需要知道对方的IP地址和端口号,就可以直接发数据包。但是,能不能到达就不知道了。 虽然用UDP传输数据不可靠,但它的优点是和TCP比,速度快,对于不要求可靠到达的 阅读全文
posted @ 2016-05-16 17:47 邬兴亮 阅读(172) 评论(0) 推荐(0) 编辑
摘要: Socket是网络编程的一个抽象概念。通常我们用一个Socket表示“打开了一个网络链接”,而打开一个Socket需要知道目标计算机的IP地址和端口号,再指定协议类型即可。 客户端 大多数连接都是可靠的TCP连接。创建TCP连接时,主动发起连接的叫客户端,被动响应连接的叫服务器。 举个例子,当我们在 阅读全文
posted @ 2016-05-16 17:44 邬兴亮 阅读(193) 评论(0) 推荐(0) 编辑
摘要: 虽然大家现在对互联网很熟悉,但是计算机网络的出现比互联网要早很多。 计算机为了联网,就必须规定通信协议,早期的计算机网络,都是由各厂商自己规定一套协议,IBM、Apple和Microsoft都有各自的网络协议,互不兼容,这就好比一群人有的说英语,有的说中文,有的说德语,说同一种语言的人可以交流,不同 阅读全文
posted @ 2016-05-16 17:40 邬兴亮 阅读(209) 评论(0) 推荐(0) 编辑
摘要: Python支持多种图形界面的第三方库,包括: Tk wxWidgets Qt GTK Tk wxWidgets Qt GTK 等等。 但是Python自带的库是支持Tk的Tkinter,使用Tkinter,无需安装任何包,就可以直接使用。本章简单介绍如何使用Tkinter进行GUI编程。 Tkin 阅读全文
posted @ 2016-05-16 17:39 邬兴亮 阅读(406) 评论(0) 推荐(0) 编辑
摘要: 在开发Python应用程序的时候,系统安装的Python3只有一个版本:3.4。所有第三方的包都会被pip安装到Python3的site-packages目录下。 如果我们要同时开发多个应用程序,那这些应用程序都会共用一个Python,就是安装在系统的Python 3。如果应用A需要jinja 2. 阅读全文
posted @ 2016-05-16 17:38 邬兴亮 阅读(506) 评论(0) 推荐(0) 编辑
摘要: PIL:Python Imaging Library,已经是Python平台事实上的图像处理标准库了。PIL功能非常强大,但API却非常简单易用。 由于PIL仅支持到Python 2.7,加上年久失修,于是一群志愿者在PIL的基础上创建了兼容的版本,名字叫Pillow,支持最新Python 3.x, 阅读全文
posted @ 2016-05-16 17:35 邬兴亮 阅读(434) 评论(0) 推荐(0) 编辑
摘要: urllib提供了一系列用于操作URL的功能。 Get urllib的request模块可以非常方便地抓取URL内容,也就是发送一个GET请求到指定的页面,然后返回HTTP的响应: 例如,对豆瓣的一个URLhttps://api.douban.com/v2/book/2129650进行抓取,并返回响 阅读全文
posted @ 2016-05-16 17:32 邬兴亮 阅读(343) 评论(0) 推荐(0) 编辑
摘要: 如果我们要编写一个搜索引擎,第一步是用爬虫把目标网站的页面抓下来,第二步就是解析该HTML页面,看看里面的内容到底是新闻、图片还是视频。 假设第一步已经完成了,第二步应该如何解析HTML呢? HTML本质上是XML的子集,但是HTML的语法没有XML那么严格,所以不能用标准的DOM或SAX来解析HT 阅读全文
posted @ 2016-05-16 17:27 邬兴亮 阅读(141) 评论(0) 推荐(0) 编辑
摘要: XML虽然比JSON复杂,在Web中应用也不如以前多了,不过仍有很多地方在用,所以,有必要了解如何操作XML。 DOM vs SAX 操作XML有两种方法:DOM和SAX。DOM会把整个XML读入内存,解析为树,因此占用内存大,解析慢,优点是可以任意遍历树的节点。SAX是流模式,边读边解析,占用内存 阅读全文
posted @ 2016-05-16 17:26 邬兴亮 阅读(199) 评论(0) 推荐(0) 编辑
摘要: Python的内建模块itertools提供了非常有用的用于操作迭代对象的函数。 首先,我们看看itertools提供的几个“无限”迭代器: 因为count()会创建一个无限的迭代器,所以上述代码会打印出自然数序列,根本停不下来,只能按Ctrl+C退出。 cycle()会把传入的一个序列无限重复下去 阅读全文
posted @ 2016-05-16 17:24 邬兴亮 阅读(124) 评论(0) 推荐(0) 编辑
摘要: Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等。 什么是摘要算法呢?摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。 举个例子,你写了一篇文章,内容是一个字符串'how to use python h 阅读全文
posted @ 2016-05-16 17:21 邬兴亮 阅读(135) 评论(0) 推荐(0) 编辑
摘要: 准确地讲,Python没有专门处理字节的数据类型。但由于str既是字符串,又可以表示字节,所以,字节数组=str。而在C语言中,我们可以很方便地用struct、union来处理字节,以及字节和int,float的转换。 在Python中,比方说要把一个32位无符号整数变成字节,也就是4个长度的byt 阅读全文
posted @ 2016-05-16 17:18 邬兴亮 阅读(216) 评论(0) 推荐(0) 编辑
摘要: Base64是一种用64个字符来表示任意二进制数据的方法。 用记事本打开exe、jpg、pdf这些文件时,我们都会看到一大堆乱码,因为二进制文件包含很多无法显示和打印的字符,所以,如果要让记事本这样的文本处理软件能处理二进制数据,就需要一个二进制到字符串的转换方法。Base64是一种最常见的二进制编 阅读全文
posted @ 2016-05-16 17:15 邬兴亮 阅读(241) 评论(0) 推荐(0) 编辑
摘要: collections是Python内建的一个集合模块,提供了许多有用的集合类。 namedtuple 我们知道tuple可以表示不变集合,例如,一个点的二维坐标就可以表示成: 但是,看到(1, 2),很难看出这个tuple是用来表示一个坐标的。 定义一个class又小题大做了,这时,namedtu 阅读全文
posted @ 2016-05-16 17:14 邬兴亮 阅读(178) 评论(0) 推荐(0) 编辑
摘要: datetime是Python处理日期和时间的标准库。 获取当前日期和时间 我们先看如何获取当前日期和时间: 注意到datetime是模块,datetime模块还包含一个datetime类,通过from datetime import datetime导入的才是datetime这个类。 如果仅导入i 阅读全文
posted @ 2016-05-16 17:10 邬兴亮 阅读(308) 评论(0) 推荐(0) 编辑
摘要: 字符串是编程时涉及到的最多的一种数据结构,对字符串进行操作的需求几乎无处不在。比如判断一个字符串是否是合法的Email地址,虽然可以编程提取@前后的子串,再分别判断是否是单词和域名,但这样做不但麻烦,而且代码难以复用。 正则表达式是一种用来匹配字符串的强有力的武器。它的设计思想是用一种描述性的语言来 阅读全文
posted @ 2016-05-16 17:05 邬兴亮 阅读(189) 评论(0) 推荐(0) 编辑
摘要: 在Thread和Process中,应当优选Process,因为Process更稳定,而且,Process可以分布到多台机器上,而Thread最多只能分布到同一台机器的多个CPU上。 Python的multiprocessing模块不但支持多进程,其中managers子模块还支持把多进程分布到多台机器 阅读全文
posted @ 2016-05-16 16:59 邬兴亮 阅读(187) 评论(0) 推荐(0) 编辑
摘要: 在多线程环境下,每个线程都有自己的数据。一个线程使用自己的局部变量比使用全局变量好,因为局部变量只有线程自己能看见,不会影响其他线程,而全局变量的修改必须加锁。 但是局部变量也有问题,就是在函数调用的时候,传递起来很麻烦: 每个函数一层一层调用都这么传参数那还得了?用全局变量?也不行,因为每个线程处 阅读全文
posted @ 2016-05-16 16:56 邬兴亮 阅读(165) 评论(0) 推荐(0) 编辑
摘要: 多任务可以由多进程完成,也可以由一个进程内的多线程完成。 我们前面提到了进程是由若干线程组成的,一个进程至少有一个线程。 由于线程是操作系统直接支持的执行单元,因此,高级语言通常都内置多线程的支持,Python也不例外,并且,Python的线程是真正的Posix Thread,而不是模拟出来的线程。 阅读全文
posted @ 2016-05-16 16:54 邬兴亮 阅读(196) 评论(0) 推荐(0) 编辑

导航