python核心编程,我们来讲讲python的数据类型【10bet手机官网】
分类:高并发

python核心编程——python对象

一、什么是python对象

在python中,构造的任何类型的值都是一个对象。比如一个整数类型的值,一个字符串,一个列表等,都可以看做是对象。

所有的对象分为三部分:

(1)身份。每个对象都有个标识自己的id。可用内建函数id()查看

(2)类型。可用type()查看

(3)值。对象用来存放数据,当然其最主要的数据就是它的值。

 

二、标准类型

数字,整型,布尔型,长整型,浮点型,复数性,字符串,列表,元组,字典,模块,类

 

三、切片对象

步进切片,多维切片

(1)步进切片sequence[起始索引:结束索引:步进值]

 

>>> list1 = [1,2,3,4,5,6,7,8]
>>> list1[0:7:2]
[1, 3, 5, 7]

(2)多维切片 sequence[star1:end1,start2:end2]

 

 

四、标准类型内建函数

(1)type()返回类型

(2)cmp(a,b)如果a>b,则返回正整数,如果a< p=""> <>

(3)str()转换为字符类型

 

五、类型工厂

int(),long,float()。。。。

 

 

 

 

 

 

一、什么是python对象 在python中,构造的任何类型的值都是一个对象。比如一个整数类型的值,一个字符串,一...

Python的数据类型

4.1 对象

三个特性:身份、类型、值

2015/8/28 Python基础(2):对象,2015python

Python用对象模型来存储数据。构造任何类型的值都是一个对象。
Python对象都有是三个特性:身份,类型和值

身份是每个对象的唯一身份标识。任何对象都可以用内建函数id()来得到身份。如:

>>> s = 1
>>> id(s)
38249176

身份可以认为是该对象的地址。

类型是数据以何种方式保存,可以进行怎样的操作,遵循怎样的规则。可以使用内建函数type()来查看。

值就是对象的数据项。

上面三个特性在对象创建时被赋值,除值以外其他特性都是只读。对象的类型是可以改变的,但对于初学者不建议这么做

Python是用点标记法来访问属性的,属性包括对象的名字等等,最常用的属性是函数和方法,不过有一些也有数据属性。含有数据属性的对象包括(不限于):类、类实例、模块、复数和文件

Python的标准类型有:数字、整型、布尔、长整型、浮点、复数、字符串、列表、元组和字典。同时还有如下内建类型:类型(对,类型本身是一种类型)、Null对象、文件、集合、函数/方法、模块、类。

类型也是一种对象,因为对象的一系列固有行为和特性需要事先定义,我们用类型这种对象来保存这些信息。
用内建函数type()可以得到特定对象的类型信息

>>> type(7)
<type 'int'>

这里输出了<type 'int'>,其实并不是简单告诉这是一个整数这样的字符串,而是一个类型对象,这个对象会输出一个字符串来告诉你他是一个对象。我们可以这样测试它

>>> type(type(7))

如果这只是一个字符串,它会显示<type 'str'>如果是对象类型,它会显示<type 'type'>

结果是

>>> type(type(7))
<type 'type'>

 

None,Null对象

这是一个特殊的类型,它只有一个值是None,类似于C的void,没有任何内建方法,没有有用的属性,布尔值总是False

 

同时还有一些用类实现的内部类型,这里暂不赘述。

标准类型运算符
对象值的比较
比较运算符来判断同类型的对象是否相等,返回True或False。运算符有== 、<= 、 >=。多个比较可以在同一行里进行,这一点和C不同。比较的顺序式从左到右

>>> 3 < 4 < 5
True
>>> 3 < 5 < 4
False

大多数语言中会写成这种形式

>>> 3 < 4 and 4 < 5
True
>>> 3 < 5 and 5 < 4
False

同时,可以用如下的写法,数学中一般不写

>>> 3 < 5 > 4
True

 

对象身份的比较
这是对值比较的补充,Python也支持对象本身的比较。
用的是如下的语句

a is b

它是用于比较a、b两个变量是否是指向同样的对象的。和a == b不相同。

a is b等价于
id(a) == id(b)
有如下的代码

>>> foo1 = 2.0
>>> foo2 = 1.0 + 1.0
>>> foo1 == foo2
True
>>> foo1 is foo2
False
>>> foo1 = 2.0
>>> foo2 = 2.0
>>> foo1 is foo2
False
>>> foo2 = foo1
>>> foo1 is foo2
True
>>> foo3 = 2
>>> foo4 = 1 + 1
>>> foo3 is foo4
True

这里可以看到foo1和foo2的值是相等的,但它们身份不相等。也就是说并不是来自同一个引用。说明在内部存储它们时,是各自创建了两个对象然后引用的。

然后还能看到,当我同时给foo1和foo2赋值2.0后,它们并不相等。是创造了两个对象,只有将foo1直接赋值给foo2才能使它们指向同一个对象。
从此可以理解Python内部的赋值方式,每一个值进行新对象创造再引用给变量。
但是,如果是对整数,结果就不同。书里说明:
整数对象和字符串对象是不可变对象,所以Python 会很高效的缓存它们。这会造成我们认为Python 应该创建新对象时,它却没有创建新对象的假象。
也就是说,整型和浮点型出现不同的缘故是因为Python高效地缓存了它们。不过这个缓存是有范围的,一定要小心使用。

 

标准类型内建函数
函数 功能
cmp(obj1, obj2)  比较 obj1 和 obj2, 根据比较结果返回整数 i:
       i < 0 if obj1 < obj2
       i > 0 if obj1 > obj2
       i == 0 if obj1 == obj2
repr(obj) 或 `obj` 返回一个对象的字符串表示
str(obj) 返回对象适合可读性好的字符串表示
type(obj) 得到一个对象的类型,并返回相应的type 对象

 

repr()返回的是一个对象的“官方”字符串表示, 也就是说绝大多数情况下可以通过求值运算(使用eval()内建函数)重新得到该对象,但str()则有所不同。str() 致力于生成一个对象的可读性好的字符串表示,它的返回结果通常无法用于eval()求值, 但很适合用于 print 语句输出。也就是说 repr() 输出对 Python 比较友好, 而str()的输出对人比较友好。虽然如此,很多情况下这三者的输出仍然都是完全一样的。所谓的对Python友好和对人友好将会在数值这一部分中提到。

类型工厂函数
Python2.2统一了类型和类,所有的类型也都是类,原来的内建转换函数如type(),int()都成了工厂函数,也就是说虽然看上去像函数,但实际上是类。调用时是生成了一个类型的实例。
关于类部分,由于本人学习的C语言里没有过多涉及,等到学习到类部分再做笔记。

存储模型里,
有存储一个或多个值的标量/原子类型,如数值和字符串。
有容器类型,如列表、元组、字典。
因为Python没有char类型,所以字符串是一个自我包含的文字类型,不是C中和数组相同的情况。

更新模型,
对象创建后,可以更新值的是更新模型,不允许更改的是不可变对象。列表和字典是可变模型,数字、字符串、元组是不可变模型。
这里面存在理解偏差,数值和字符串变量可换,但对象不可更新,每次变换是重新创造了对象。
也就是说每次变换后id()的值都会发生变化。而字典和列表,改变值本身,id()始终不变。

访问模型,
这种分类是区分数据类型的首要类型。按照访问我们存储的数据的方式来分类。有三种访问方式:直接存取、顺序、映射。
直接存取 数字
顺序访问 字符串、列表、元组
映射访问 字典
直接存取不赘述,顺序访问的是序列类型,就是元素从0开始索引顺序访问,一次可以访问一个或者多个元素。
映射类型类似序列类型的索引属性,但不适用地址偏移量取值,元素是无序存放的,通过一个唯一的key来访问。是键-值集合

分类数据类型的原因一是,Python提供的高级数据,我们要将原始的类型和功能强大的扩展类型区分开,所以需要了解分类。二是帮助我们搞清每种类型的特点。
通过不同方面来分类的原因是这些数据结构本身的关系是复杂的,需要我们多次分清晰脉络,让我们对类型了解更深。

Python没有的类型
char或byte。Python没有8位的整数。可以用长度为1的字符串替代。
指针。Python帮助程序员管理内存,所以不用访问指针。通过id()得到的值很接近地址,但是不能操作,所以指针也就没有用。
没有短整长整的区别,让程序员更专注于该干的事。
也没有单双精度的浮点类型。让事情更简单。

Python基础(2):对象,2015python Python用对象模型来存储数据。构造任何类型的值都是一个对象。 Python对象都有是三个特性:身份,类型...

标准类型
  • Integer整型 0
  • Boolean布尔型 False
  • Long integer长整型 0L
  • Floating point real number浮点型 0.0
  • Complex number复数型 0.0+0.0j
  • String字符串 ""
  • List列表 []
  • Tuple元祖 ()
  • Dictionary字典 {}

身份:

每个对象都有唯一的身份来标识自己,使用内建函数id()得到。

例子

#!/usr/bin/env python
#coding:utf-8

a=32;
print a
b = a ;
print id(a),id(b)
其他内建类型
  • 类型(type)
  • Null对象(None)
  • 文件
  • 集合/固定集合
  • 函数/方法
  • 模块

结果:

D:python27python.exe E:/workp/python/ex4.py
32
36402460 36402460
内部类型
  • 代码
  • 跟踪记录
  • 切片
  • 省略
  • Xrange

类型:

决定了该对象可以保存什么类型的值,可以进行什么样的操作,遵循什么样的规则。用内建函数type()查看。类型也是对象

#!/usr/bin/env python
#coding:utf-8

a=32;
print a
b = a ;
print id(a),id(b)
c=type(a)
d=type(id(a))
e=id(d) #类型也是对象
print c,d,e

标准类型——Integer 整型 和Long integer长整型

整型: -2147483648 ~ 21474836487 (32bit机器上)
2^64次方 (这个和java和C不太一样,对于java和C来说整型不管是32bit还是64bit都只占用4个字节)
长整型:不管是32bit还是64bit,他的长度只取决于机器支持的虚拟内存的大小

结果:

D:python27python.exe E:/workp/python/ex4.py
32
37188892 37188892
<type 'int'> <type 'int'> 505557880

标准类型——双精度浮点型

python里面没有float类型,python认为float类型的性价比不高,所以只支持double类型,如果需要使用精确的浮点型可以引用decimal模块。
每个浮点型占用8个字节,11位用于表示指数,1位用于表示符号,52位用于表示底

值:

对象表示的数据项

标准类型——复数

复数由一个实数和一个虚数组成
python里面的复数是这样表示的:

  • 虚数不能单独存在,他们总是和一个值为0.0的实数部分一起来构成一个复数
  • 复数由实数部分和虚数部分构成
  • 表示虚数的语法:real + imagj
  • 实数部分和虚数部分都是浮点型
  • 虚数部分必须有后缀 j或者J
    复数的内建属性
    conjugate()获得该复数的共轭复数对象
    | 属性| 描述|
    | -- |:--:|
    | num.real | 实数 |
    | num.imag | 虚数 |
    | num.conjugate() | 返回该复数的共轭复数 |

4.2 标准类型

  • 数字
  • 整型
  • 布尔型
  • 长整型
  • 浮点型
  • 复数型
  • 字符串
  • 列表
  • 元组
  • 字典

标准类型——Boolean布尔型

操作符 功能
not expr 逻辑非
expr and expr 逻辑与
expr or expr 逻辑或

4.3 其他内建类型

  • 类型
  • Null 对象(None)
  • 文件
  • 集合/固定集合
  • 函数/方法
  • 模块

其他内建类型——类型(type)

类型是保存对象一系列固有行为和特性的类型,所以python里面讲类型也定义成了对象。
我们可以通过type()函数得到特定的对象的类型信息
exp:type(54)
type(type(54))
类型对象的类型是所有python类型的根和所有python标准类的默认元类。

4.3.1 类型对象和type类型对象

type() 得到特定对象的类型信息

例子

#!/usr/bin/env python
#coding:utf8
a=12
print type(a)
print type(type(a)) #类型对象的类型

其他内建类型——Null对象(None)

None不支持任何运算,也没有任何的内建方法。通C语言里面的Null值。

结果:

<type 'int'>
<type 'type'>

内部类型——代码

代码对象是编译后的pyhton代码片段,是可执行对象,通过调用内部函数complie()可以得到代码对象,代码对象可以被exec命令或者eval()内建函数执行。
代码对象其实是函数的一个属性,函数出了有代码对象的属性之外还有一些其他函数必须的属性(包括函数名,文档字符串,默认参数,以及全局命名空间等等)

4.4 切片对象

  • 步进切片、多维切片、省略切片
  • 多维切片:sequence[start1:end1,start2:end2] 或 sequence[...,start1:end1]

例子

#!/usr/bin/env python
#coding:utf8
foostr='abcde'
print foostr[::-1] #颠倒
print foostr[1::-1] #起始为1,步长为-1,逆向
print foostr[::-2] #逆向,步长为2

内部类型——帧

帧对象代表Python的执行栈帧,帧对象包含python解释器在运行时所需要知道的全部信息,他的属性包括向上一帧的链接,正在被执行的代码对象,以及本地和全局名称空间字典及当前指令等。每次函数调用都会产生一个新的帧,每一个帧对象都会相应的创建一个C栈帧。用到帧对象的一个地方是跟踪记录对象。

结果:

edcba
ba
eca

内部类型——跟踪记录

当异常发生的时候,一个包含针对异常的栈跟踪信息的跟踪记录对象会被创建,如果异常有自己的处理程序,处理程序就会访问并记录这个对象。

函数

内部类型——切片对象

当使用python语法的时候,就会创建切片对象,扩展的切片语法允许对不同的索引切片操作,包括进步切片,多维切片和省略切片。
多维切片的语法 sequence[ start1 : end1 , start2 , end2 ]
省略切片语法 sequence[..., start1,end1]
切片对象也可以使用内建函数slice()来生成,步进切片允许利用第三个切片元素来进行步进切片
步进切片语法sequence[start1,end1,step]

xrange与range比较

1、 输出

a=xrange(0,8,2)
b=range(0,8,2)
print a,b

内部类型——省略

省略对象用于扩展切片语法,起到记号的作用,这个对象在切片语法中表示省略号。类似Null对象None,省略对象有一个唯一的名字Ellipsis,他的布尔值始终未空。

结果:

xrange(0, 8, 2) [0, 2, 4, 6]

c=list(xrange(0,8,2))
print c

内部类型——XRange

调用内建函数xrange()会生成一个XRange对象,xrange()函数和range()函数类似,用于节省内存使用或range()无法完成的超大数据场合。

结果:

[0, 2, 4, 6]

2、for

for i in xrange(6):
    print i,

for j in range(6):
    print j,

python数据类型的一些通用的方法

  1. 对象值比较
    操作符
    == 等于
    != 不等于
    <> 不等于
    < 小于
    <= 小于等于
    /> 大于
    />= 大于等于

  2. 对象身份比较(is)
    操作符
    obj1 is obj2 obj1和obj2是同一个对象
    obj1 is not obj2 obj1和obj2不是同一个对象
    EXP:

a = b = 2
a is b (True)
a is not b (False)

  1. 标准类型内建函数
    | 函数| 功能|
    | -- |:--:|
    | cmp(obj1,obj2) | 根据结果返回整型i |
    | repr(obj) | 返回一个对象的字符串表示 |
    | str(obj) | 返回对象合适可读性好的字符串表示 |
    | type(obj) | 得到一个对象的类型 |
    内建函数里面,str() repr() 和反引号操作符可以将对象的内容、类型、数值属性等转换成字符串
    repr和反引号操作可以通过eval()重新得到对象,str()无法用eval得到对象
    obj == eval(repr(obj))

4、type()和isinstance()

结果:

0 1 2 3 4 5 
0 1 2 3 4 5

3、输出的类型

print type(i),type(j)

结果:

<type 'int'> <type 'int'>

xrange每次返回一个值,有大量数据时使用xrange比range好

4.5.3 布尔类型

  • 标准运算符
    not and or

4.6 标准内建函数

cmp(i,j)   
i<j  -1
i>j  1
i=j  0

a=3
b=2
print cmp(a,b)

结果:

1
  • repr() 返回一个对象的字符串表示
a=324
print type(a)

结果:

<type 'int'>

访问模式

10bet手机官网 1

这里写图片描述

本文由10bet手机官网发布于高并发,转载请注明出处:python核心编程,我们来讲讲python的数据类型【10bet手机官网】

上一篇:python访问mysql数据库的实现方法,python脚本内运行linux命令的方法 下一篇:没有了
猜你喜欢
热门排行
精彩图文