你和 HR 打完第一轮电话了吗?你要亲自参加 Python 面试吗?如果您想知道可能会问到哪些与 Python 相关的问题,本指南应该会有所帮助。
在第一部分,我们将讨论一些关于 Python 哲学的问题——这些问题可以帮助您对项目的架构做出决策。在下一节中,我们将讨论与 Pythonic 编程方式相关的问题——这可能表现为审查或查找代码片段的输出的形式。
在我们开始之前请注意。本指南主要讨论 Python 的内置功能。本指南的目的是帮助您快速掌握能够实现快速开发的固有 Python 功能。因此,我们无法涵盖您可能面临的各种类型公司的所有问题。
想要提升您的 Python 技能并在快速增长的市场中脱颖而出?查看SitePoint 高级版!您会找到帮助您入门的书籍(例如The Python Apprentice)和培养工作准备技能(例如Python 中的前端测试)。通过The Python Master提高您的技能,并访问不断增长的包含 400 多本关于网页设计和开发的书籍和课程的图书馆。
Python 开发:项目架构
什么是 Python?为什么要使用 Python?
如果您正在面试 Python 职位,您应该清楚地了解 Python 是什么以及它与其他编程语言有何不同。以下是您应该注意的有关 Python 的一些关键点。
首先,你不应该弄错词源。很大一部分 Python 程序员错误地认为 Guido van Rossum 以蛇命名它!相反,Python以英国小品喜剧Monty Python's Flying Circus命名。
其次,Python 是一种高级的、面向对象的、解释性的编程语言。这意味着 Python 代码是逐行执行的。Python 也是动态类型的,因为它不需要您在声明变量时指定变量的类型。
鉴于 Python 的易用性,它已找到用于常见自动化任务的用途。对于懂多种语言的程序员来说,Python 通常是首选的脚本选择。随着 Django 和 Flask 等基于 Python 的 Web 框架的日益普及,Python 的份额近年来显着增加。
Python 的局限性
虽然了解编程语言的功能是件好事,但了解它的局限性以真正理解您需要警惕的情况也是件好事。
Python 的第一个限制是执行速度。尽管 Python 开发速度很快,但与 C++ 等编译语言相比,执行类似的 Python 代码块通常更慢。出于这个原因,黑客马拉松通常会给 Python 程序一些额外的执行时间。不过,有一些方法可以规避这个问题。例如,您可以将 Python 与 C 等编译语言集成,以通过其他语言执行核心处理。
在一个以移动为先的世界中,Python 并不是移动开发的本机。您很少会发现使用 Python 开发的移动应用程序。两大移动操作系统 Android 和 iOS 不支持 Python 作为官方编程语言。
包确定:Django vs Flask
除了 Python 的功能和限制之外,面试中流行的一类问题侧重于根据您的要求在包之间进行选择。让我们看一下您在处理此类问题时可能采取的一种方法。
假设您可以在 Django 和 Flask 之间进行选择来启动 Web 应用程序。这个问题的答案应该在项目要求和组织文化的结合中。
首先,您应该知道使用插件,这里没有正确的答案:您可以使用任一框架创建类似的应用程序。但是,每个框架的设计理念之间存在明显差异。Flask 为您提供了创建 Web 应用程序的最基本功能,例如 URL 路由、模板、单元测试和开发服务器,从而为您设计应用程序提供了很大的自由。另一方面,Django 从一开始就为您提供了大量的内置特性——数据库支持、广泛的管理功能和安全特性。
如果您正在构建一个使用关系数据库的应用程序,并且包含大量动态内容,那么您可能应该选择 Django。但是,如果您希望在项目中获得更多自由,您应该选择 Flask。
Pythonic 编程方式
Python 面试的一个重要部分包括动手编程。它可能是查找输出或查看代码片段的形式,或者只是讨论在某些情况下会有所帮助的特定 Python 功能。在本节中,我们将了解 Python 开发的各种特性和指南。
循环zip
和enumerate
在 Python 中创建循环的方式与其他编程语言不同。Python 的内置函数zip
并enumerate
帮助您创建运行更快的更有效循环。让我们看看这两个功能的演示。
假设您想访问两个不同列表中的相应元素。您可以遍历列表的长度并访问每个列表中的相应元素。例如,以下代码打印汽车及其相应的制造商:
<span style="color:#3a3a3a"><span style="background-color:#ffffff"><span style="background-color:#292d3e"><span style="color:#bfc7d5"><code class="language-python">cars <span style="color:#89ddff">=</span> <span style="color:#c792ea">[</span><span style="color:#c3e88d">'CR-V'</span><span style="color:#c792ea">,</span> <span style="color:#c3e88d">'Silverado'</span><span style="color:#c792ea">,</span> <span style="color:#c3e88d">'F-150'</span><span style="color:#c792ea">]</span>
manufacturers <span style="color:#89ddff">=</span> <span style="color:#c792ea">[</span><span style="color:#c3e88d">'Honda'</span><span style="color:#c792ea">,</span> <span style="color:#c3e88d">'GM'</span><span style="color:#c792ea">,</span> <span style="color:#c3e88d">'Ford'</span><span style="color:#c792ea">]</span>
for i in <span style="color:#82aaff">range</span><span style="color:#c792ea">(</span><span style="color:#82aaff">len</span><span style="color:#c792ea">(</span>cars<span style="color:#c792ea">)</span><span style="color:#c792ea">)</span><span style="color:#c792ea">:</span>
print<span style="color:#c792ea">(</span>cars<span style="color:#c792ea">[</span>i<span style="color:#c792ea">]</span><span style="color:#c792ea">,</span> manufacturers<span style="color:#c792ea">[</span>i<span style="color:#c792ea">]</span><span style="color:#c792ea">)</span>
</code></span></span></span></span>
这可以使用 Python 中更简单的函数来实现zip
:
<span style="color:#3a3a3a"><span style="background-color:#ffffff"><span style="background-color:#292d3e"><span style="color:#bfc7d5"><code class="language-python">for car<span style="color:#c792ea">,</span> manufacturer in <span style="color:#82aaff">zip</span><span style="color:#c792ea">(</span>cars<span style="color:#c792ea">,</span> manufacturers<span style="color:#c792ea">)</span><span style="color:#c792ea">:</span>
print<span style="color:#c792ea">(</span>car<span style="color:#c792ea">,</span> manufacturer<span style="color:#c792ea">)</span>
</code></span></span></span></span>
在此示例中,zip
在两个列表的元素之间创建对。它也可用于连接两个以上的列表。
让我们看看是如何enumerate
工作的。如果您想访问索引以及列表元素的值,可以运行以下代码段:
<span style="color:#3a3a3a"><span style="background-color:#ffffff"><span style="background-color:#292d3e"><span style="color:#bfc7d5"><code class="language-python">for i in <span style="color:#82aaff">range</span><span style="color:#c792ea">(</span><span style="color:#82aaff">len</span><span style="color:#c792ea">(</span>cars<span style="color:#c792ea">)</span><span style="color:#c792ea">)</span><span style="color:#c792ea">:</span>
print <span style="color:#c792ea">(</span>i<span style="color:#c792ea">,</span> cars<span style="color:#c792ea">[</span>i<span style="color:#c792ea">]</span><span style="color:#c792ea">)</span>
</code></span></span></span></span>
但是,该enumerate
函数执行相同的任务:
<span style="color:#3a3a3a"><span style="background-color:#ffffff"><span style="background-color:#292d3e"><span style="color:#bfc7d5"><code class="language-python">for i<span style="color:#c792ea">,</span> car in <span style="color:#82aaff">enumerate</span><span style="color:#c792ea">(</span>cars<span style="color:#c792ea">)</span><span style="color:#c792ea">:</span>
print <span style="color:#c792ea">(</span>i<span style="color:#c792ea">,</span> car<span style="color:#c792ea">)</span>
</code></span></span></span></span>
使用zip
andenumerate
不仅可以使您的代码更简洁,而且还可以使其运行得更快。
单行列表操作
如果您想修改列表的元素,您可能希望使用类似 的函数map
,可能如下所示:
<span style="color:#3a3a3a"><span style="background-color:#ffffff"><span style="background-color:#292d3e"><span style="color:#bfc7d5"><code class="language-python">numbers <span style="color:#89ddff">=</span> <span style="color:#c792ea">[</span><span style="color:#f78c6c">1</span><span style="color:#c792ea">,</span> <span style="color:#f78c6c">2</span><span style="color:#c792ea">,</span> <span style="color:#f78c6c">3</span><span style="color:#c792ea">,</span> <span style="color:#f78c6c">4</span><span style="color:#c792ea">,</span> <span style="color:#f78c6c">5</span><span style="color:#c792ea">]</span>
def <span style="color:#82aaff">squared</span><span style="color:#c792ea">(</span>num<span style="color:#c792ea">)</span><span style="color:#c792ea">:</span>
return num<span style="color:#89ddff">**</span><span style="color:#f78c6c">2</span>
squares <span style="color:#89ddff">=</span> <span style="color:#82aaff">map</span><span style="color:#c792ea">(</span>squared<span style="color:#c792ea">,</span> numbers<span style="color:#c792ea">)</span>
</code></span></span></span></span>
但是,Python 允许单行列表操作来完成此类任务。实现相同任务的两种方法如下所示:
<span style="color:#3a3a3a"><span style="background-color:#ffffff"><span style="background-color:#292d3e"><span style="color:#bfc7d5"><code class="language-python">squares <span style="color:#89ddff">=</span> <span style="color:#c792ea">[</span>squared<span style="color:#c792ea">(</span>x<span style="color:#c792ea">)</span> for x in numbers<span style="color:#c792ea">]</span>
squares <span style="color:#89ddff">=</span> <span style="color:#c792ea">[</span>x<span style="color:#89ddff">**</span><span style="color:#f78c6c">2</span> for x in numbers<span style="color:#c792ea">]</span>
</code></span></span></span></span>
if ... else
此外,您也可以在此类操作中使用单行语句:
<span style="color:#3a3a3a"><span style="background-color:#ffffff"><span style="background-color:#292d3e"><span style="color:#bfc7d5"><code class="language-python">square_only_evens <span style="color:#89ddff">=</span> <span style="color:#c792ea">[</span>x<span style="color:#89ddff">**</span><span style="color:#f78c6c">2</span> if x<span style="color:#89ddff">%</span><span style="color:#f78c6c">2</span> <span style="color:#89ddff">==</span> <span style="color:#f78c6c">0</span> else x for x in numbers<span style="color:#c792ea">]</span>
</code></span></span></span></span>
您还可以在这些单行操作中使用lambda 表达式。
调试 pdb
虽然您可以使用 print 语句来调试其他编程语言中的代码,但 Python 带有一个内置的调试器,pdb
. 在您的程序中插入以下代码行,执行将在该行停止,以便您调试环境:
<span style="color:#3a3a3a"><span style="background-color:#ffffff"><span style="background-color:#292d3e"><span style="color:#bfc7d5"><code class="language-python">import pdb<span style="color:#c792ea">;</span> pdb<span style="color:#c792ea">.</span>set_trace<span style="color:#c792ea">(</span><span style="color:#c792ea">)</span>
</code></span></span></span></span>
在那之前所有可用的变量和函数都可供您检查和发现任何错误。
数据结构
要利用 Python 的全部功能,您必须熟悉内置的数据结构。列表是项目的集合,它们可能不是同一类型。元组类似于列表,但不可变。集合是项目的无序集合,没有任何重复项。字典是键值对的集合。
您必须了解可能使用这些数据结构的各种情况。
最后的想法
至此,我们结束了对 Python 面试的考虑。希望他们为您提供了一些有用的指导,帮助您为下一次面试做准备。祝你好运!
如果对Python有兴趣,想了解更多的Python以及AIoT知识,解决测试问题,以及入门指导,帮你解决学习Python中遇到的困惑,我们这里有技术高手。如果你正在找工作或者刚刚学校出来,又或者已经工作但是经常觉得难点很多,觉得自己Python方面学的不够精想要继续学习的,想转行怕学不会的, 都可以加入我们,可领取最新Python大厂面试资料和Python爬虫、人工智能、学习资料!微信公众号【Python大本营】等你来玩奥~