Python对象类型
2019-02-04
蘭喆
蘭喆的生活
问题1:Python知识结构?
答:1、程序由模块构成;2、模块包含语句;3、语句包含表达式;4、表达式创建并处理对象。
问题2:Python中核心数据类型有哪些?
答:数字、字符串、列表、字典、元组、文件、和集合一般被认为是核心对象(数据)类型。
问题2:为何把它们称作“核心”数据类型。
答:它们被称作“核心”类型是因为它们是Python语言自身的一部分,并且总是有效的。为了建立其他的对象,通常必须调用被导入模块的函数。大多数核心类型都有特定的语法创建其对象:例如,‘spam’是一个创建字符串的表达式,而且决定了可以被应用的操作的集合。正是因为这一点,核心类型与Python的语法紧密地结合在一起,与之相比较,必须调用内置的‘open’函数去创建一个文件对象(通常也被认为是一种核心类型)。
问题3:“不可变性”代表了什么?Python核心类型中有哪些是具有不可变性?
答:一个具有“不可变性”的对象是一个在其创建以后不能够被改变的对象,也就是其所占据的存储空间是不可变的,但是可以建立一个新的字符串以同一个变量名对其进行赋值。Python中的数字、字符串和元组都属于这个分类。尽管无法在原位置位置改变一个不可变的对象,但是总是可以通过运行一个表达式创建一个新的对象。在Python新版本中,字节串数组为文本提供了可变性,不过它们并非普通的字符串,而且仅仅支持8位编码的文本文件(如ASCII)。
'spam'
>>>S[]=z#报错,说明字符串不可变
Traceback(mostrecentcalllast):
File"",line1,in
NameError:name'z'isnotdefined
>>>S='z'+S[1:]#但是可以建立一个新的字符串,名字不变
'zpam'
问题4:“序列”是什么意思?Python的核心类型哪些是属于这个分类中?
答:一个“序列”是系列具有位置顺序的对象集合体。字符串、列表和元组是Python中所有的序列。它们共同拥有序列的一般操作,例如索引、合并和分片,但又有各自的类型特定的方法调用。一个相关术语“可迭代性”,意味着任何一个能够按需提供它的内容的物理或虚拟序列。
问题5:“映射”是什么意思?Python中哪些核心类型是映射?
答:“映射”表示将键与相关值相互关联映射的对象。Python中字典是其核心类型中唯一的映射类型。映射没有从左至右的位置,它们支持通过键(key)获取数据,并包含了类型特定的方法调用。
问题6:什么是“多态”?为何关心“多态”?
答:“多态”意味着一个运算符(如+)的意义取决于被操作的对象。“多态”是使用Python中关键思想之一:不要把代码限制在特定的类型上,使代码自动适用于多种类型。
问题7:内置对象?
注:列表提供了其他对象的有序集合,而字典则是通过key储存对象。列表和字典都可以嵌套,可以随着需求扩展和删减,并能够包含任意类型的对象。在Python中没有类型声明,运行的表达式语法决定了创建和使用的对象类型。一旦创建了一个对象,它就和操作集合绑定了,即只能对字符串做字符串相关操作,对列表进行列表的相关操作。
问题8:数字?
答:Python中数字包含的类型有:整数、浮点数、复数、固定精度十进制数、带分子分母的有理数等。
>>>len(str(2**8))
3
注:Python中嵌套的调用从内向外进行运算,首先计算2**8然后str函数将其值转化为字符串,接着len函数得到该字符串的长度,也就是位数的个数。
>>>importmath
>>>math.pi
>>>math.sqrt(4)
2.
注:模块是我们导入以供使用的额外工具包。上面的math就是一个模块。
问题9:字符串?
答:字符串是由单字符的字符串所组成的序列。(列表和元组也是序列)序列是按照从左至右的偏移量进行编码的,从开始。字符串具有不可变性。
>>>S='spam'
's'
'm'
>>>S[len(S)-1]
'm'
'pa'
>>>S+'ex'#注意+号对不同的对象有不同的含义,此处为拼接
'spamex'
'spamspam'
问题1:列表?
答:列表是一个任意类型的对象的位置相关的有序集合,没有固定大小,而且列表是可变的,通过相应的偏移量进行赋值可以定位地对列表进行修改。列表没有固定类型的约束。列表用[]。尽管列表没有固定大小,但是Python是不允许引用不存在的元素,超出列表末尾之外的索引总是会报错的。
问题11:嵌套?
答:Python核心数据类型的一个优秀特性就是支持任意的嵌套。能够以任意组合进行嵌套,并且可以多个层次进行嵌套。例如,让一个列表包含一个字典,再让这个字典包含一个列表等。
>>>M=[[1,2,3],
...[4,5,6],
...[7,8,9]]
[[1,2,3],[4,5,6],[7,8,9]]
[4,5,6]
>>>M[1][2]
6
注:M是一个列表嵌套列表,就构成了一个3*3矩阵,M[1]是读取整个第二行,M[1][2]是读取整个第二行第三个元素。Python是从左至右依次执行代码。
问题12:推导?
答:推导是通过对序列中的每一项运行一个表达式来创建一个新的列表的方法,每次一个,从左至右。列表推到是编写在方括号[]中的(提醒你在创建列表这个事实)。
>>>col2=[row[1]forrowinM]
[2,5,8]
问题13:字典?
答:字典不是序列,而是一种映射(mapping)。映射同样是一个其他对象的集合,但是它们是通过键(key)而不是相对位置来存储对象的。字典是Python中唯一一种映射类型,具有可变性。字典作为常量编写时,编写在大括号{}中,并包含一系列的“键:值”对。
>>>D['name']='Bob'
>>>D['job']='teacher'
>>>D['age']=4
{'name':'Bob','job':'teacher','age':4}
>>>print(D['age'])
4
注:与列表中禁止边界外的赋值不同,对一个新的字典的键赋值会创建该键。字符串一定要用‘’括起来。通过键来索引一个字典往往是Python中编写搜索的最快方法。
>>>car=dict(name='BMW',color='red',size=24)
{'name':'BMW','color':'red','size':24}
>>>car1=dict(zip(['name','color','size'],['BMW','black','21']))
{'name':'BMW','color':'black','size':'21'}
创建新的字典还可以用dict()函数,或者用zip进行键和值配对。
tip:尽管可以通过赋值一个新键来扩展字典,但是访问一个不存在的键仍然是一个错误。
问题14:如何查找某一个键是否在某个字典中?
答:可以用if测试、in测试等。
>>>A={'a':1,'b':2,'c':3}
False
>>>if'd'notinA:
...print('ture')
...
ture
问题15:元组?
答:就想列表一样,元组是一个序列,但是具有不可变性。支持混合的类型和嵌套,被编写在圆括号()中,通常圆括号可以省略。
>>>T='spam',3.,[11,22,33]
'spam'
>>>T[2][1]
22
>>>T.append(4)
Traceback(mostrecentcalllast):
File"",line1,in
AttributeError:'tuple'objecthasnoattribute'append'
问题16:文件?
答:文件对象是Python代码调用电脑上存放的外部文件的主要接口。它们能被用于读取和写入文本记录、音频片段、Excel文档、保存邮件以及任何你保存在电脑上的东西。虽然文件是核心类型,但是它有些特殊:没有特定的字面量语法来创建文件。创建一个文件对象,需要调用内置open()函数以字符串形式传递给它一个外部文件名以及一个可选的表示处理模式的字符串。
>>>f=open('data.txt','w')
>>>f.write('hello\n')
6
>>>f.write('world\n')
6
>>>f.close()
>>>f=open('data.txt')
>>>text=f.read()
'hello\nworld\n'
>>>print(text)
hello
world