python学习--核心编程4习题以及知识点记录

来源:互联网 发布:工业数据采集 求 编辑:程序博客网 时间:2024/05/19 17:07

4-1.Python对象。与所有Python对象有关的三个属性是什么?请简单的描述一下。

答:与所有Python对象有关的三个属性是身份、类型、值。
身份:每一个对象都有一个唯一的身份标识自己,任何对象的身份可以使用内建函数id()来得到。这个值可以被认为是该对象的内存地址。
类型:对象的类型决定了该对象可以保存什么类型的值,可以进行什么样的操作,以及遵循什么规则。可以用内建函数type()来查看Python的类型。
值:对象表示的数据项。

扩展一:None, Python 的 Null 对象

Python 有一个特殊的类型,被称作 Null 对象或者 NoneType,它只有一个值,那就是 None。
它不支持任何运算也没有任何内建方法。

None 没有什么有用的属性,它的布尔值总是 False。

核心笔记:布尔值
所有标准对象均可用于布尔测试,同类型的对象之间可以比较大小。每个对象天生具有布尔 True 或 False 值。空对象、值为零的任何数字或者 Null 对象 None 的布尔值都是 False。
下列对象的布尔值是 False。
z None
z False (布尔类型)
z 所有的值为零的数:
Edit By Vheavens
z 0 (整型)
z (浮点型)
z 0L (长整型)
z 0.0+0.0j (复数)
z “” (空字符串)
z [] (空列表)
z () (空元组)
z {} (空字典)
值不是上面列出来的任何值的对象的布尔值都是 True,例如 non-empty、 non-zero 等等。
用户创建的类实例如果定义了 nonzero(nonzero())或 length(len())且值为 0,那
么它们的布尔值就是 False。

4-2.类型。不可更改(immutable)指的是什么?Python的哪些类型是可更改(mutable)的,哪些不是?

答:如果对象支持更新操作,那么它的值就可以改变,否则它的值也是只读的。对象的值是否可以更改被称为对象的可改变性。如果对象的值不可更改,那么称它不可更改。

4-3.类型。哪些Python类型是按照顺序访问的,他们和映射类型的不同是什么?

答:list,string和tuple类型是按照顺序访问的。

扩展二:

“基本”,是指这些类型都是 Python 提供的标准或核心类型。
“内建”,是由于这些类型是 Python 默认就提供的
“数据”,因为他们用于一般数据存储
“对象”,因为对象是数据和功能的默认抽象
“原始”,因为这些类型提供的是最底层的粒度数据存储
“类型”,因为他们就是数据类型

数据类型 存储模型 更新模型 访问模型 l
数字 Scalar(标量/原子类型) 不可更改 直接访问
字符串 Scalar 不可更改 顺序访问
列表 Container 可更改 顺序访问
元组 Container 不可更改 顺序访问
字典 Container 可更改 映射访问

4-4.type()。内建函数type()作用是什么?type()返回的对象是什么?

答:type()的作用是返回一个对象的类型,而不局限于标准类型。

扩展三:type()

通过调用 type()函数你能够得到特定对象的类型信息:所有类型对象的类型都是 type,它也是所有 Python 类型的根和所有 Python 标准类的默认元类(metaclass)。

>>> type(42)<type 'int'>>>> type(type(42))<type 'type'>

4-5.str()和repr()。内建函数str()与repr()之间的不同是什么?哪一个等价于反引号(“)操作符?

答:内建函数str()得到的字符串可读性好。而repr()函数得到的字符串通常可以用来重新获得该对象。repr()函数和``它们返回的是一个对象的“官方”字符串表示。print语句调用的是repr()函数.

扩展四

这里写图片描述

这里写图片描述

4-6.对象相等。你认为type(a) == type(b)和type(a) is type(b)之间的不同是什么?为什么会选者后者?函数isinstance()与这有什么关系?

答:“==”比较的是值,is比较的是对象。isinstance()用来判断一个对象是否属于这个类。
a is b
这个表达式等价于下面的表达式
id(a) == id(b)

扩展五:对象值的比较

所有的内建类型均支持比较运算实际进行的比较运算因类型而异。换言之,数字类型根据数值的大小和符号比较,字符串按照字符序列值进行比较,等等。不同于很多其它语言,多个比较操作可以在同一行上进行,求值顺序为从左到右。

>>> 3 < 4 < 7 # same as ( 3 < 4 ) and ( 4 < 7 )True>>> 4 > 3 == 3 # same as ( 4 > 3 ) and ( 3 == 3 )True>>> 4 < 3 < 5 != 2 < 7False

我们会注意到比较操作是针对对象的值进行的,也就是说比较的是对象的数值而不是对象
本身。

扩展四:对象身份的比较

1、例 1:
foo1 和 foo2 指向相同的对象
foo1 = foo2 = 4.3
例 2: foo1 和 foo2 指向相同的对象
foo1 = 4.3
foo2 = foo1
这里写图片描述
例 3: foo1 和 foo2 指向不同的对象
foo1 = 4.3
foo2 = 1.3 + 3.0
这里写图片描述

整数对象和字符串对象是不可变对象,所以 Python 会很高效的缓存它们。这会造成我们认为 Python 应该创建新对象时,它却没有创建新对象的假象。看下面的例子:

>>> a = 1>>> id(a)8402824>>> b = 1>>> id(b)8402824>>>>>> c = 1.0>>> id(c)8651220>>> d = 1.0>>> id(d)8651204

在上面的例子中,a 和 b 指向了相同的整数对象,但是 c 和 d 并没有指向相同的浮点数
对象。Python 仅缓存简单整数,范围会变。

4-8.列表和元组。列表和元组的相同点是什么?不同点是什么?

答:1 列表是可变的,而元组不是不可变的。
2 列表和元组都是按顺序访问的。

0 0