这里总结一些Python的常见问题,也是Python面试经常提到的问题,它们都是比较 pythonic 的问题,最关键的,它们都是你应该能回答的问题,如果这些问题对你来说没有什么难度,请发一份简历到 join@mapiz.com
这里并不试图给出答案,很多问题只是看回答者对Python的理解,如果你对某个问题不够清楚,just google it. 如果你对很多问题都不清楚,你应该去读一下 Python in a nutshell
- 数据类型相关
list与tuple的区别
dictionary与set的区别 - 你知不知道Python的for语句后面可以跟一个else,它是什么意思?
- list comprehension 是怎么回事,为什么要用它?为什么不用它?
(我一直记不住对应的中文叫什么,列表推导?)
即:
[ x*x for x in somelist ]
其中 somelist 是一个list。
这行代码构建了一个list,其每个元素是somelist里面每个元素与自身做*运算
复杂一点的,还可以:
[ somefunction(x) for x in somelist if anotherfunction(x) ]
即,可以用anotherfunction 过滤 somelist - 什么是 tuple 解包赋值?
即
a,b = somefunction()
要实现这个效果,somefunction应该返回一个tuple,在赋值时Python会自动解包。
当然,这不仅仅限于函数返回值的情况,像
a,b=(“value1”,"value2“,) 也是可以的 - 类似 __foo__ 这样的东西是什么玩意?
这是python里面的特殊函数或属性,常见的有
__name__
__main__
__file__
__get__()
__set__()
这些你都应该知道。 - iterators/generators 怎样实现一个 iterator 或 generator ?
- map/reduce/sum ?
如果你第一次听到 map reduce 是从Google著名的分布式框架,没有关系,因为现在的计算机教育已经本末倒置,这不是你的错,但是如果你没有去研究一下它为什么叫 MapReduce , 这就是你的错了。如果你现在是第一次见到 map reduce ,赶紧去研究一下,我想你很可能对函数式编程一无所知。 - lambda 是什么东西 ?
- 有没有听说过 decorator ?
- 函数定义时在参数前面加上 * 或 ** 是什么意思? 函数调用时在参数前面加上 * 或 ** 又是什么意思?
- 怎样实现类的静态方法?
- __new__ 与 __init__ 有什么区别?
- “class Foo” 与 “class Foo(object)” 有什么不同
- 文件操作
Python里面有个非常简单的文件按行操作方式
for line in open(file_name):
print line但是要注意 line 是包含行尾的 \n 的
- 异常处理
python里面到处都是异常,这是Python的设计哲学,如果你打算学习Python,请将异常变成你的思维方式。
你可能很容易学会 try … except .. 和 try … finally.. 但是 try … except … else 是什么意思? - 对类库的熟悉程度
Python 的强大很大程度上来源于其无数强大的类库,熟悉类库的实用总是对实际的工作帮助甚大。
类库问题也是一个很重要的常见问题,如:
实现xxx功能,有哪些类库可以用?
常见的应该了解的类库大概有:
正则表达式类库 re
系统类库 os, os.path
日期时间 datetime
多线程 Queue
单元测试 doctest, unittest
日志 logging ( 我非常喜欢这个库 )
命令行参数处理 optparse ( 这个库太棒了 )
命令行框架 cmd ( 用这个库你会发现 写Python 真的是一种享受 )
网络 urlparse, urllib, curl, httplib,socket
服务器 SocketServer ( python 自己含有一个简单的socket服务器!而且支持多种网络模型(tcp/udp, thread/process)! )
XML/HTML 解析 xml.dom, xml.sax, BeautifulSoup
还有很多很多…
当然,你没必要全都用过它们,但是你应该知道它们的存在,除非你愿意花上几个星期来实现一个本该几分钟就完成的功能。
最后,请相信我,Python in a nutshell 是本好书,它能解决以上几乎所有的问题,当然,它能解决的问题远不只以上这些。
/pandora/img/logo.top.png)
