文档章节

Python核心编程 课后习题-第四章

toddler
 toddler
发布于 2014/11/30 23:47
字数 1672
阅读 43
收藏 0

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

答:身份、类型、值
    1)身份:每一个对象都有惟一的身份标识自己。任何对象的身份都可以通过内建函数 id( ) 得到。这个值可以被认为是该对象的内存地址。
    2)类型:对象的类型决定了该对象可以保存什么类型的值,可以进行什么操作,以及遵循什么规则。可以通过内建函数 type( ) 查看Python对象的类型。[ 因为在Python 中类型也是对象,所以type( )返回大是对象而不是简单大字符串 ]
    3)值:对象表示的数据项。



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

对象创建成功之后,其值不可以更新,这些对象称为不可变对象 ; 而另一类对象创建后,其值允许改变,称为可变对象。

可变类型:列表、字典
不可变类型:数字、字符串、元组

摘自:http://fightlife2012.blog.163.com/blog/static/203582288201292324613791/
如: i = 0;
 i = i + 1; 
 实际其引用的对象已经被改变,利用内置函数id()可以明确获悉其引用对象的id值改变
即可以理解为 i = 0时 0为创建了一个整形对象, 当 i = i + 1后,i + 1又新创建了一个整形对象,新创建的对象被关联到原来的变量名,原来引用的整形对象被丢弃,由于原来对象的引用计数将会归0,垃圾回收器在适当时机进行回收。


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

答:顺序访问类型:字符串、列表、元组。映射访问的类型:字典。

序列类型是指容器内的元素按从 0 开始的索引顺序访问。一次可以访问一个元素或多个元

素, 也就是大家所了解的切片(slice)。字符串, 列表和元组都归到这一类。

映射类型类似序列的索引属性,不过它的索引并不使用顺序的数字偏移量取值, 它的元素

无序存放, 通过一个唯一的 key 来访问, 这就是映射类型, 它容纳的是哈希键-值对的集合。


4–4.type()。内建函数 type()做什么?type()返回的对象是什么?

答:用法:type(object)

        type() 接受一个对象做为参数,并返回它的类型。它的返回值是一个类型对象。

 

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


    所有类型对象的类型都是 type,它也是所有 Python 类型的根和所有 Python 标准类

    的默认元类(metaclass)。


4–4.str() 和 repr()。内建函数 str()与 repr()之间的不同是什么?哪一个等价于反引号(``)运算符?。


答:

内建函数 str() 和 repr() 或反引号运算符(``) 可以方便的以字符串的方式获取对象的

内容、类型、数值属性等信息。

str()函数得到的字符串可读性好, 输出对人机友好。其返回值通常无法用于eval求值

而 repr()函数得到的字符串通常可以用eval来重新获得该对象

repr( ) <==> (` `)


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

答:

       对于type(a) == type(b),比较操作符 == 是对两边对象的值进行比较的,也就是说,比较的是对象的数值而不是对象本身。

       对于 type(a) is type(b),等价于id(type(a)) == id(type(b)),其两边都指向一个共享的数据对象等式才成立。

    这样做是为了优化代码性能。我们用对象身份的比较来替代对象值的比较。如果对象是不同的,那意味着原来的变量一定是不同类型的。(因为每一个类型只有一个类型对象),我们就没有必要去

检查(值)了。 一次这样的调用可能无关紧要,不过当很多类似的代码遍布在应用程序中的时候,就有影响了。

isinstance( )函数,由名字可以知道,是否是某个类型的实例,用于判断对象的类型:

举个例子:

#!/usr/bin/env python

def displayNumType(num):
    print num, 'is',
    if isinstance(num, (int, long, float, complex)):
        print 'a number os type:', type(num).__name__
    else:
        print 'not a number at all!!!'
        
dispalyNumType(-66)
dispalyNumType(99999999999999999999999999L)
dispalyNumType(98.6)
dispalyNumType(-5.2+1.9j)
dispalyNumType('xxx')


4-7.内建函数 dir()。在第二章的几个练习中,我们用内建函数 dir()做了几个实验,它接受一个对象,然后给出相应的属性。请对 types 模块做相同的实验。记下您熟悉的类型,包括您对这些类型的认识,然后记下你还不熟悉的类型。在学习 Python 的过程中,你要逐步将“不熟悉”的类型变得“熟悉”起来

答:


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

答:1)相同点:列表和元组的存储模型都是容器,访问模型都是顺序访问

       2)不同点:两者的更新模型不同,列表的更新模型是可更改的,即可变的(mutable),而元组的更新模型是不可更改的,即不可变的(immutable)


4-9.练习,给定以下赋值:

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

         (v)   False

为什么会这样:

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

我们通过查看对象的身份来看看发生了什么

Python 仅缓存简单整数,因为它认为在 Python 应用程序中这些小整数会经常被用到。Python 2.3 中决定,在预定义缓存字符串表之外的字符串,如果不再有任何引用指向它,那这个字符串将不会被缓存。也就是说, 被缓存的字符串将不会象以前那样永生不灭,对象回收器一样可以回收不再被使用的字符串。


© 著作权归作者所有

toddler
粉丝 13
博文 33
码字总数 21659
作品 1
济南
QA/测试工程师
私信 提问
新手入门,学习《python核心编程》需要注意哪些,怎么提高效率

@fzyz_sb 你好,想跟你请教个问题: 你好,我这几天一直在学习《python核心编程》,在网上搜习题答案时找到的你的博客,所以这些天也一直是看着你的博客学习的。我计算机编程只是在学校开的c...

_keyboard_dancer_
2015/04/05
3K
3
《机器学习》(周志华)课后习题参考答案

目录: 周志华《机器学习》课后习题解答系列(二):Ch1 - 绪论 周志华《机器学习》课后习题解答系列(三):Ch2 - 模型评估与选择 周志华《机器学习》课后习题解答系列(四):Ch3 - 线性模...

kchai31
2018/01/04
0
0
那些年,我们学过的编程语言——Python篇

Hello World!不少人都与这句话邂逅在大家最初学习编程的时候。 2014年12月的编程语言排行榜中,Python位列在众多语言中的第8位,一直保持在前列。初学者看着简单清晰的语言极其容易上手。即...

生气的散人
2014/12/26
1K
4
开源 Python基础入门课程

  2016年11月至2017年2月,出于个人兴趣,我录制了《全栈数据工程师养成攻略》视频课程,收到了不错的反馈,目前在网易云课堂上已有1.8W人加入学习。      2017年9月至12月,我担任了一...

深度学习
2018/05/17
0
0
这些计算机经典书,如果你没读过不合适

教育就是当一个人把在学校所学全部忘光之后剩下的东西。 ——阿尔伯特•爱因斯坦 软件开发的世界是不断变化的。每一天都会有一门新的技术出现,昨天你学到的东西今天可能就毫无意义了。 在这...

异步社区
2018/09/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

1、Docker学习,第一天

Docker学习,第一天 一、Docker简介 环境配置如此之麻烦,换台机器,重来一次,费事费力。安装的时候,把原始环境一模一样的复制过来。开发人员利用Docker可以消除写作编码时,”在我的机器上...

有一个小阿飞
8分钟前
1
0
10.23

一、编写一个程序,把用分钟表示的时间转换成用小时和分钟表示的时间。使用#define或const创建一个表示60的符号常量或const变量。通过while循环让用户重复输入值,直到用户输入小于或等于0...

197王彧涛
34分钟前
2
0
手机视频如何制作GIF动图

很多小伙伴都喜欢用GIF动图在各大社交软件上与好友斗图,那你知道这些好玩有趣的GIF动图是如何制作的吗?下面教你一个将手机视频制作成GIF动图的方法,让你都可以随时随地制作有趣的表情包,...

白米稀饭2019
39分钟前
5
0
Spring Security 实战干货:实现自定义退出登录

1. 前言 上一篇对 Spring Security 所有内置的 Filter 进行了介绍。今天我们来实战如何安全退出应用程序。 2. 我们使用 Spring Security 登录后都做了什么 这个问题我们必须搞清楚!一般登录...

码农小胖哥
今天
10
0
JVM核心知识-类加载机制

JVM中类的生命周期包括7个阶段,加载、准备、验证、解析、初始化、使用、卸载。其中准备、验证、解析被归为连接阶段。 加载 jvm在这个阶段完成的工作 通过类名获取类的二进制字节流 将这个字...

moon888
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部