现在编程界,可谓最火的语言就是Python,Python编程学习起来很费事,但是面试时也会有很多的问题,今天就让我们扣丁学堂为大家列举几点常见的问题。
【题目:001】说说你对pythonic的看法,尝试解决下面的小问题
#简洁,明了,严谨,灵活
#交换两个变量值
a,b=b,a
#去掉list中的重复元素
old_list=[1,1,1,3,4]
new_list=list(set(old_list))
#翻转一个字符串
s='abcde'
ss=s[::-1]
#用两个元素之间有对应关系的list构造一个dict
names=['jianpx','yue']
ages=[23,40]
m=dict(zip(names,ages))
#将数量较多的字符串相连,如何效率较高,为什么
fruits=['apple','banana']
result=''.join(fruits)
#python字符串效率问题之一就是在连接字符串的时候使用‘+’号,例如s=‘s1’+‘s2’+‘s3’+...+’sN’,总共将N个字符串连接起来,但是使用+号的话,python需要申请N-1次内存空间,然后进行字符串拷贝。原因是字符串对象PyStringObject在python当中是不可变对象,所以每当需要合并两个字符串的时候,就要重新申请一个新的内存空间(大小为两个字符串长度之和)来给这个合并之后的新字符串,然后进行拷贝。所以用+号效率非常低。建议在连接字符串的时候使用字符串本身的方法join(list),这个方法能提高效率,原因是它只是申请了一次内存空间,因为它可以遍历list中的元素计算出总共需要申请的内存空间的大小,一次申请完。
【题目:002】|你调试python代码的方法有哪些?
具体IDE都有调试,比如:IDLE,Eclipse+Pydev都可以设置断点调试。
pdb模块也可以做调试。
还有PyChecker和Pylint
PyChecker是一个python代码的静态分析工具,它可以帮助查找python代码的bug,会对代码的复杂度和格式提出警告
Pylint是另外一个工具可以进行codingstandard检查。
【题目:003】|你在github上都fork过哪些python库,列举一下你经常使用的,每个库用一句话描述下其功能
http://rogerdudler.github.io/git-guide/index.zh.html#关于git简明指南
http://www.zhihu.com/question/20070065#关于git的BBS
http://www.techug.com/githug-for-designer#关于github的
【题目:004】|什么是GIL?
什么是GIL(GlobalInterpreterLock)全局解释器锁?简单地说就是:
每一个interpreter进程,只能同时仅有一个线程来执行,获得相关的锁,存取相关的资源.
那么很容易就会发现,如果一个interpreter进程只能有一个线程来执行,
多线程的并发则成为不可能,即使这几个线程之间不存在资源的竞争.
从理论上讲,我们要尽可能地使程序更加并行,能够充分利用多核的功能.
【题目:005】|什么是元类(meta_class)?
元类就是用来创建类的“东西”
详情操作:http://blog.jobbole.com/21351/
【题目:006】|对比一下dict中items与iteritems?
>>>D={'a':1,'b':2,'c':3,'d':4}
>>>D.items()#一次性取出所有
[('a',1),('c',3),('b',2),('d',4)]
>>>D.iteritems()#迭代对象,每次取出一个。用for循环遍历出来;
<dictionary-itemiteratorobjectat0x00000000026243B8>
>>>foriinD.iteritems():
...printi,
...
('a',1)('c',3)('b',2)('d',4)
>>>fork,vinD.iteritems():
...printk,
...
acbd
总结:
1.一般iteritems()迭代的办法比items()要快,特别是数据库比较大时。
2.在Python3中一般取消前者函数
【题目:007】|是否遇到过python的模块间循环引用的问题,如何避免它?
这是代码结构设计的问题,模块依赖和类依赖
如果老是觉得碰到循环引用,很可能是模块的分界线划错地方了。可能是把应该在一起的东西硬拆开了,可能是某些职责放错地方了,可能是应该抽象的东西没抽象
总之微观代码规范可能并不能帮到太多,重要的是更宏观的划分模块的经验技巧,推荐uml,脑图,白板等等图形化的工具先梳理清楚整个系统的总体结构和职责分工
采取办法,从设计模式上来规避这个问题,比如:
1.使用“__all__”白名单开放接口
2.尽量避免import
【题目:008】|有用过withstatement吗?它的好处是什么?
>>>withopen('text.txt')asmyfile:
...whileTrue:
...line=myfile.readline()
...ifnotline:
...break
...printline,
#with语句使用所谓的上下文管理器对代码块进行包装,允许上下文管理器实现一些设置和清理操作。
#例如:文件可以作为上下文管理器使用,它们可以关闭自身作为清理的一部分。
#NOTE:在PYTHON2.5中,需要使用from__future__importwith_statement进行with语句的导入
【题目:009】|用Python生成指定长度的斐波那契数列
deffibs(x):
result=[0,1]
forindexinrange(x-2):
result.append(result[-2]+result[-1])
returnresult
if__name__=='__main__':
num=input('Enteronenumber:')
printfibs(num)
想要学习Python或者想要进行Python培训的小伙伴就选择口碑良好的扣丁学堂进行学习吧,扣丁学堂不仅有专业的老师和与时俱进的课程体系,更有大量的Python视频教程供学员观看学习,想要学好Python高薪就业的小伙伴抓紧时间行动吧。扣丁学堂Python技术交流群:816572891。