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)” 有什么不同 ?
    Python

    python2.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
View Code
  • 计算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']
View Code
  • 请回答以下代码的输出结果:
def foo():
    a = 1
    def bar():
        a = a + 1
    bar()
    print a

foo()

  正确答案如下,你答对了吗?

UnboundLocalError: local variable 'a' referenced before assignment
View Code
  • 将一串字符反序输出,你能想出几种办法?

  比如讲字符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
View Code
  •  用多种语言实现输入一个十进制数,返回其二进制数,及其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)
View Code

 

 

原文来自:http://www.fallhunter.com/p/10192/comment-page-1

 

posted @ 2013-09-04 23:43  开心星  阅读(384)  评论(0)    收藏  举报