分享
  1. 首页
  2. 文章

Python面试基础题十大陷阱,你中招了吗?

lnh2017 · · 1299 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

我们在会碰到各种各样的面试,有的甚至是HR专门为你设置的障碍,在python面试中也是,无论你是应聘Python web开发,爬虫工程师,或是数据分析,还是自动化运维,这些python面试基础题十大陷阱也许你会遇到,今天的python培训总结出来给你以防万一,收好不谢!
问题1:请问如何修改以下Python代码,使得下面的代码调用类A的show方法?

  1. class A(object)
  2. def show(self):
  3. print 'derived show'
  4. class B(A)
  5. def show(self):
  6. print 'derived show'
  7. obj=B()
  8. obj.show()

复制代码

答:这道题的考点是类继承,只要通过__class__ 方法指定类对象就可以了。补充的代码如下:

  1. obj._class_=A
  2. obj.show()

复制代码

问题2:请问如何修改以下Python代码,使得代码能够运行?

  1. class A(object):
  2. def _init_ (self,a,b):
  3. self._a = a
  4. self._b = b
  5. def myprint(self):
  6. print 'a=',self._a,'b=',self._b
  7. a1=A(10,20)
  8. a1.myprint()
  9. a1=(80)

复制代码

答:此题考察得是方法对象,为了能让对象实例能被直接调用,需要实现 __call__ 方法,补充代码如下:

  1. class A(object):
  2. def _init_ (self,a,b):
  3. self._a = a
  4. self._b = b
  5. def myprint(self):
  6. print 'a=',self._a,'b=',self._b
  7. def_call_(self,num):
  8. print'call:',num+self._a

复制代码

问题3:下面这段代码的输出是什么?

  1. class B(object):
  2. def fn(self):
  3. print"B fn"
  4. def_init_(self):
  5. print"B INIT"
  6. class A(object):
  7. def fn(self):
  8. print"A fn"
  9. def_new_(cls,a):
  10. print"NEW",a
  11. if a>10:
  12. return super(A,cls)._new_(cls)
  13. return B()
  14. def_init_(self,a):
  15. print "INIT",a
  16. a1=A(5)
  17. a1,fn()
  18. a2=A(20)
  19. a2,fn()

复制代码

答:

  1. NEW 5
  2. B INIT
  3. B fn
  4. NEW 20
  5. INIT 20
  6. A fn

复制代码

此题考察的是new和init的用法,使用 __new__ 方法,可以决定返回那个对象,也就是创建对象之前调用的,这个常见于于设计模式的单例、工厂模式。__init__ 是创建对象是调用的。
问题4:下面这段代码输出什么?

  1. 1s=[1,2,3,4]
  2. list1 =[i for i in ls if i>2
  3. print list1
  4. list2 =[1*2 for i in ls if 1>2
  5. print list2
  6. dicl={x: x**2 for x in(2, 4, 6)}
  7. print dic1
  8. dic2={x: ' item'+ str(x**2)for x in (2, 4, 6)}
  9. print dic2
  10. setl ={x for x in 'hello world' if x not in 'low level'}
  11. print set1

复制代码

答:

  1. [3,4]
  2. [6,8]
  3. {2:4,4:16,6:36}
  4. {2:'item4',4:'item16’,6:'item36"}
  5. set(["h",'r','d"])

复制代码

此题考察的是列表和字典的生成。
问题5:下面这段代码输出什么?

  1. num= 9
  2. def f1():
  3. um=20
  4. def f2():
  5. print num
  6. f2()
  7. f1()
  8. f2()

复制代码

答:

  1. 9
  2. 9

复制代码

此题考察全局变量和局部变量。num 不是个全局变量,所以每个函数都得到了自己的 num 拷贝,如果你想修改 num ,则必须用 global 关键字声明。比如下面这样

  1. num=9
  2. def f1():
  3. global num
  4. um=20
  5. def f2():
  6. print num
  7. f2()
  8. f1()
  9. f2()
  10. #prints:
  11. #9
  12. #20

复制代码
问题6:如何使用一行代码交换两个变量值?

  1. a=8
  2. b=9

复制代码

答:

  1. (a,b)=(b,a)

复制代码

问题7:如何添加代码,使得没有定义的方法都调用mydefault方法?

  1. class A(object):
  2. def_init_(self,a,b):
  3. self.a1=a
  4. self.b1=b
  5. print'init'
  6. def mydefault(self):
  7. print'default'
  8. a1=A(10,20)
  9. a1.fn1()
  10. a1.fn2()
  11. a1.fn3()

复制代码

答:

  1. class A(object):
  2. def_init_(self,a,b):
  3. self.a1=a
  4. self.b1=b
  5. print'init'
  6. def mydefault(self):
  7. print'default'
  8. def_getattr_(self,name):
  9. return self.mydefault
  10. a1=A(10,20)
  11. a1.fn1()
  12. a1.fn2()
  13. a1.fn3()

复制代码

此题的考的是Python的默认方法, 只有当没有定义的方法调用时,才会调用方法 __getattr__。当 fn1 方法传入参数时,我们可以给 mydefault 方法增加一个 *args 不定参数来兼容。

  1. class A(object):
  2. def_init_(self,a,b):
  3. self.a1=a
  4. self.b1=b
  5. print'init'
  6. def mydefault(self,*args):
  7. print'default:'+str(args[0])
  8. def_getattr_(self,name):
  9. print"other fn:",name
  10. return self.mydefault
  11. a1=A(10,20)
  12. a1.fn1(33)
  13. a1.fn2('hello')
  14. a1.fn3(10)

复制代码
问题8:一个包里有三个模块,mod1.py , mod2.py , mod3.py ,但使用 from demopack import * 导入模块时,如何保证只有 mod1 、 mod3 被导入了。
答:在包中增加 __init__.py 文件,并在文件中增加:

  1. _all_=['mod1','mod3']

复制代码

问题9:写一个函数,接收整数参数 n ,返回一个函数,函数返回n和参数的积。
答:

  1. def mulby(num):
  2. def gn(val):
  3. return num*val
  4. return gn
  5. zw=mulby(7)
  6. print(zw(9));

复制代码

问题10:请问下面的代码有什么隐患?(Python2中)

  1. def strtest1(num):
  2. str='first'
  3. for i in range(num):
  4. str+="X"
  5. return str

复制代码

答:由于变量str是个不可变对象,每次迭代,python都会生成新的str对象来存储新的字符串,num越大,创建的str对象越多,内存消耗越大。


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
1299 次点击
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏