python面试常见题目
Python最大的优点之一就是语法简洁,好的代码就像伪代码一样,干净、整洁、一目了然。要写出 Pythonic(优雅的、地道的、整洁的)代码,需要多看多学大牛们写的代码,github 上有很多非常优秀的源代码值得阅读,比如:requests、flask、tornado,下面列举一些常见的Pythonic写法。
0. 程序必须先让人读懂,然后才能让计算机执行。
“Programs must be written for people to read, and only incidentally for machines to execute.”
1. 交换赋值
##不推荐
temp = a
a = b
b = a ##推荐
a, b = b, a # 先生成一个元组(tuple)对象,然后unpack
2. 链状比较操作符
比较操作符的聚合是另一个有时很方便的技巧:
n= 10result= 1< n< 20print(result)# Trueresult= 1> n<= 9print(result)# False
3. 使用三元操作符来进行条件赋值
# 三元操作符是 if-else 语句也就是条件操作符的一个快捷方式:[表达式为真的返回值] if [表达式] else [表达式为假的返回值]# 这里给出几个你可以用来使代码紧凑简洁的例子。下面的语句是说“如果 y 是 9,给 x 赋值 10,不然赋值为 20”。如果需要的话我们也可以延长这条操作链。x = 10 if (y == 9) else 20# 同样地,我们可以对类做这种操作:x = (classA if y == 1 else classB)(param1, param2)
2. Unpacking
##不推荐
l = ['David', 'Pythonista', '+1-514-555-1234']
first_name = l[0]
last_name = l[1]
phone_number = l[2] ##推荐
l = ['David', 'Pythonista', '+1-514-555-1234']
first_name, last_name, phone_number = l
# Python 3 Only
first, *middle, last = another_list
3. 使用操作符in
##不推荐
if fruit == "apple" or fruit == "orange" or fruit == "berry":# 多次判断 ##推荐
if fruit in ["apple", "orange", "berry"]:# 使用 in 更加简洁
4. 字符串操作
##不推荐
colors = ['red', 'blue', 'green', 'yellow']result = ''
for s in colors:result += s # 每次赋值都丢弃以前的字符串对象, 生成一个新对象 ##推荐
colors = ['red', 'blue', 'green', 'yellow']
result = ''.join(colors) # 没有额外的内存分配
5. 字典键值列表
##不推荐
for key in my_dict.keys():# my_dict[key] ... ##推荐
for key in my_dict:# my_dict[key] ...# 只有当循环中需要更改key值的情况下,我们需要使用 my_dict.keys()
# 生成静态的键值列表。
6. 字典键值判断
##不推荐
if my_dict.has_key(key):# ...do something with d[key] ##推荐
if key in my_dict:# ...do something with d[key]
7. 字典 get 和 setdefault 方法
##不推荐
navs = {}
for (portfolio, equity, position) in data:if portfolio not in navs:navs[portfolio] = 0navs[portfolio] += position * prices[equity]
##推荐
navs = {}
for (portfolio, equity, position) in data:# 使用 get 方法navs[portfolio] = navs.get(portfolio, 0) + position * prices[equity]# 或者使用 setdefault 方法navs.setdefault(portfolio, 0)navs[portfolio] += position * prices[equity]
8. 判断真伪
##不推荐
if x == True:# ....
if len(items) != 0:# ...
if items != []:# ... ##推荐
if x:# ....
if items:# ...
9. 遍历列表以及索引
##不推荐
items = 'zero one two three'.split()
# method 1
i = 0
for item in items:print i, itemi += 1
# method 2
for i in range(len(items)):print i, items[i]##推荐
items = 'zero one two three'.split()
for i, item in enumerate(items):print i, item
10. 列表推导
##不推荐
new_list = []
for item in a_list:if condition(item):new_list.append(fn(item)) ##推荐
new_list = [fn(item) for item in a_list if condition(item)]
11. 列表推导-嵌套
##不推荐
for sub_list in nested_list:if list_condition(sub_list):for item in sub_list:if item_condition(item):# do something...
##推荐
gen = (item for sl in nested_list if list_condition(sl) \for item in sl if item_condition(item))
for item in gen:# do something...
12. 循环嵌套
##不推荐
for x in x_list:for y in y_list:for z in z_list:# do something for x &amp; y ##推荐
from itertools import product
for x, y, z in product(x_list, y_list, z_list):# do something for x, y, z
13. 尽量使用生成器代替列表
##不推荐
def my_range(n):i = 0result = []while i &lt; n:result.append(fn(i))i += 1return result # 返回列表##推荐
def my_range(n):i = 0result = []while i &lt; n:yield fn(i) # 使用生成器代替列表i += 1
*尽量用生成器代替列表,除非必须用到列表特有的函数。
14. 中间结果尽量使用imap/ifilter代替map/filter
##不推荐
reduce(rf, filter(ff, map(mf, a_list)))##推荐
from itertools import ifilter, imap
reduce(rf, ifilter(ff, imap(mf, a_list)))
*lazy evaluation 会带来更高的内存使用效率,特别是当处理大数据操作的时候。
15. 使用any/all函数
##不推荐
found = False
for item in a_list:if condition(item):found = Truebreak
if found:# do something if found... ##推荐
if any(condition(item) for item in a_list):# do something if found...
16. 属性(property)
##不推荐
class Clock(object):def __init__(self):self.__hour = 1def setHour(self, hour):if 25 &gt; hour &gt; 0: self.__hour = hourelse: raise BadHourExceptiondef getHour(self):return self.__hour##推荐
class Clock(object):def __init__(self):self.__hour = 1def __setHour(self, hour):if 25 &gt; hour &gt; 0: self.__hour = hourelse: raise BadHourExceptiondef __getHour(self):return self.__hourhour = property(__getHour, __setHour)
17. 使用 with 处理文件打开
##不推荐
f = open("some_file.txt")
try:data = f.read()# 其他文件操作..
finally:f.close()##推荐
with open("some_file.txt") as f:data = f.read()# 其他文件操作...
18. 使用 with 忽视异常(仅限Python 3)
##不推荐
try:os.remove("somefile.txt")
except OSError:pass##推荐
from contextlib import ignored # Python 3 onlywith ignored(OSError):os.remove("somefile.txt")
19. 使用 with 处理加锁
##不推荐
import threading
lock = threading.Lock()lock.acquire()
try:# 互斥操作...
finally:lock.release()##推荐
import threading
lock = threading.Lock()with lock:# 互斥操作...
python面试常见题目相关推荐
- Python面试常见题目,反转英文句子
定义一个反转函数 def reverse(str_list,start,end):while start<end:str_list[start],str_list[end]=str_list[e ...
- 软件面试常见题目(转帖)
软件面试常见题目(转帖) 1.什么是兼容性测试?兼容性测试侧重哪些方面? 参考答案: 兼容测试主要是检查软件在不同的硬件平台.软件平台上是否可以正常的运行,即是通常说的软件的可移植性. 兼容的类型 ...
- MySQL面试常见题目(六)
原文地址:MySQL面试常见题目(六) 1.字段为何需定义NOT NULL? NULL会占用更多字节,且NULL有很多坑. 2.如需存储用户密码散列,应使用什么字段? 应使用char,可节省空间且提高 ...
- Python面试常见的30个问题及答案
Python面试问题 问题1. Python的主要功能是什么? python特性如下: 解释型 动态类型 面向对象 简洁明了 免费自由 有一个庞大的社区 Q.2.区分深层和浅层拷贝. 深拷贝将对象复制 ...
- C++面试常见题目问与答(汇总一)
此次整理来自QQ群186588041,所有资料来自谭校长.张教主.H神.Robort.fight for dream.刀刀.二货 主要是总结了一些经常被问道的面试题 欢迎加入群182374342(原来 ...
- AI面试常见题目整理
首先介绍一下AI面的形式,和普通的真人即时面试不同,AI面是播放提前录制好的题目,在题目念完以后,给被试者30秒至1分钟的思考时间,然后开始记录被试者的回答,一般每个问题限制为三分钟内作答. 我目前体 ...
- python面试常见问题-Python面试常见的8个问题及答案总结
达内北京Python培训机构为大家总结下python面试题汇总,送给有需要的人! 第一家公司问的题目 1 简述解释型和编译型编程语言? 解释型语言编写的程序不需要编译,在执行的时候,专门有一个解释器能 ...
- python面试常见知识点收集,长期更新
问题 Python 1 python的数据类型 字典,字符串,列表,元组,集合 元组和列表的区别 元组和列表都属于序列. 列表属于可变序列,它的元素可以随时修改或者删除,而元组属于不可变序列,其中的元 ...
- 10道Python面试常见的问题
1.类继承 有如下的一段代码: class A(object):def show(self):print 'base show'class B(A):def show(self):print 'der ...
最新文章
- OpenCV(二十)模板匹配
- axios的this指向_vue使用axios中 this 指向问题
- ThreadLocal究竟存不存在内存泄漏?
- go 变量在其中一个函数中赋值 另一个函数_go 学习笔记之仅仅需要一个示例就能讲清楚什么闭包...
- python 福利彩票_使用Python买福彩,5个数字,20选5,有没买过
- 大数据时代的电信运营商的机遇
- android 5.0新增 ui 控件,android3.0新增ui控件示例说明.doc
- oracle大于条件,oracle中sql语句中的in的条件数量大于1000有问题
- python如何把一张图像的所有像素点的值都显示出来_情人节,教你用 Python 向女神表白...
- InputStreamReader和OutputStreamWriter
- python包管理工具pip的使用
- Linux从入门到精通——数据库
- 自学elastic search
- webpack5配置dev-server在控制台打印信息
- 前端页面调试、抓包工具——spy-debugger
- 测试无线电频率的软件叫什么,软件无线电到底是什么
- MySQL自动化巡检报告-v1.0
- 亚美柏科笔试题——java
- 5G注册流程分级详解Step4-8
- 【python爬虫笔记】验证码