书名:Python程序员面试秘笈
ISBN:978-7-115-50261-2
本书由人民邮电出版社发行数字版。版权所有,侵权必究。
您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。
我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。
如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。
著 【印】米努 • 科利(Meenu Kohli)
译 宋格格
责任编辑 陈聪聪
人民邮电出版社出版发行 北京市丰台区成寿寺路11号
邮编 100164 电子邮件 315@ptpress.com.cn
网址 http://www.ptpress.com.cn
读者服务热线:(010)81055410
反盗版热线:(010)81055315
Python Interview Questions (9789388176743)
Original edition published by BPB Publications. Copyright © 2019 by BPB Publications. Simplified Chinese-language edition copyright © 2020 by POSTS & TELECOM PRESS. All rights reserved.
本书中文简体字版由印度BPB Publications授权人民邮电出版社有限公司出版。未经出版者书面许可,对本书任何部分不得以任何方式复制或抄袭。
版权所有,侵权必究。
本书由Python编程基础和Python数据结构与算法两部分构成。全书共分为14章,在对Python的相关主题进行简要介绍的同时,附加了考官或面试官可能提出的问题,这些问题按章节顺序排列,便于读者从简单的问题过渡到复杂的问题。
本书适合有一定Python编程基础的人阅读,Python面试者、程序设计人员、Python编程爱好者以及软件高校毕业生均能从本书中获益。
Python是一门在软件开发领域中极具影响力且发展迅速的语言,同时也是计算机科学相关专业的本科生课程的重要组成部分,因此,从事Python编程是一个不错的想法。
如果必须在较短的时间内准备面试,你可能会为此感到不知所措。根据我的个人经验,在课堂上学习编程语言和实际项目中的编程实现有很大的不同,因此,我致力于编写一本教材供学生和专业人士参考。
面试与学术科研有很大的不同。面试的考查内容除课本知识和实际理解外,解决问题的方法也是非常关键的。在面试过程中,将对问题的了解有效地传达给面试官是很重要的。
关于编程语言的面试可能比较复杂,因此拥有坚实的基础非常重要。一个技术性的面试从一个简单的讨论开始,然后面试官会从不同的主题中随机向你提问。因此,准备这样的面试最好遵循系统的方法。
本书的目的是帮助读者准备考试或面试,内容包含了考试或面试时可能出现的问题并给出了相应的解决方案。我已经在Python上编译了书中的程序,就像我自己为考试或面试做准备一样。充分的准备往往会获得令人更为满意的结果,特别是对于准备考试或面试第一份工作的学生来说,希望本书能够帮助你取得好的成绩。
本书分为两部分,结构如下。
本书中的内容是以非常系统的方式组织的,分为两部分:Python编程基础和Python数据结构与算法。即使你擅长编程,我也建议你不要轻视第一部分。在任何阶段,编程基础中的一个小错误也是不可接受的,因此我们必须重视基础知识。再次声明,文中内容是按照特定顺序组织的,为每个主题提供突出的要点,然后列举与主题相关的各种类型的问题及解决方案。
第二部分也是非常重要的。为了帮助你更好地理解主题,本书提供了逐步的逻辑解释。章节内容从简单主题逐渐演变到复杂主题,方便你理解和掌握。
动手编写实现代码对更好地理解题目十分重要,因此本书要求你能编程实现文中所有的练习。只有独立解决问题,你才能在面试中有效地解释解决问题的逻辑。在准备Python面试时,只需要关注题目,其他的都不重要。一个好的面试官绝不会错过一个好的程序员。
这本书不仅能够使你对Python编程基础有更好的理解,还介绍了相关的具体应用。书中使用简单的语言来介绍,目标是解释每个概念背后的逻辑。不管是学生还是专业人士都将从这本书中受益匪浅。
在一次Python编程面试中,你的基础知识、逻辑推理和问题解决技能,如何看待问题、分析问题和代码实现都是可能测试的内容。
撰写本书对我来说是一次非常丰富的经历。在这里我要对BPB出版社表示感谢,感谢他们相信我的能力,并将这个重要的项目交给我负责。希望我写的每一本书都能够向你传授宝贵的知识。
如果没有最大的力量——来自家人的支持和鼓励,这本书是不可能完成的。
本书由异步社区出品,社区(https://www.epubit.com/)为您提供相关资源和后续服务。
作者和编辑尽最大努力来确保书中内容的准确性,但难免会存在疏漏。欢迎您将发现的问题反馈给我们,帮助我们提升图书的质量。
当您发现错误时,请登录异步社区,按书名搜索,进入本书页面,点击“提交勘误”,输入勘误信息,点击“提交”按钮即可。本书的作者和编辑会对您提交的勘误进行审核,确认并接受后,您将获赠异步社区的100积分。积分可用于在异步社区兑换优惠券、样书或奖品。
我们的联系邮箱是contact@epubit.com.cn。
如果您对本书有任何疑问或建议,请您发邮件给我们,并请在邮件标题中注明本书书名,以便我们更高效地做出反馈。
如果您有兴趣出版图书、录制教学视频,或者参与图书翻译、技术审校等工作,可以发邮件给我们;有意出版图书的作者也可以到异步社区在线提交投稿(直接访问www.epubit.com/ selfpublish/submission即可)。
如果您是学校、培训机构或企业,想批量购买本书或异步社区出版的其他图书,也可以发邮件给我们。
如果您在网上发现有针对异步社区出品图书的各种形式的盗版行为,包括对图书全部或部分内容的非授权传播,请您将怀疑有侵权行为的链接发邮件给我们。您的这一举动是对作者权益的保护,也是我们持续为您提供有价值的内容的动力之源。
“异步社区”是人民邮电出版社旗下IT专业图书社区,致力于出版精品IT技术图书和相关学习产品,为作译者提供优质出版服务。异步社区创办于2015年8月,提供大量精品IT技术图书和电子书,以及高品质技术文章和视频课程。更多详情请访问异步社区官网https://www.epubit.com。
“异步图书”是由异步社区编辑团队策划出版的精品IT专业图书的品牌,依托于人民邮电出版社近30年的计算机图书出版积累和专业编辑团队,相关图书在封面上印有异步图书的LOGO。异步图书的出版领域包括软件开发、大数据、AI、测试、前端、网络技术等。
异步社区
微信服务号
第1章 Python简介
第2章 数据类型与内置函数
第3章 Python中的运算符
第4章 决策与循环
第5章 用户自定义函数
第6章 类和继承
第7章 文件
回答:通过Python编程可以实现任何功能,没有限制。
回答:由于Python支持多种编程模式,因此它被认为是一种高度通用的编程语言。它支持以下几种编程模式。
回答:Python编程语言相比于其他编程语言,其优势如下。
回答:当我们说Python是一种解释型语言时,这意味着Python代码在执行之前没有被编译。用Java等编译语言编写的代码可以直接在处理器上执行,这是因为代码在运行之前被编译,并且在程序执行时代码可以转换为计算机能够理解的机器语言的形式。这与Python不同,Python是在执行程序时,将代码转换为计算机能够理解的机器语言,而非在程序运行之前。
回答:一些常用的解释型语言如下。
回答:是的。由于在Python代码中,声明变量时不需要指定变量的类型,因此Python是动态类型的。在执行代码之前,变量的类型是未知的。
回答:高级编程语言是机器和人类之间的桥梁。直接用机器语言编码可能是一个非常耗时和烦琐的过程,而且它肯定会限制开发人员实现他们的目标。而像Python、Java、C++等高级编程语言则很容易理解,它们是开发人员用于高级程序设计的工具。高级编程语言允许开发人员编写复杂代码,然后将其转换为机器语言以便计算机能够理解需要做什么。
回答:可以。
回答:Python有两种编程模式。
回答:
public class HelloWorld
{
public static void main(String[] args)
{
System.out.println("Hello World");
}
}
然而在Python中只需要写一行代码即可。
print("Hello World")
回答:安装Python之后,有3种方法可以开始执行代码。
回答:交互式Shell位于用户发出的命令和操作系统执行的命令之间。它允许用户使用简单的Shell命令,而不必担心操作系统复杂的基本功能。同时,这还可以保护操作系统,避免因为错误使用造成系统功能的破坏。
回答:可以使用Ctrl+D组合键或者exit()退出交互模式。
回答:Python使用传统的ASCII字符集。
回答:缩进是Python的显著特性之一。虽然在其他编程语言中,开发人员使用缩进来保持代码的整洁,但对于Python而言,需要缩进来标记一个块的开始或者帮助了解代码属于哪个块,如图1.1所示。定义函数、条件语句或循环均需要用到代码中的块。Python中并没有使用大括号来标记代码块,而是通过正确使用空格来标记。
图1.1
注:
回答:为了能够保留部分或全部的计算机内存来执行程序和进程,内存管理是必需的。这种提供内存的方法称为内存分配。此外,当不再需要某一部分数据时,必须将其占用的内存清除。内存管理知识有助于开发人员开发高效的代码。
Python利用它的私有堆空间进行内存管理。Python中的所有对象结构都位于这个私有堆中(程序员无法访问)。Python的内存管理器确保将堆空间合理地分配给对象和数据结构。Python中内置的垃圾回收机制能够回收未使用的内存,以便在堆空间中可用。
Python中的一切都是对象。Python有不同类型的对象,例如,由数字和字符串组成的简单对象,以及容器对象(如dict、list和用户定义的类)。这些对象可以通过标识符-名称访问。现在,我们来看一下它是如何运作的。
假设我们将数值5赋给变量a:a=5,如图1.2所示。这里,5是内存中的整数对象,a引用了该整数对象。
图1.2
在图1.2中,id()函数提供了唯一的标识号——在对象的生命周期内保持唯一与恒定的整数值。两个生命周期不重叠的对象可能具有相同的id()值。
对于整数对象5而言,其id值是140718128935888。现在我们将相同的数值5赋给变量b。我们可以在图1.3中看到,a和b都引用了相同的对象。
图1.3
现在,执行如下操作:c=b。这意味着,c也将引用同一个对象,如图1.4所示。
图1.4
现在,假设执行如下操作:a=a+1。这意味着现在a的值等于6,指向的是另一个对象,如图1.5所示。
图1.5
每一条指令都会涉及一定数量的内存组织。底层操作系统为每个操作分配一定数量的内存,Python解释器根据不同的因素(如版本、平台和环境)获得其内存份额,如图1.6所示。
图1.6
分配给解释器的内存分为以下几部分。
a)在这里执行所有方法。
b)在栈内存中创建堆内存中的对象引用。
在堆内存中创建对象。
现在,我们通过下面的例子来看一下内存是如何工作的,请看下面的代码。
def function1(x):
value1 = (x + 5)* 2
value2 = function2(value1)
return value2
def function2(x):
x = (x*10)+5
return x
x = 5
final_value = function1(x)
print("Final value =", final_value)
现在,让我们看一看代码是如何工作的。程序的执行从主程序开始,在本例中主程序如下。
x = 5
final_value = function1(x)
print("Final value = ", final_value)
步骤1 执行x=5。
这将在堆内存中创建整数对象5,并在主栈内存中创建此对象的引用x,如图1.7所示。
图1.7
步骤2 执行final_value= function1(x)。
此语句调用function1()函数,代码如下。
def function1(x):
value1 = (x + 5)* 2
value2 = function2(value1)
return value2
为了执行函数function1(),在内存中添加了一个新的栈帧。在执行function1()之前,保持数值5的引用x的下栈帧,将整型数值5作为参数传递给此函数,如图1.8所示。
现在,value1= (x+5)* 2 = (5+5)*2 = 10*2 = 20,如图1.9所示。
图1.8
图1.9
function1()将数值20赋给value1。
接下来的步骤是value2= function2(value1),这里调用function2()来计算需要传递给value2的值。为了实现这一点,Python将创建另一个栈内存。将数值为20的整数对象value1作为引用传递给function2,如图1.10所示。
图1.10
def function2(x):
x = (x*10)+5
return x
函数function2()计算以下表达式并返回值,如图1.11所示。
x = (x*10)+5
x = (20*10)+5 = (200)+5 = 205
图1.11
函数function2()已完全执行,并且将数值205分配给function1中的value2。现在function2()的栈内存被移除,如图1.12所示。
图1.12
现在函数function1()将返回值205,并将其分配给主栈内存中的final_value,如图1.13所示。
图1.13
这里需要注意的是,x存于主函数中,同时也存于不同的函数中,由于每个x都在不同的栈内存中,因此这些值不会相互干扰。
回答:与C/C++不同的是,Python通过引用计数和垃圾回收机制来实现内存的自动分配和释放。
顾名思义,引用计数来计算程序中一个对象被其他对象引用的次数。每当一个对象的引用被消除时,引用计数将减去 1。一旦引用计数变为零,对象就会被释放。当删除一个对象、重新分配引用或者对象超出范围时,对象的引用计数会减少。当一个对象被分配一个名称或放置在一个容器中时,引用计数会增加。
另一方面,垃圾回收机制允许Python释放和回收不再使用的内存块。这一过程是定期进行的。在程序执行时启动垃圾回收器,当一个对象的引用计数减少为零时,将触发垃圾回收器。
回答:Python中的所有语句都以换行符结尾。如果有一个长语句,那么最好使用续行符(\)将它扩展到多行。
当我们尝试将一个语句拆分为多行时使用的是显式续行符,而隐式续行符常用于将括号和大括号拆分为多行。例如,对于多行语句使用续行符。
显式续行符代码如下。
>>> first_num = 54
>>> second_num = 879
>>> third_num = 876
>>> total = first_num +\
second_num+\
third_num
>>> total
1809
>>>
隐式续行符代码如下。
>>> weeks=['Sunday',
'Monday',
'Tuesday',
'Wednesday',
'Thursday',
'Friday',
'Saturday']
>>> weeks
['Sunday', 'Monday', 'Tuesday', 'Wednesday',
'Thursdy', 'Friday', 'Saturday']
>>>
回答:在使用Python时,可以看到语法错误(Syntax-error)和运行时错误(Run-time errors)。
语法错误是解释器读取程序时遇到的静态错误。如果代码中有任何错误,那么解释器将显示一条语法错误消息,程序不会执行。
顾名思义,运行时错误是动态错误,它们是在程序执行时检测到的。对于此类错误可能需要更改程序设计,例如内存不足、分母为零等。
回答:Python的IDLE环境有以下优点。
回答:注释是一个或多个语句,用于提供程序中一段代码的文档或信息。在Python中,一行注释以#开头。
回答:是的。