Python面试常问题及延伸 你敢说你真的懂python吗?
这里总结一些Python的常见问题,也是Python面试经常提到的问题,它们都是比较 pythonic 的问题
这里并不试图给出答案,很多问题只是看回答者对Python的理解,如果你对某个问题不够清楚,just google it. 如果你对很多问题都不清楚,你应该去读一下 Python in a nutshell
- 数据类型相关
list与tuple的区别
dictionary与set的区别 - 去掉一个list中重复的元素,并保持原来的顺序。如a1=[1,2,3,4,3,32,1,1,2,3,1,32,5,6]
方法一:a2 = sorted(set(a1), key=a1.index)
方法二:a2 = sorted({}.fromkeys(a1), key=a1.index)
方法三:[a2.append(i) for i in a1 if i not in a2]
方法四:[a2.append(i) for i in a1 if not a2.count(i)]
方法五:依次遍历 - 你知不知道Python的for语句后面可以跟一个else,它是什么意思?
当for循环全部遍历完后或者while循环条件不满足时,会执行else部分。
如果循环中有break语句执行后,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__()
这些你都应该知道。详解见 http://blog.csdn.net/business122/article/details/7568446 - iterators/generators 怎样实现一个 iterator 或 generator ?
详解见http://www.cnblogs.com/tangkaixin/articles/3302256.html - map/reduce/sum ?
如果你第一次听到 map reduce 是从Google著名的分布式框架,没有关系,因为现在的计算机教育已经本末倒置,这不是你的错,但是如果你没有去研究一下它为什么叫 MapReduce , 这就是你的错了。如果你现在是第一次见到 map reduce ,赶紧去研究一下,我想你很可能对函数式编程一无所知。 - lambda 是什么东西 ?
Python中允许定义一种单行的小函数。可接受任意个参数,返回唯一一个表达式的值。 - 有没有听说过 decorator ?
详解参见http://www.cnblogs.com/Jerry-Chou/archive/2012/05/23/python-decorator-explain.html - 函数定义时在参数前面加上 * 或 ** 是什么意思? 函数调用时在参数前面加上 * 或 ** 又是什么意思?
Python - 怎样实现类的静态方法?
Python - __new__ 与 __init__ 有什么区别?
__new__:创建对象时调用,返回当前对象的一个实例相当于java里面的构造器差不多
__init__:创建完对象后调用,对当前对象的实例的一些初始化,无返回值 - “class Foo” 与 “class Foo(object)” 有什么不同 ?
Pythonpython2.2引入了new-style class.如果一个类继承了object对象,那么它就是一个new-style class.
内建的object对象.
object类是所有new-style class的祖先.object对象定义了一系列特殊的方法来实现所有对象的默认行为.
静态方法__new__用来创造类的实例.__init__方法用来初始化自己. - 谈谈关于python中对于类的理解
详解见http://www.cnblogs.com/prettymdx/archive/2012/03/14/2395481.html - 文件操作
Python里面有个非常简单的文件按行操作方式
for line in open(file_name):
print line但是要注意 line 是包含行尾的 \n 的
- 异常处理
python里面到处都是异常,这是Python的设计哲学,如果你打算学习Python,请将异常变成你的思维方式。
你可能很容易学会 try … except .. 和 try … finally.. 但是 try … except … else 是什么意思? - 谈谈range 与xrange的区别
在循环时使用。
range会直接生成一个List对象 ,而xrange是在每次调用时会返回其中的一个值。 - 对类库的熟悉程度
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 是本好书,它能解决以上几乎所有的问题,当然,它能解决的问题远不只以上这些。
- 请回答以下代码的输出结果:
flist = [] for i in range(4): def func(x): return x*i flist.append(func) for f in flist: print f(2),
正确答案如下,你答对了吗?
result:
6 6 6 6
- 计算max的值:
max((lambda x,y:(x,y*2))(3,2))
- 请回答以下代码的执行结果:
def do_query(cond): return cond.values() def foo(bar, query={}): query.setdefault('bar', bar) return do_query(query) alist = [] print foo('BAR') print foo('BAR2') print foo('BAR3', {'bar':'BAR3'})
正确答案如下,你答对了吗?
['BAR'] ['BAR'] ['BAR3']
- 请回答以下代码的输出结果:
def foo(): a = 1 def bar(): a = a + 1 bar() print a foo()
正确答案如下,你答对了吗?
UnboundLocalError: local variable 'a' referenced before assignment
- 将一串字符反序输出,你能想出几种办法?
比如讲字符str = "I love you!!" 输出为"!!uoy evol I"
以下是一种参考:
1: a = 'I love you!!' a = ''.join(reversed(a)) print a 2: a = 'I love you!!' a = a[::-1] print a
- 用多种语言实现输入一个十进制数,返回其二进制数,及其1的个数。
1 def tt(number): 2 num = 0 3 lst = [] 4 while number > 0: 5 if number%2: 6 num += 1 7 lst.append('1') 8 else: 9 lst.append('0') 10 number /= 2 11 lst.reverse() 12 print 'num:', num, 'number binary:', ''.join(lst)
原文来自:http://www.fallhunter.com/p/10192/comment-page-1
浙公网安备 33010602011771号