第四章
第一题:
python对象。与Python对象有关的三个属性是什么?请简单表述。
所有的python对象都拥有三个属性:身份、类型、和值。
身份:每一个对象都有一个唯一的身份标识自己,任何对象的身份可以使用内建函数id()来得到。这个值可以是被认为该对象的内存地址。一般很少用到这个值,也不用太关心它是什么。
类型:对象的类型决定该对象可以保存什么值,可以进行什么样的操作,以及遵循什么样的规则。你可以使用内建函数type()查看python对象的类型。因为python中类型也是对象,所以type()返回的是对象而不是简单的字符串。
值:对象表示的数据项。
第二题:
类型。不可更改(immutable)指的是什么?python有哪些类型是可更改的(mutable),哪些不是?
不可更改是指python的某些对象被创建后它的值不可以更改。
以更新模型为标准的类型分类
分类 | python类型 |
可变类型 | 列表、字典 |
不可变类型 | 数字、字符串、元组 |
第三题:
哪些python类型是按顺序访问的,他们和映射类型的不同是什么?
以访问模型为标准的类型分类
分类 | python类型 |
直接访问 | 数字 |
顺序访问 | 字符串、列表、元组 |
映射访问 | 字典 |
顺序与映射的区别:顺序访问是指容器内的元素从0开始索引访问。映射访问类似顺序访问的索引,不过它的索引并不使用顺序的数字偏移量取值,它的元素无序存放,通过唯一的键来访问,这就是映射类型,它容纳的是哈希键-值对的集合。
第四题:
type()。内建函数type()做什么?type()返回的对象是什么?
type()接受一个对象作为参数,并返回它的类型。它的返回值是一个类型对象。
第五题:
str()和repr()。内建函数str()与repr()之间的不同是什么?哪一个等价于反引号('')操作符?
repr()和''做的是完全一样的事情,他们返回的是一个对象的官方字符串表示。绝大多数情况下可以通过求值运算(使用内建函数eval())得到该对象。str()致力于生成一个对象的可读性好的字符串表示,它的返回结果通常无法用eval()求值,但很适合用print 语句输出。需要提醒的是,并不是所有的repr()返回的字符串都能用eval()得到原来的对象。换句话说,repr()输出对python友好,而str()的输出对用户比较友好。
第六题:
对象相等。你认为type(a)==type(b)和type(a) is type(b)之间的不同是什么?为什么会选择后者?函数isinstance()与这有什么关系?
type(a)==type(b)是一种对象值比较,通过type()函数求得变量类型;type(a) is type(b)是一种对象身份比较。在进行多次比较时后者效率更高。
isinstance(object, classinfo)是Python中的一个内建函数,该函数接受一个类型对象的元组作为其参数,依次判断object的数据类型是否是classinfo中的其中之一,若是则返回True,否则返回False。
第七题:
关于type()函数的操作,比较简单,具体不在演示。
第八题:
列表和元组。列表和元组的相同点是什么,不同点是什么?
相同点:列表和元组都可以当成普通的“数组”,他能保存任意数量任意类型的python对象。和数组一样,通过从0开始的数字索引访问元素,但是列表和元组都可以储存不同类型的对象。
不同点:列表元素用中括号包裹,元素的个数及元素的值可以改变。元组元素用小括号包裹,不可以更改。元组可以看成是只读的列表。
第九题:
实践,给定一下赋值:
a = 10
b = 10
c = 100
d = 100
e = 10.0
f = 10.0
请问下列输出是什么?
(a)a is b
(b)c is d
(c)e is f
解答:
a)True
b)True
c)False
(a)和(b)看起来似乎分别创建了两个对象,但是因为简单整形对象经常在程序中使用,python会高效的缓存他们,不会创建新的对象,而是添加新的引用。但这种特性仅仅是简单的整形,所以(c)的表达式是False。