Fork me on GitHub
python核心 - 访问数据库

python核心 - 访问数据库

操作数据库是最常见的任务,这里用MySQL来做演示,也是我们用的最多的一个开源数据库,其他都类似的。 对于安装MySQL就不做介绍了,安装完后,还需要安装去驱动。因为需要支持Python的MySQL驱动来连接到MySQL服务器。 MySQL的驱动有多种实现,比如纯python实现的pymysql和mysql-connector,或者mysql-python也就是MySQLdb。 这里我通过mysql-connector来介绍使用方法: pip install mysql...

python核心 - 单元测试

python核心 - 单元测试

单元测试在所有编程语言中都不陌生,对于一个健壮的软件来讲单元测试是很有必要的, 并且“测试驱动开发”(TDD:Test-Driven Development)越来越受欢迎也说明了它的重要性。 单元测试一个最大的好处,就是确保一个程序模块的行为符合我们设计的测试用例。 在将来修改的时候,可以极大程度地保证该模块行为仍然是正确的。 基本用法我们通过一个例子来说明怎样写单元测试,先编写一个Dict类,它的行为和dic一致,但是可以通过属性来访问。 class Dict(dic...

python核心 - 异步IO

python核心 - 异步IO

由于CPU的速度远远快于磁盘、网络等IO,我们可选择使用多进程或多线程来并发执行代码。 然而系统不能无限制增加线程,而且切换线程开销也大,一旦线程数量过多,CPU花的时间主要在切换线程上,导致性能下降。 另外一种解决方案是异步IO,当代码需要执行一个耗时的IO操作时,它只发出IO指令,并不等待IO结果,然后就去执行其他代码了。 一段时间后,当IO返回结果时,再通知CPU进行处理。 异步IO模型需要一个消息循环,在消息循环中,主线程不断地重复“读取消息-处理消息”这一过程...

python核心 - IO编程

python核心 - IO编程

IO在计算机中指Input/Output,也就是输入和输出。由于程序和运行时数据是在内存中驻留, 由CPU这个超快的计算核心来执行,涉及到数据交换的地方,通常是磁盘、网络等,就需要IO接口。 通常,程序完成IO操作会有Input和Output两个数据流。当然也有只用一个的情况, 比如,从磁盘读取文件到内存,就只有Input操作,反过来,把数据写到磁盘文件里,就只是一个Output操作。 Stream(流)是一个很重要的概念,可以把流想象成一个水管,数据就是水管里的水,但...

python核心 - 并发编程

python核心 - 并发编程

现在是多核和并发时代,所以不管什么语言都要支持这个特性。并发是看上去同时执行,并行是在多核上同时执行。 我们先解释下线程和进程。简单来说,一个任务就是一个进程(Process)。 在一个进程内部,要同时干多件事,就需要同时运行多个进程内的“子任务”,这些子任务就叫线程(Thread) 线程是最小的执行单元,而进程由至少一个线程组成。如何调度进程和线程, 完全由操作系统决定,程序自己不能决定什么时候执行,执行多长时间。 多进程和多线程的程序涉及到同步、数据共享的问题,编写...

python核心 - 日期和时间

python核心 - 日期和时间

日期和时间是我们编程经常需要处理的事情,相比较其他语言,python中的日期和时间处理非常简洁。 datetime是python处理日期和时间的标准库。 python中有一个datetime模块,里面有个datetime类,这里大家先要弄清楚,很容易搞混。 所以我们获取当前日期和时间的代码如下: from datetime import datetime now = datetime.now() # 获取当前datetime print(now) print(type(...

python核心 - 正则表达式

python核心 - 正则表达式

字符串是编程时涉及到的最多的一种数据结构,对字符串进行操作的需求几乎无处不在。 正则表达式是一种用来匹配字符串的强有力的武器。它的设计思想是用一种描述性的语言来给字符串定义一个规则, 凡是符合规则的字符串,我们就认为它“匹配”了,否则,该字符串就是不合法的。 我们判断一个字符串是否是一个合法的电话号码分两步,首先创建一个符合电话号码规则的正则表达式, 然后用这个正则表达式来匹配这个字符串是否合法。 基础因为正则表达式也是用字符串表示,我们就要先学习如何用字符来描述字符。...

python核心 - 元类

python核心 - 元类

动态语言和静态语言最大的不同,就是函数和类的定义,不是编译时定义的,而是运行时动态创建的。我们在hello.py模块里定义一个Hello的 当Python解释器载入hello模块时,就会依次执行该模块的所有语句,执行结果就是动态创建出一个Hello的class对象。 我们说class的定义是运行时动态创建的,而创建class的方法就是使用type()函数。 type()函数既可以返回一个对象的类型,又可以创建出新的类型。 type函数比如,我们可以通过type()函数创...

python核心 - 面向对象编程

python核心 - 面向对象编程

面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想。 OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。 面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行。 为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低系统的复杂度。 而面向对象的程序设计把计算机程序视为一组对象的集合,而每个对象都可以接收其他对象发过来的消息, 并处理这些消息,计算机程...

python核心 - 装饰器

python核心 - 装饰器

python有着强大的表达式语法和函数特性,其中一个我的最爱便是装饰器。 在设计模式中,装饰器能够在不使用子类的情况下动态的修改函数、方法或类的功能。 当你需要扩展某个函数的功能却不想直接修改这个函数的时候,装饰器就可以派上用场了。 实现装饰器模式有很多种方法,但是python通过强大的语法支持来让这个变得相当容易。 在这篇文章中我将深入讲解Python的函数装饰器,并通过一系列的源码示例来彻底讲清楚这个东西。 所有例子都在Python2.7下运行通过,不过只需要稍作改...