Python
文章平均质量分 74
gqtcgq
这个作者很懒,什么都没留下…
展开
-
Python深入:super函数
新式类中最酷的,或者也是最不平常的特性之一,可能就是编写“cooperative类”。‘cooperative类’通过多继承,使用我称之为‘cooperative super call’的模式。 先来看一下传统的,非cooperative super call的特点:当类C继承了基类B时,C希望覆盖定义在B中的一个方法m,当在C中定义的方法m中,调用了B中定义的m方法时,一个su翻译 2015-06-12 14:41:10 · 732 阅读 · 0 评论 -
Python基础:04映射类型
映射类型 字典是Python语言中唯一的映射类型。一个字典对象是可变的,它是一个容器类型,能存储任意个数的Python对象。字典中的数据是无序排列的。 映射类型也可被称做哈希表,哈希表的算法是获取键,对键执行一个叫做哈希函数的操作,并根据计算的结果,选择在数据结构的某个地址中来存储值。任何一个值存储的地址皆取决于它的键。正因为这种随意性,哈希表中的值是没有顺序的原创 2015-05-28 09:23:58 · 2063 阅读 · 0 评论 -
Python基础:00概述
1:续行符 在Python中,一般是一行一个语句。一个过长的语句可以使用反斜杠( \ )分解成几行。 有两种例外情况,一个语句不使用反斜线也可以跨行。在使用闭合操作符时,单一语句可以跨多行,例如:在含有小括号、中括号、花括号时可以多行书写。另外就是三引号包括下的字符串也可以跨行书写。如下例:>>> alist = [1,... 2]>>> alist原创 2015-05-25 09:28:54 · 643 阅读 · 0 评论 -
Python基础:02数字
1:Python标准整数类型等价于C的(有符号)长整型。整数一般以十进制表示,但是Python也支持八进制或十六进制来表示整数。八进制整数以数字“0”开始, 十六进制整数则以“0x”或“0X”开始。 2:Python中的长整型和C或其它编译型语言的长整数不同。那些语言的长整数典型的取值范围是32位或64位。而Python的长整数类型能表达的数值仅仅与机器支持的(虚拟)内存大原创 2015-05-26 11:58:31 · 689 阅读 · 0 评论 -
Python基础:17类和实例之一
1:类通常在一个模块的顶层进行定义。对于Python来说,声明与定义类是同时进行的。 2:类属性仅与其类相绑定,类数据属性仅当需要有更加“静态”数据类型时才变得有用,这种属性是静态变量。它们表示这些数据是与它们所属的类绑定的,不依赖于任何类实例。类似于Java或C++中在一个变量声明前加上static 关键字。 3:方法,比如下面,类MyCl原创 2015-06-08 17:57:29 · 545 阅读 · 0 评论 -
Python基础:16面向对象概述
1:在版本2.2 中,Python社区最终统一了类型(type)和类(class),新式类具备更多高级的OOP特性,扮演了一个经典类(旧式类)超集的角色,后者是Python 诞生时所创造的类对象。 2:下面的示例展示了如何创建一个类:class MyNewObjectType(bases): 'define MyNewObjectTypeclas原创 2015-06-05 13:50:10 · 482 阅读 · 0 评论 -
Python基础:14生成器
yield表达式只用于定义生成器函数,且只能存在于函数的定义体中。只要一个函数内部使用了yield表达式,则该函数就成为生成器函数。 当调用生成器函数时,它返回一个称为生成器的迭代器。然后该生成器控制生成器函数的执行。当调用生成器的其中一个方法时,执行开始。此时,执行会行进到第一个yield表达式,在那里执行被挂起并返回一个值给生成器的调用者。挂起的意思是保存所有的局部状态原创 2015-06-04 11:44:29 · 623 阅读 · 0 评论 -
Python基础:13装饰器
装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的应用有插入日志、性能测试、事务处理等。装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数功能本身无关的雷同代码并继续重用。概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能。 1:装饰器实际就是函数。他们接受函数对象。对这些函数进行包装或修饰。因此,有了装饰器,可以在执行实际原创 2015-06-02 16:49:32 · 606 阅读 · 0 评论 -
Python基础:12函数细节
一:返回值 当没有显式地返回元素时,Python 会返回一个None。如果函数返回多个对象,python 把他们聚集起来并以一个元组返回。 二:创建函数 1:强烈推荐,在函数体之前,编写函数的文档字符串。 2:在某些语言中,函数声明和函数定义区分开的。但在Python中,将这两者视为一体,函数的子句由声明的标题行以及随后的定义体组成的。原创 2015-06-02 16:23:44 · 580 阅读 · 0 评论 -
Python基础:26模块
一:模块和文件 1:模块是逻辑上组织 Python 代码的方法,文件是物理层上组织模块的方法。因此,一个文件被看作是一个独立模块,一个模块也可以被看作是一个文件。 模块的文件名就是模块的名字加上扩展名 .py。 2:从基本概念来说,一个名称空间就是一个从名称到对象的关系映射集合。每个模块都定义了它自己的唯一的名称空间。所以,即使有两个模块中,有相同名称原创 2015-06-10 21:42:24 · 613 阅读 · 0 评论 -
Python基础:25文件
一:文件对象 文件对象不仅可以用来访问普通的磁盘文件, 而且也可以访问任何其它类型抽象层面上的"文件". 一旦设置了合适的"钩子", 你就可以访问具有文件类型接口的其它对象, 就好像访问的是普通文件一样。 二:内建函数 1:打开 open() 内建函数成功打开文件后时候会返回一个文件对象, 否则引发一个 IOError 异常。open(原创 2015-06-10 18:51:21 · 658 阅读 · 0 评论 -
Python基础:15私有化
默认情况下,属性在Python中都是“public”。 1:双下划线(__) Python为类元素(属性和方法)的私有性提供初步的形式。由双下划线开始的属性在运行时被“混淆”,所以直接访问是不允许的。实际上,会在名字前面加上下划线和类名。class pubpri(object): def__init__(self, num):原创 2015-06-05 09:15:10 · 1583 阅读 · 1 评论 -
Python深入:02浅拷贝深拷贝
对象赋值实际上是简单的对象引用。也就是说当你创建一个对象,然后把它赋给另一个变量的时候,Python并没有拷贝这个对象,而只是拷贝了这个对象的引用。 假设想创建一对小夫妻的通用档案,名为person。然后你分别为他俩拷贝一份。 在下面的例子中,我们展示了两种拷贝对象的方式,一种使用了切片操作,另一种用了工厂方法,为了区分出三个不同的对象,我们使用id()内建函数原创 2015-06-10 11:08:37 · 501 阅读 · 0 评论 -
Python基础:24with语句
一:with语句 在Python 2.6 中正式引入的with语句,是用来简化代码的。这与用try-except 和try-finally所想达到的目的前后呼应。try-except 和try-finally 的一种特定的配合用法是保证共享的资源的唯一分配,并在任务结束的时候释放它。比如文件(数据,日志,数据库等等),线程资源,简单同步,数据库连接,等等。 with 语句的目原创 2015-06-10 18:01:31 · 560 阅读 · 0 评论 -
Python基础:06条件和循环
1:条件表达式(三元操作符) Python 在很长的一段时间里没有条件表达式(C ? X : Y), 或称三元运算符。人们试着用 and 和 or 来模拟它, 但大多都是错误的。 根据 FAQ , 正确的方法(并不唯一)是:(C and [X] or [Y])[0]。 唯一的问题是社区不同意这样的语法。最后 Python 2.5 集成的语法确定为:X if原创 2015-05-30 08:59:22 · 517 阅读 · 0 评论 -
Python基础:05集合类型
集合类型 Python中,集合对象是一组无序排列的可哈希的值。所以集合成员可以做字典中的键。集合中的元素都是唯一的。 集合(sets)有两种不同的类型,可变集合(set)和 不可变集合(frozenset)。对可变集合(set),可以添加和删除元素,对不可变集合(frozenset)则不允许这样做。 请注意,可变集合(set)不是可哈希的,原创 2015-05-29 09:26:35 · 462 阅读 · 0 评论 -
Python基础:01Python标准类型分类
有三种不同的模式可以帮助我们对基本类型进行分类,每种模型都展示了这些类型之间的相互关系。 一:存储模式 这种分类模式,看这种类型的对象能保存多少个对象。 一个能保存单个字面对象的类型称为原子或标量存储,那些可容纳多个对象的类型,称之为容器存储。 容器类型又带来一个新问题,那就是它是否可以容纳不同类型的对象。所有的Python容器对象都能原创 2015-05-29 20:04:27 · 800 阅读 · 0 评论 -
Python基础:03序列:字符串、列表和元组
一:序列 1:连接操作符(+) 这个操作符允许把一个序列和另一个相同类型的序列做连接,生成新的序列。语法如下:sequence1 + sequence2 该表达式的结果是一个包含sequence1和sequence2 的内容的新序列。 注意,这个操作不是合并操作中最快或者说最有效的。对字符串来说,这个操作不如把所有的子字符原创 2015-05-27 08:55:53 · 684 阅读 · 0 评论 -
Python基础:18类和实例之二
1:绑定和非绑定 当存在一个实例时,方法才被认为是绑定到那个实例了。没有实例时方法就是未绑定的。在很多情况下,调用的都是一个绑定的方法。 调用非绑定方法并不经常用到,其中一个主要的场景是:派生一个子类,而且要覆盖父类的方法,这时需要调用那个父类中被覆盖掉的构造方法:class EmplAddrBookEntry(AddrBookEntry):原创 2015-06-08 20:25:39 · 636 阅读 · 0 评论 -
Python基础:11变量作用域和闭包
一:变量作用域 变量可以是局部域或者全局域。定义在函数内的变量有局部作用域,在一个模块中最高级别的变量有全局作用域。 全局变量的一个特征是除非被删除掉,否则它们的存活到脚本运行结束,且对于所有的函数,他们的值都是可以被访问的。然而局部变量,仅仅只依赖于定义它们的函数现阶段是否处于活动。 在Python中,变量查找遵循LGB原则,即优先在局原创 2015-06-02 16:03:32 · 1616 阅读 · 0 评论 -
Python基础:10函数参数
局部命名空间为各个参数值创建了一个名字,一旦函数开始执行,就能访问这个名字了。 在函数调用时,有非关键字参数和关键字参数之分,非关键字参数必须位于关键字参数之前。 在函数定义时,严格的顺序是:位置参数,默认参数,可变长元组,可变长字典。 一:调用函数时的参数 a:关键字参数 关键字参数的概念仅仅针对函数的调用。这种理念原创 2015-05-31 18:53:52 · 1522 阅读 · 0 评论 -
Python基础:28正则表达式
一:概述 正则表达式(RE)为高级文本模式匹配,以及搜索-替代等功能提供了基础。正则表达式(RE)是一些由字符和特殊符号组成的字符串,它们能匹配多个字符串。Python通过标准库的re模块支持正则表达式。 在Python中,有两种主要方法完成模式匹配:搜索(searching)和匹配(matching)。搜索是在字符串任意部分中查找匹配的模式;而匹配是指判断一个原创 2015-07-15 23:26:28 · 794 阅读 · 0 评论 -
Python深入:setuptools简介
Setuptools是Python Distutils的加强版,使开发者构建和发布Python包更加容易,特别是当包依赖于其他包时。用setuptools构建和发布的包与用Distutils发布的包是类似的。包的使用者无需安装setuptools就可以使用该包。如果用户是从源码包开始构建,并且没有安装过setuptools的话,则只要在你的setup脚本中包含一个bootstrap模块(ez_se原创 2015-10-30 23:27:13 · 12111 阅读 · 0 评论 -
OpenStack Nova启动实例流程
1、概述 启动一个新的实例,会涉及到OpenStackNova中的多个组件:API服务器,接收用户端的请求,并且将其传递给云控制器。云控制器,处理计算节点、网络控制器、API服务器和调度器之前的通信。调度器,选择一个执行命令的主机。计算节点,管理计算实例:启动/终止实例,添加/删除卷…网络控制器,管理网络资源:分配固定IP地址,配置VLAN翻译 2015-09-29 18:04:21 · 3080 阅读 · 0 评论 -
Python深入:Distutils安装包
一:简介 尽管Python标准库已经支持很多的功能,但是有时还是会需要以第三方模块的形式添加新的功能到Python中。 在最简单的场景中,是你要安装的模块,已经有了针对你的平台的安装版本,因此只需要像安装其他软件一样安装他们即可。比如针对Windows用户的安装程序,针对基于RPM的Linux用户的RPM包等等。这种情况,只需要将该安装包下载下来,直接安装即原创 2015-10-23 21:04:57 · 13620 阅读 · 0 评论 -
Python深入:修改Python搜索路径
当Python执行import语句时,它会在一些路径中搜索Python模块和扩展模块。可以通过sys.path查看这些路径,比如:>>> import sys>>> sys.path['', '/usr/lib/python2.7/site-packages/demo_nova_hooks-5-py2.7.egg', '/usr/lib64/python27.zip', '/usr/lib原创 2015-10-23 20:44:40 · 24623 阅读 · 0 评论 -
Python深入:Distutils发布Python模块
Distutils可以用来在Python环境中构建和安装额外的模块。新的模块可以是纯Python的,也可以是用C/C++写的扩展模块,或者可以是Python包,包中包含了由C和Python编写的模块。 一:Distutils简介1.1概念和术语 对于模块开发者以及需要安装模块的使用者来说,Distutils的使用都很简单,作为一个开发者,除了编写源码之外,还需要:原创 2015-10-19 22:30:52 · 27220 阅读 · 5 评论 -
Python深入:stevedore简介
stevedore是用来实现动态加载代码的开源模块。它是在OpenStack中用来加载插件的公共模块。可以独立于OpenStack而安装使用:https://pypi.python.org/pypi/stevedore/ stevedore使用setuptools的entry points来定义并加载插件。entry point引用的是定义在模块中的对象,比如类、函数、实原创 2015-11-03 18:56:31 · 8200 阅读 · 2 评论 -
Python深入:编码问题总结
一:字符编码简介 1:ASCII 最初的计算机的使用是在美国,所用到的字符也就是现在键盘上的一些符号和少数儿个特殊的符号,一个字节所就能足以容纳所有的这些字符,实际上表示这些字符的字节最高位都为0,也就是说这些字节都在0到127之间,如字符a对应数字97。这套编码规则被称为ASCII(美国标准信息交换码)。 2:GBK、GB2312原创 2015-07-26 16:15:55 · 19716 阅读 · 1 评论 -
Python基础:常用函数
1:enumerateenumerate(sequence, start=0) 该函数返回一个enumerate对象(一个迭代器)。其中的sequence参数可以是序列、迭代器或者支持迭代的其他对象。该函数返回一个迭代器,其中的next方法返回一个元组,该元组包含从sequence获取的值,以及一个计数值(从start参数开始,该参数默认为0)。该函数的实现类似下面的代码:原创 2015-06-12 14:37:14 · 805 阅读 · 0 评论 -
Python深入:01内存管理
在Python中,一切都是指针。 一:对象三特性 所有的Python对象都有三个特性:身份,类型和值。 身份:每一个对象都有一个唯一的身份标识,任何对象的身份标识可以使用内建函数id()来得到。它可以被认为是该对象的内存地址。 类型:对象的类型决定了该对象可以保存什么类型的值,可以进行什么样的操作,以及遵循什么样的规则。可以用内建函数t原创 2015-06-09 08:14:43 · 764 阅读 · 0 评论 -
Python基础:09函数式编程
Python支持一些函数式编程的特性。比如lambda、 map()、reduce()、filter()函数。 一:匿名函数与lambda Python可以用lambda 关键字创造匿名函数。匿名函数不需要以标准的方式来声明(使用def 语句)。作为函数,它们也能有参数。 一个完整的lambda“语句”代表了一个表达式,这个表达式的定义体必须和声明放在同原创 2015-05-31 18:16:34 · 567 阅读 · 0 评论 -
Python基础:08列表解析与生成器表达式
一:列表解析 列表解析(List comprehensions,或缩略为 list comps )来自函数式编程语言Haskell 。它可以用来动态地创建列表。它在 Python 2.0 中被加入。 列表解析的语法: [expr foriter_var in iterable] 这个语句的核心是 for 循环,它迭代 itera原创 2015-05-30 10:09:13 · 1057 阅读 · 0 评论 -
Python基础:07迭代器
迭代器是在版本 2.2 被加入Python 的,它为类序列对象提供了一个类序列的接口。Python 的迭代无缝地支持序列对象,而且它还允许迭代非序列类型,包括用户定义的对象。它的出现,对列表迭代、字典迭代带来了性能上的增强。 迭代器用起来很灵巧,可以迭代不是序列但表现出序列行为的对象,例如字典的 key ,一个文件的行,等等。当你使用循环迭代一个对象条目时,你几乎不可能分辨出它是原创 2015-05-30 09:28:04 · 589 阅读 · 0 评论 -
Python基础:27执行环境
一:可调用对象 可调用对象,是任何能通过函数操作符“()”来调用的对象。Python 有4种可调用对象:函数,方法,类,以及一些类的实例。 1:函数 python 有 3 种不同类型的函数对象。 a:内建函数(BIFs),是用c/c++写的,编译过后放入python 解释器,然后把它们作为内建名字空间的一部分加载进系统。这原创 2015-06-10 22:21:04 · 1205 阅读 · 0 评论 -
Python基础:23异常
一:概述 1:错误 错误有语法和逻辑上的区别。语法错误指示软件的结构上有错误,导致不能被解释器解释或编译器无法编译。这些错误必须在程序执行前纠正。逻辑错误可能是由于不完整或是不合法的输入所致,还可能是逻辑上无法生成,计算,或是输出结果需要的过程无法执行。 当Python 检测到一个错误时,解释器就会指出当前流已经无法继续执行下去。这时候就出现了原创 2015-06-10 17:36:29 · 2006 阅读 · 0 评论 -
Python基础:22新式类
1:工厂函数 由于类型和类的统一,因而可以子类化Python数据类型。但是所有的Python 内建的转换函数现在都是工厂函数。当这些函数被调用时,你实际上是对相应的类型进行实例化。比如下面的函数都已经成为工厂函数:int(), long(), float(), complex(), str(), unicode(), list(), tuple(), type()。原创 2015-06-10 10:58:34 · 544 阅读 · 0 评论 -
Python基础:21包装
“包装”在Python 编程中经常会被提到的一个术语。意思是对一个已存在的对象进行包装,可以是对一个已存在的对象,增加,删除,或者修改功能。 可以包装任何类型(type)作为一个类(class)的核心成员,以使新对象的行为模仿你想要的数据类型中已存在的行为,并且去掉你不希望存在的行为。 授权是包装的一个特性,实现授权的关键点就是覆盖__getattr__(原创 2015-06-09 21:50:30 · 2641 阅读 · 2 评论 -
Python基础:20类的定制
类中有一些可自定义的特殊方法,它们中的一些有预定义的默认行为,而其它一些则没有,留到需要的时候去实现。这些特殊方法是Python中用来扩充类的强有力的方式。它们可以实现模拟标准类型和重载操作符等。比如__init__()和__del__()就分别充当了构造器和析够器的功能。 这些特殊这些方法都是以双下划线(__)开始及结尾的。下表进行了总结:基本定制型C.原创 2015-06-09 21:29:18 · 777 阅读 · 0 评论 -
Python基础:19类和实例的内建函数
1:issubclass() issubclass()布尔函数,判断一个类是否是另一个类的子类或子孙类。它有如下语法:issubclass(sub,sup) 这个函数也允许“不严格”的子类,意味着,一个类可视为其自身的子类,所以,这个函数如果当sub 就是sup,或者从sup 派生而来,则返回True。 从Python 2.3 开始,issub原创 2015-06-08 22:39:50 · 737 阅读 · 0 评论