python面试题精选.doc





《python面试题精选.doc》由会员分享,可在线阅读,更多相关《python面试题精选.doc(44页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、-作者xxxx-日期xxxxpython面试题精选【精品文档】问题1到底什么是Python?你可以在回答中与其他技术进行对比(也鼓励这样做)。答案下面是一些关键点: Python是一种解释型语言,Python代码在运行之前不需要编译。 Python是动态类型语言,在声明变量时,不需要说明变量的类型。 Python非常适合面向对象的编程(OOP),因为它支持通过组合(composition)与继承(inheritance)的方式定义类(class)。Python中没有访问说明符public和private, 在Python语言中,函数是第一类对象(first-class objects)。这指的
2、是它们可以被指定给变量,函数既能返回函数类型,也可以接受函数作为输入。类(class)也是第一类对象。 Python代码编写快,但是运行速度比编译语言通常要慢。ython允许加入基于C语言编写的扩展,因此我们能够优化代码,消除瓶颈,这点通常是可以实现的。numpy就是一个很好地例子,它的运行速度真的非常快,因为很多算术运算其实并不是通过Python实现的。 Python用途非常广泛网络应用,自动化,科学建模,大数据应用,等等。它也常被用作“胶水语言”,帮助其他语言和组件改善运行状况。 Python让困难的事情变得容易,因此程序员可以专注于算法和数据结构的设计,而不用处理底层的细节。问题2补充缺
3、失的代码def print_directory_contents(sPath): 这个函数接受文件夹的名称作为输入参数, 返回该文件夹中文件的路径, 以及其包含文件夹中文件的路径。 # 补充代码答案def print_directory_contents(sPath): import os for sChild in os.listdir(sPath): sChildPath = os.path.join(sPath,sChild) if os.path.isdir(sChildPath): print_directory_contents(sChildPath) else: print sC
4、hildPath特别要注意以下几点: 命名规范要统一。如果样本代码中能够看出命名规范,遵循其已有的规范。 递归函数需要递归并终止。确保你明白其中的原理,否则你将面临无休无止的调用栈(callstack)。 我们使用os模块与操作系统进行交互,同时做到交互方式是可以跨平台的。你可以把代码写成sChildPath = sPath + / + sChild,但是这个在Windows系统上会出错。 熟悉基础模块是非常有价值的,但是别想破脑袋都背下来,记住Google是你工作中的良师益友。 如果你不明白代码的预期功能,就大胆提问。 坚持KISS原则!保持简单,不过脑子就能懂!为什么提这个问题: 说明面试
5、者对与操作系统交互的基础知识 递归真是太好用啦问题3阅读下面的代码,写出A0,A1至An的最终值。A0 = dict(zip(a,b,c,d,e),(1,2,3,4,5)A1 = range(10)A2 = i for i in A1 if i in A0A3 = A0s for s in A0A4 = i for i in A1 if i in A3A5 = i:i*i for i in A1A6 = i,i*i for i in A1答案A0 = a: 1, c: 3, b: 2, e: 5, d: 4A1 = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9A2 = A3 = 1
6、, 3, 2, 5, 4A4 = 1, 2, 3, 4, 5A5 = 0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81A6 = 0, 0, 1, 1, 2, 4, 3, 9, 4, 16, 5, 25, 6, 36, 7, 49, 8, 64, 9, 81问题4Python和多线程(multi-threading)。这是个好主意码?列举一些让Python代码以并行方式运行的方法。答案Python并不支持真正意义上的多线程。Python中提供了多线程包,但是如果你想通过多线程提高代码的速度,使用多线程包并不是个好主意
7、。Python中有一个被称为Global Interpreter Lock(GIL)的东西,它会确保任何时候你的多个线程中,只有一个被执行。线程的执行速度非常之快,会让你误以为线程是并行执行的,但是实际上都是轮流执行。经过GIL这一道关卡处理,会增加执行的开销。这意味着,如果你想提高代码的运行速度,使用threading包并不是一个很好的方法。不过还是有很多理由促使我们使用threading包的。如果你想同时执行一些任务,而且不考虑效率问题,那么使用这个包是完全没问题的,而且也很方便。但是大部分情况下,并不是这么一回事,你会希望把多线程的部分外包给操作系统完成(通过开启多个进程),或者是某些调
8、用你的Python代码的外部程序(例如Spark或Hadoop),又或者是你的Python代码调用的其他代码(例如,你可以在Python中调用C函数,用于处理开销较大的多线程工作)。问题5你如何管理不同版本的代码?答案:版本管理!GIT, SVN问题6下面代码会输出什么:def f(x,l=): for i in range(x): l.append(i*i) print lf(2)f(3,3,2,1)f(3)答案:0, 13, 2, 1, 0, 1, 40, 1, 0, 1, 4呃?第一个函数调用十分明显,for循环先后将0和1添加至了空列表l中。l是变量的名字,指向内存中存储的一个列表。第
9、二个函数调用在一块新的内存中创建了新的列表。l这时指向了新生成的列表。之后再往新列表中添加0、1、2和4。很棒吧。第三个函数调用的结果就有些奇怪了。它使用了之前内存地址中存储的旧列表。这就是为什么它的前两个元素是0和1了。不明白的话就试着运行下面的代码吧:l_mem = l = l_mem # the first callfor i in range(2): l.append(i*i)print l # 0, 1l = 3,2,1 # the second callfor i in range(3): l.append(i*i)print l # 3, 2, 1, 0, 1, 4l = l_m
10、em # the third callfor i in range(3): l.append(i*i)print l # 0, 1, 0, 1, 4问题7monkey patch (猴子补丁)用来在运行时动态修改已有的代码,而不需要修改原始代码。简单的monkey patch 实现:python#coding=utf-8def originalFunc(): print this is original function!def modifiedFunc(): modifiedFunc=1 print this is modified function!def main(): original
11、Func()if _name_=_main_: originalFunc=modifiedFunc main()python中所有的东西都是object,包括基本类型。查看一个object的所有属性的方法是:dir(obj)函数在python中可以像使用变量一样对它进行赋值等操作。查看属性的方法:print locals()print globals()问题8这两个参数是什么意思:*args,*kwargs?我们为什么要使用它们?答案如果我们不确定要往函数中传入多少个参数,或者我们想往函数中以列表和元组的形式传参数时,那就使要用*args;如果我们不知道要往函数中传入多少个关键词参数,或者想传
12、入字典的值作为关键词参数时,那就要使用*kwargs。args和kwargs这两个标识符是约定俗成的用法,你当然还可以用*bob和*billy,但是这样就并不太妥。下面是具体的示例:def f(*args,*kwargs): print args, kwargsl = 1,2,3t = (4,5,6)d = a:7,b:8,c:9f()f(1,2,3) # (1, 2, 3) f(1,2,3,groovy) # (1, 2, 3, groovy) f(a=1,b=2,c=3) # () a: 1, c: 3, b: 2f(a=1,b=2,c=3,zzz=hi) # () a: 1, c: 3,
13、 b: 2, zzz: hif(1,2,3,a=1,b=2,c=3) # (1, 2, 3) a: 1, c: 3, b: 2f(*l,*d) # (1, 2, 3) a: 7, c: 9, b: 8f(*t,*d) # (4, 5, 6) a: 7, c: 9, b: 8f(1,2,*t) # (1, 2, 4, 5, 6) f(q=winning,*d) # () a: 7, q: winning, c: 9, b: 8f(1,2,*t,q=winning,*d) # (1, 2, 4, 5, 6) a: 7, q: winning, c: 9, b: 8def f2(arg1,arg2,
14、*args,*kwargs): print arg1,arg2, args, kwargsf2(1,2,3) # 1 2 (3,) f2(1,2,3,groovy) # 1 2 (3, groovy) f2(arg1=1,arg2=2,c=3) # 1 2 () c: 3f2(arg1=1,arg2=2,c=3,zzz=hi) # 1 2 () c: 3, zzz: hif2(1,2,3,a=1,b=2,c=3) # 1 2 (3,) a: 1, c: 3, b: 2f2(*l,*d) # 1 2 (3,) a: 7, c: 9, b: 8f2(*t,*d) # 4 5 (6,) a: 7,
15、c: 9, b: 8f2(1,2,*t) # 1 2 (4, 5, 6) f2(1,1,q=winning,*d) # 1 1 () a: 7, q: winning, c: 9, b: 8f2(1,2,*t,q=winning,*d) # 1 2 (4, 5, 6) a: 7, q: winning, c: 9, b: 8为什么提这个问题?有时候,我们需要往函数中传入未知个数的参数或关键词参数。有时候,我们也希望把参数或关键词参数储存起来,以备以后使用。有时候,仅仅是为了节省时间。问题9下面这些是什么意思:classmethod,staticmethod,property?回答背景知识这些都
16、是装饰器(decorator)。装饰器是一种特殊的函数,要么接受函数作为输入参数,并返回一个函数,要么接受一个类作为输入参数,并返回一个类。标记是语法糖(syntactic sugar),可以让你以简单易读得方式装饰目标对象。my_decoratordef my_func(stuff): do_thingsIs equivalent todef my_func(stuff): do_thingsmy_func = my_decorator(my_func)你可以在本网站上找到介绍装饰器工作原理的教材。真正的答案classmethod,staticmethod和property这三个装饰器的使用
17、对象是在类中定义的函数。下面的例子展示了它们的用法和行为:class MyClass(object): def _init_(self): self._some_property = properties are nice self._some_other_property = VERY nice def normal_method(*args,*kwargs): print calling normal_method(0,1).format(args,kwargs) classmethod def class_method(*args,*kwargs): print calling clas
18、s_method(0,1).format(args,kwargs) staticmethod def static_method(*args,*kwargs): print calling static_method(0,1).format(args,kwargs) property def some_property(self,*args,*kwargs): print calling some_property getter(0,1,2).format(self,args,kwargs) def some_property(self,*args,*kwargs): print callin
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- python 试题 精选

限制150内