拿网络上关于Python的面试题汇总了,给出了自认为合理的答案,有些题目不错,可以从中学到点什么,答案如不妥,请指正......

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

【题目:001】| 说说你对zen of python的理解,你有什么办法看到它?

Python之禅,Python秉承一种独特的简洁和可读行高的语法,以及高度一致的编程模式,符合“大脑思维习惯”,使Python易于学习、理解和记忆。Python同时采用了一条极简主义的设计理念,了解完整的Python哲学理念,可以在任何一个Python交互解释器中键入import this命令,这是Python隐藏的一个彩蛋:描绘了一系列Python设计原则。如今已是Python社区内流行的行话"EIBTI",明了胜于晦涩这条规则的简称. 在Python的思维方式中,明了胜于晦涩,简洁胜于复杂。>>> import this

The Zen of Python, by Tim Peters

Beautiful is better than ugly.

Explicit is better than implicit.

Simple is better than complex.

Complex is better than complicated.

Flat is better than nested.

Sparse is better than dense.

Readability counts.

Special cases aren't special enough to break the rules.

Although practicality beats purity.

Errors should never pass silently.

Unless explicitly silenced.

In the face of ambiguity, refuse the temptation to guess.

There should be one-- and preferably only one --obvious way to do it.

Although that way may not be obvious at first unless you're Dutch.

Now is better than never.

Although never is often better than *right* now.

If the implementation is hard to explain, it's a bad idea.

If the implementation is easy to explain, it may be a good idea.

Namespaces are one honking great idea -- let's do more of those!

【题目:002】| 说说你对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中的元素计算出总共需要申请的内存空间的大小,一次申请完。

【 题目:003 】 | 你调试python代码的方法有哪些?具体IDE都有调试,比如:IDLE, Eclipse+Pydev都可以设置断点调试。

pdb模块也可以做调试。

还有PyChecker和Pylint

PyChecker是一个python代码的静态分析工具,它可以帮助查找python代码的bug, 会对代码的复杂度和格式提出警告

Pylint 是另外一个工具可以进行coding standard检查。

【 题目:004 】 | 你在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的

【 题目:005 】 | 什么是GIL?什么是GIL(Global Interpreter Lock)全局解释器锁? 简单地说就是:

每一个interpreter进程,只能同时仅有一个线程来执行, 获得相关的锁, 存取相关的资源.

那么很容易就会发现,如果一个interpreter进程只能有一个线程来执行,

多线程的并发则成为不可能, 即使这几个线程之间不存在资源的竞争.

从理论上讲,我们要尽可能地使程序更加并行, 能够充分利用多核的功能.

【 题目:006】 | 什么是元类(meta_class)?元类就是用来创建类的“东西”

详情操作: http://blog.jobbole.com/21351/

【 题目:007 】 | 对比一下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循环遍历出来;

>>> for i in D.iteritems():

... print i,

...

('a', 1) ('c', 3) ('b', 2) ('d', 4)

>>> for k,v in D.iteritems():

... print k,

...

a c b d

总结:

1. 一般iteritems()迭代的办法比items()要快,特别是数据库比较大时。

2. 在Python3中一般取消前者函数

【 题目:008 】 | 是否遇到过python的模块间循环引用的问题,如何避免它?这是代码结构设计的问题,模块依赖和类依赖

如果老是觉得碰到循环引用,很可能是模块的分界线划错地方了。可能是把应该在一起的东西硬拆开了,可能是某些职责放错地方了,可能是应该抽象的东西没抽象

总之微观代码规范可能并不能帮到太多,重要的是更宏观的划分模块的经验技巧,推荐uml,脑图,白板等等图形化的工具先梳理清楚整个系统的总体结构和职责分工

采取办法,从设计模式上来规避这个问题,比如:

1. 使用 “__all__” 白名单开放接口

2. 尽量避免 import

【 题目:009 】 | 有用过with statement吗?它的好处是什么?>>> with open('text.txt') as myfile:

... while True:

... line = myfile.readline()

... if not line:

... break

... print line,

# with语句使用所谓的上下文管理器对代码块进行包装,允许上下文管理器实现一些设置和清理操作。

# 例如:文件可以作为上下文管理器使用,它们可以关闭自身作为清理的一部分。

# NOTE:在PYTHON2.5中,需要使用from __future__ import with_statement进行with语句的导入

【 题目:010】 | 用Python生成指定长度的斐波那契数列def fibs(x):

result = [0, 1]

for index in range(x-2):

result.append(result[-2]+result[-1])

return result

if __name__=='__main__':

num = input('Enter one number: ')

print fibs(num)

【 题目:011】 | Python里如何生产随机数>>> import random

>>> random.random()

0.29495314937268713

>>> random.randint(1,11)

8

>>> random.choice(range(11))

3

【 题目:012】 | Python里如何反序的迭代一个序列如果是一个list, 最快的解决方案是:

list.reverse()

try:

for x in list:

“do something with x”

finally:

list.reverse()

如果不是list, 最通用但是稍慢的解决方案是:

for i in range(len(sequence)-1, -1, -1):

x = sequence[i]

【 题目:013】 | Python中如何定义一个函数def func(arg, *args, **kwagrs): #普通函数

func_body

return

lambda x: x **2 #匿名函数

【 题目:014】 | Python匹配HTML tag的时候,<.*>和<.*?>有什么区别import re

s = ‘

Title’

print(re.match(‘<.*>’, s).group())

会返回一个匹配

Title而不是

import re

s = ‘

Title’

print(re.match(‘<.*?>’, s).group())

则会返回

<.*>这种匹配称作贪心匹配 <.*?>称作非贪心匹配

【 题目:015】 | Python里面search()和match()的区别>>> import re

>>> re.match(r'python','Programing Python, should be pythonic')

>>> obj1 = re.match(r'python','Programing Python, should be pythonic') #返回None

>>> obj2 = re.search(r'python','Programing Python, should be pythonic') #找到pythonic

>>> obj2.group()

'python'

#re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;

#re.search匹配整个字符串,直到找到一个匹配。

【 题目:016】 | Python程序中文输出问题怎么解决在Python3中,对中文进行了全面的支持,但在Python2.x中需要进行相关的设置才能使用中文。否则会出现乱码。

Python默认采取的ASCII编码,字母、标点和其他字符只使用一个字节来表示,但对于中文字符来说,一个字节满足不了需求。

为了能在计算机中表示所有的中文字符,中文编码采用两个字节表示。如果中文编码和ASCII混合使用的话,就会导致解码错误,从而才生乱码。

解决办法:

交互式命令中:一般不会出现乱码,无需做处理

py脚本文件中:跨字符集必须做设置,否则乱码

1. 首先在开头一句添加:

# coding = utf-8

# 或

# coding = UTF-8

# 或

# -*- coding: utf-8 -*-

2. 其次需将文件保存为UTF-8的格式!

3. 最后: s.decode('utf-8').encode('gbk')

【 题目:017】 | 什么是lambda函数函数使用:

1. 代码块重复,这时候必须考虑到函数,降低程序的冗余度

2. 代码块复杂,这时候必须考虑到函数,降低程序的复杂度

Python有两种函数,一种是def定义,一种是lambda函数()

当程序代码很短,且该函数只使用一次,为了程序的简洁,及节省变量内存占用空间,引入了匿名函数这个概念

>>> nums = range(2,20)

>>> for i in nums:

nums = filter(lambda x:x==i or x % i,nums)

>>> nums

[2, 3, 5, 7, 11, 13, 17, 19]

【 题目:018】 | Python里面如何实现tuple和list的转换#From list to Tuple

tuple(a_list)

#From Tuple to List

def to_list(t):

return [i if not isinstance(i,tuple) else to_list(i) for i in t]

【 题目:019】 | 请写出一段Python代码实现删除一个list里面的重复元素>>> L1 = [4,1,3,2,3,5,1]

>>> L2 = []

>>> [L2.append(i) for i in L1 if i not in L2]

>>> print L2

[4, 1, 3, 2, 5]

【 题目:020】 | Python是如何进行类型转换的>>> int('1234') # 将数字型字符串转为整形

1234

>>> float(12) # 将整形或数字字符转为浮点型

12.0

>>> str(98) # 将其他类型转为字符串型

'98'

>>> list('abcd') # 将其他类型转为列表类型

['a', 'b', 'c', 'd']

>>> dict.fromkeys(['name','age']) # 将其他类型转为字典类型

{'age': None, 'name': None}

>>> tuple([1, 2, 3, 4]) # 将其他类型转为元祖类型

(1, 2, 3, 4)

【 题目:021】 | 如何知道一个Python对象的类型>>> type([]);type('');type(0);type({});type(0.0);type((1,))

【题目:022】| Python里面如何拷贝一个对象切片S[:] # 注不能应用于字典

深浅宝贝 # 能应用于所有序列和字典

1. 浅拷贝D.copy()方法

2. 深拷贝deepcopy(D)方法

【 题目:023】 | Python中pass语句的作用是什么pass语句什么也不做,一般作为占位符或者创建占位程序

【 题目:024】 | 写一段程序逐行读入一个文本文件,并在屏幕上打印出来f = open(filename)

while True:

line = f.readline()

if not line: break

print(line)

f.close()

【 题目:025】 | 如何用Python删除一个文件import os

os.remove(filename)

【 题目:026】 | Python代码得到列表list的交集与差集>>> list1 = [1, 3, 4, 6]

>>> list2 = [1, 2, 3, 4]

>>> [i for i in list1 if i not in list2]

[6]

>>> [i for i in list1 if i in list2]

[1, 3, 4]

【 题目:027】 | Python是如何进行内存管理的python内部使用引用计数,来保持追踪内存中的对象,Python内部记录了对象有多少个引用,即引用计数,当对象被创建时就创建了一个引用计数,当对象不再需要时,这个对象的引用计数为0时,它被垃圾回收。所有这些都是自动完成,不需要像C一样,人工干预,从而提高了程序员的效率和程序的健壮性。

【 题目:028】 | 介绍一下Python下range()函数的用法>>> range(10)

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> range(1, 10)

[1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> range(0, 9, 2)

[0, 2, 4, 6, 8]

>>> range(99,0,-10)

[99, 89, 79, 69, 59, 49, 39, 29, 19, 9]

相区别的是xrange(),每次只取出一个迭代对象,如果是数据量比较大时,效率较高

在Python3中,没有xrange()函数,其功能放在了range()函数上

【题目:029】| Python异常处理介绍一下程序中出现异常情况时就需要异常处理。比如当你打开一个不存在的文件时。当你的程序中有

一些无效的语句时,Python会提示你有错误存在。下面是一个拼写错误的例子,print写成了Print

下面是异常最常见的几种角色

1. 错误处理

>>>可以在程序代码中捕捉和相应错误,或者忽略已发生的异常。

>>>如果忽略错误,PYTHON默认的异常处理行为将启动:停止程序,打印错误信息。

>>>如果不想启动这种默认行为,就用try语句来捕捉异常并从异常中恢复。

2. 事件通知

>>>异常也可用于发出有效状态的信号,而不需在程序间传递结果标志位。或者刻意对其进行测试

3. 特殊情况处理

>>>有时,发生了某种很罕见的情况,很难调整代码区处理。通常会在异常处理中处理,从而省去应对特殊情况的代码

4. 终止行为

>>>try/finally语句可确保一定会进行需要的结束运算,无论程序是否有异常

5. 非常规控制流程

【 题目:030】 | 介绍一下Python中的filter方法filter就像map,reduce,apply,zip等都是内置函数,用C语言实现,具有速度快,功能强大等

优点。

用于过滤与函数func()不匹配的值, 类似于SQL中select value != 'a'

相当于一个迭代器,调用一个布尔函数func来迭代seq中的每个元素,返回一个是bool_seq返

回为True的序列

>>>第一个参数: function or None, 函数或None

>>>第二个参数: sequence,序列

python面试题汇总_【Python环境】Python面试题汇总(一)相关推荐

  1. 做python的心得体会_实训python的心得体会

    如何学习Python的一些总结 C++.Java乃至C#都可以看做是同一类型的语言:C++还算灵活,但纷繁复杂的语法使得生产效率低下,Java提高了生产效率,却损失了灵活性;C#算是在生产效率和灵活性 ...

  2. python读取pdf文件_深入学习python解析并读取PDF文件内容的方法

    这篇文章主要学习了python解析并读取PDF文件内容的方法,包括对学习库的应用,python2.7和python3.6中python解析PDF文件内容库的更新,包括对pdfminer库的详细解释和应 ...

  3. python实现数据可视化_使用Matplotib python实现数据可视化

    python实现数据可视化 I Feel: 我觉得: In today's digital world data has become as important as air. Machines &a ...

  4. 自学python的经典书籍_有哪些 Python 经典书籍?

    内容太长,完整内容请访问原文: python 3.7极速入门教程9最佳python中文工具书籍下载 筛选了2年内优秀的python书籍,个别经典的书籍扩展到5年内. python现在的主流版本是3.7 ...

  5. python 读取内存二叉树_二叉树类python

    python中的树数据结构 线性数据中的典型顺序表和链表已经讲完: <顺序表数据结构在python中的应用> <python实现单向链表数据结构及其基本方法> <pyth ...

  6. python数据科学手册_小白入门Python数据科学

    前言 本文讲解了从零开始学习Python数据科学的全过程,涵盖各种工具和方法 你将会学习到如何使用python做基本的数据分析 你还可以了解机器学习算法的原理和使用 说明 先说一段题外话.我是一名数据 ...

  7. python gui开发工具_深入解析Python,透析应用开发,涵盖9大应用领域的Python框架...

    前言 当前,Python 已经成为最流行的程序设计语言之一,被越来越多的人作为首选语言来学习和应用.作为一种解释型的语言,Python具有内置的高级数据结构和简单有效的面向对象编程机制.同时,其语法简 ...

  8. python 宏处理库_常用的Python库,给大家分享一下!

    Tkinter---- Python默认的图形界面接口. Tkinter是一个和Tk接口的Python模块,Tkinter库提供了对Tk API的接口,它属于Tcl/Tk的GUI工具组.Tcl/Tk是 ...

  9. python办公自动化博客_自动化办公 Python 操控 Word

    虽然Word不好用, 但还必须得用它, python-docx是专门用于编辑Word文档的一个工具库, 它有两大用途, 自动化生成word文档 and 自动化修改文档 python word 1. 自 ...

  10. python urllib dns 缓存_新手用Python做一个网页爬虫

    咱们好哈,最近博主在学习Python,学习时期也遇到一些问题,获得了一些经历,在此将自个的学习体系地整理下来,假如咱们有爱好学习爬虫的话,能够将这些文章作为参阅,也期待咱们总共同享学习经历. 首要py ...

最新文章

  1. 英伟达A100可达V100的3.5倍?
  2. 怎么复制链接伟html,index.html
  3. 一个带有误差棒的另一个箱图
  4. 转:罗永浩给俞敏洪写的求职信
  5. c++中实现域内,左,右对齐的方法
  6. Nginx-location配置指南
  7. Dojo EnhancedGrid Pagination
  8. Spark _08窄依赖和宽依赖stage
  9. 【JEECG技术博文】online自定义模板的使用
  10. 牛客 2021年度训练联盟热身训练赛第二场 I题Pegasus Circle Shortcut
  11. Nginx中常用的指令配置详解
  12. 基于springboot的高校后勤系统
  13. G - Ordering Tasks(拓补排序)
  14. 后端日志【22】:时间过的很快,坚持的第7.3个月过去了,我有什么变化?
  15. 软件安全测试之系统安全测试,软件安全测试报告模板.docx
  16. php爬虫选择器-来自phpspider
  17. 东方国信基于kubernetes构建容器云平台的实践和思考
  18. word2vec和word embedding有什么区别?
  19. 一次卸载所有python包(第三方库)
  20. Gradle用户指南之初学者教程(三)

热门文章

  1. python3使用smtplib通过qq邮箱发送邮件
  2. ArrayList ListItr
  3. ElasticSearch(1)CentOS安装ElasticSearch测试CRUD
  4. 在Visual Studio 2005中调试SQL Server 2005的存储过程 (转)
  5. 凸优化第五章对偶 5.6 扰动及灵敏度分析
  6. awstats 日志分析
  7. JVM学习系列之对象访问的两种方式句柄和直接指针
  8. Power Shell08当你远程运行powershell指令(不需要管理员权限)
  9. python flask应用部署
  10. 10亿级流数据交互查询,为什么抛弃MySQL选择VoltDB?