在Python面试中如何展现你的代码能力?

我们知道Python编程的面试过程分为初试、复试、笔试、终试等环节,作为一名应聘Python编程的人员来说代码编程是你在面试中必须闯的关,那么如何完美展现我们的Python代码编程能力呢?

如果你已经通过了招聘人员的电话面试,那么下面正是该展现你代码能力的时候了。无论是练习,作业,还是现场白板面试,这都是你证明自己的代码技巧的时刻。

我们知道面试官常常会出一些题让你来解决,作为一名程序员,除了需要具备解决问题的思路以外,代码的质量和简洁性也很关键。因为从一个人的代码可以直接看出你的基本功。对于Python而言,这就意味着你需要对Python的内置功能和库有很深入的了解。

本篇给大家介绍一些很强大的功能,它们能让面试官眼前一亮,觉得你很高级,这可以很大程度上给你加分。对于这些功能,我们从Python内置函数开始,然后是Python对数据结构的天然支持,最后是Python强大的标准库。

选择正确的内置功能

Python有一个大型标准库,但只有一个内置函数的小型库,这些函数总是可用的,不需要导入。它们每一个都值得我们仔细研究,但是在研究前,我还是给大家一些小的提示,尤其是在其中一些函数的情况下,可以用什么替代更好。

1. 使用enumerate()而不是range()进行迭代

在面试中,这种情况可能比任何其他情况都要多:您有一个元素列表,您需要遍历列表,同时访问索引和值。

有一个名为FizzBuzz的经典编码面试问题可以通过迭代索引和值来解决。在FizzBuzz中,你将获得一个整数列表,任务是执行以下操作:

用“fizz”替换所有可被3整除的整数

用“buzz”替换所有可被5整除的整数

将所有可被3和5整除的整数替换为“fizzbuzz”

通常,开发人员将使用range()解决此问题:

>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i in range(len(numbers)):
...     if numbers[i] % 3 == 0 and numbers[i] % 5 == 0:
...         numbers[i] = 'fizzbuzz'
...     elif numbers[i] % 3 == 0:
...         numbers[i] = 'fizz'
...     elif numbers[i] % 5 == 0:
...         numbers[i] = 'buzz'
...
>>> numbers
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']

Range允许你通过索引访问数字元素,并且对于某些特殊情况也是一个很有用的工具。但在这种情况下,我们希望同时获取每个元素的索引和值,更优雅的解决方案使用enumerate():

>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers):
...     if num % 3 == 0 and num % 5 == 0:
...         numbers[i] = 'fizzbuzz'
...     elif num % 3 == 0:
...         numbers[i] = 'fizz'
...     elif num % 5 == 0:
...         numbers[i] = 'buzz'
...
>>> numbers
['fizzbuzz', 22, 14, 'buzz', 97, 'fizz']

对于每个元素,enumerate()返回一个计数器和元素值。计数器默认为0,也是元素的索引。不想在0开始你的计数?只需使用可选的start参数来设置偏移量:

>>> numbers = [45, 22, 14, 65, 97, 72]
>>> for i, num in enumerate(numbers, start=52):
...     print(i, num)
...
52 45
53 22
54 14
55 65
56 97
57 72

通过使用start参数,我们访问所有相同的元素,从第一个索引开始,但现在我们的计数从指定的整数值开始。

2. 使用递推式构造列表而不是map()和filter()

“我认为删除filter()和map()是非常有争议的。”

- Guido van Rossum,Python的创造者

一般使用者可能错误地认为它没有争议,但Guido有充分的理由想要从Python中删除map()和filter()。一个原因是Python支持递推式构造列表,它通常更容易阅读并支持与map()和filter()相同的功能。

让我们首先看看我们如何构造对map()的调用以及等效的递推构造列表:

>>> numbers = [4, 2, 1, 6, 9, 7]
>>> def square(x):
...     return x*x
...
>>> list(map(square, numbers))
[16, 4, 1, 36, 81, 49]

>>> [square(x) for x in numbers]
[16, 4, 1, 36, 81, 49]

使用map()和列表推导的两种方法都返回相同的值,但列表推导更容易阅读和理解。下面我们可以对filter()及其等效的列表推导做同样的事情:

>>> def is_odd(x):
...    return bool(x % 2)
...
>>> list(filter(is_odd, numbers))
[1, 9, 7]

>>> [x for x in numbers if is_odd(x)]
[1, 9, 7]

就像我们在map中看到的那样,filter和列表推导方法返回相同的值,但列表推导更容易理解。

来自其他语言的开发人员可能不同意构造列表比map和filter更容易阅读,但根据我的经验,初学者能够更直观地写出列表推导。但无论哪种方式,在编码面试中使用列表推导很少会出错,因为它会让你知道Python中最常见的是什么。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值