备注:自用回答
1、为什么学习Python?
答:(1)编译型语言:一次性,将全部的程序编译成二进制文件,然后在运行。(c,c++ ,go)
优点:运行速度快。
缺点:开发效率低,不能跨平台。
(2) 解释型语言:当你的程序运行时,一行一行的解释,并运行。(python , PHP)
优点:调试代码很方便,开发效率高,并且可以跨平台。
缺点:运行速度慢。
(3) 我对程序的定义是人可以读懂,而机器刚好可以执行的一段代码,注重于代码的可读性。
而Python的定位是“优雅”、“明确”、“简单”,用它编写的程序简单易懂,这与我当初的想法不谋而合
2、通过什么途径学习的Python?
答:书籍,上网
3、Python和Java、PHP、C、C#、C++等其他语言的对比?
答:python胶水语言
4、简述解释型和编译型编程语言?
答:解释型语言编写的程序不需要编译,在执行的时候,专门有一个解释器能够将语言翻译成机器语言,每个语句都是执行的时候才翻译。这样解释型语言每执行一次就要翻译一次,效率比较低。
用编译型语言写的程序执行之前,需要一个专门的编译过程,通过编译系统,把源高级程序编译成为机器语言文件,翻译只做了一次,运行时不需要翻译,所以编译型语言的程序执行效率高,但也不能一概而论
5、Python解释器种类以及特点?
答:https://www.cnblogs.com/jackzz/p/9080288.html
6、位和字节的关系?
答: 8位(bit)=1字节(Byte
7、b、B、KB、MB、GB 的关系?
答:8位(bit)=1字节(Byte),1024字节=1KB; 1M=1024KB;1GB=1024MB
8、请至少列举5个 PEP8 规范(越多越好)。
答:http://blog.sae.sina.com.cn/archives/4781
(1) 缩进。4个空格的缩进(编辑器都可以完成此功能),不使用Tap,更不能混合使用Tap和空格。
(2) 每行最大长度79,换行可以使用反斜杠,最好使用圆括号。换行点要在操作符的后边敲回车。
(3) 类和top-level函数定义之间空两行;类中的方法定义之间空一行;函数内逻辑无关段落之间空一行;其他地方尽量不要再空行。
(4)不要在一句import中多个库,比如import os, sys不推荐。
(5) 如果采用from XX import XX引用库,可以省略‘module.’,都是可能出现命名冲突,这时就要采用import XX。
9、通过代码实现如下转换:
二进制转换成十进制:v = “0b1111011”
答:print (int(v,2))
十进制转换成二进制:v = 18
答:print (bin(v))
八进制转换成十进制:v = “011”
答:print (int(v,8))
十进制转换成八进制:v = 30
答:print (oct(v))
十六进制转换成十进制:v = “0x12”
答:print (int(v,16))
十进制转换成十六进制:v = 87
答:print (hex(v))
10、请编写一个函数实现将IP地址转换成一个整数。
如 10.3.9.12 转换规则为:
再将以上二进制拼接起来计算十进制结果:00001010 00000011 00001001 00001100 = ?
答:
print " ".join(bin(int(i))[2:].zfill(8)for iin ip.split('.'))
print "".join([" ".join(str(bin(int(i))[2:]).rjust(8,"0")for iin ip.split("."))])
print '.'.join(str(int(i,2))for iin bin.split(' '))
11、python递归的最大层数?
答:998,得到的最大数字在3925-3929之间浮动,这个是和计算机有关系的,不然也不会是一个浮动的数字了(数学逻辑讲求严谨)。
12、求结果:
13、ascii、unicode、utf-8、gbk 区别?
答:ASCII的编码是128个字符
GB2312编码用来把中文编进去的,日本把日文编进Shift_JIS里...
GBK是GB2312的扩展字符集,支持繁体字,兼容GB2312
Unicode是为了解决各国乱码的,但浪费存储空间
UTF-8字符编码把一个Unicode字符根据不同的数字大小编码成1-6字节,英文字符是1个字节,汉字通常是3个字节,生僻字符是4-6个字节
14、字节码和机器码的区别?
答:机器码是电脑CPU直接读取运行的机器指令,运行速度最快,但是非常晦涩难懂,也比较难编写,一般从业人员接触不到。
字节码是一种中间状态(中间码)的二进制代码(文件)。需要直译器转译后才能成为机器码。
15、三元运算规则以及应用场景?
答:三元运算符就是在赋值变量的时候,可以直接加判断,然后赋值
16、列举 Python2和Python3的区别?
答:https://www.cnblogs.com/kendrick/p/7478304.html
Python3对Unicode字符的原生支持
Python3采用的是绝对路径的方式进行import。
Python2中存在老式类和新式类的区别,Python3统一采用新式类。新式类声明要求继承object,必须用新式类应用多重继承。
Python3使用更加严格的缩进。
17、用一行代码实现数值交换:
答 a,b = b,a
18、Python3和Python2中 int 和 long的区别?
答:在python3里,只有一种整数类型int,大多数情况下,和python2中的长整型类似。
19、xrange和range的区别?
答:xrange 用法与 range 完全相同,所不同的是生成的不是一个list对象,而是一个生成器。要生成很大的数字序列的时候,用xrange会比range性能优很多,因为不需要一上来就开辟一块很大的内存空间。
20、文件操作时:xreadlines和readlines的区别?
答:readlines() 读取文件所有内容,按行为单位放到一个列表中,返回list类型。
xreadlines()返回一个生成器,来循环操作文件的每一行。循环使用时和readlines基本一样,但是直接打印就不同
21、列举布尔值为False的常见值?
答:bool(0),-0,"",False
22、字符串、列表、元组、字典每个常用的5个方法?
答:str[1:-1],str.split('.'),''.join(),str.strip(),str.count(),len(str)
list.append(), 在列表末尾添加新的对象
list.clear()清空列表
list.pop(),list.remove(),list.reverse(),list.sort()
tuple[0], del tuple,len(tuple),cmp(tuple),max(tuple)
dict[key],dict.popitem(),del dict[key],d.clear() 清空字典,dict.get('name')
23、lambda表达式格式以及应用场景?
答:Python中,也有几个定义好的全局函数方便使用的,filter, map, reduce
24、pass的作用?
答:pass 不做任何事情,一般用做占位语句。
25、*arg和**kwarg作用
答:当传入了更多实参的时候
*arg会把多出来的位置参数转化为tuple
**kwarg会把关键字参数转化为dict
26、is和==的区别
答:is也被叫做同一性运算符,这个运算符比较判断的是对象间的唯一身份标识,也就是id是否相同。
==是python标准操作符中的比较操作符,用来比较判断两个对象的value(值)是否相等
27、简述Python的深浅拷贝以及应用场景?
答:浅拷贝指仅仅拷贝数据集合的第一层数据,深拷贝指拷贝数据集合的所有层。所以对于只有一层的数据集合来说深浅拷贝的意义是一样的,比如字符串,数字,还有仅仅一层的字典、列表、元祖等.
对于 数字 和 字符串 而言,赋值、浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址。
28、Python垃圾回收机制?
答:Python的GC模块主要运用了引用计数来跟踪和回收垃圾。在引用计数的基础上,还可以通过“标记-清除”解决容器对象可能产生的循环引用的问题。
29、Python的可变类型和不可变类型?
答:可变类型:list,dict
不可变类型:int,long,bool,str,tuple
30、求结果:
31、求结果:
32、列举常见的内置函数?
答:doc,print,raw_input,abs,round,power
33、filter、map、reduce的作用?
答:filter 筛选
map 匹配
reduce 累加
34、一行代码实现9*9乘法表
答:print (["%d*%d=%d"%(i,j,i*j) for i in range(1,10)for j in range(1,i+1)])
35、如何安装第三方模块?以及用过哪些第三方模块?
答:pip install ,request,json
36、至少列举8个常用模块都有那些?
答:json,re,request,sys(sys.path),math(pow),random,decimal,time
37、re的match和search区别?
答:match()函数只检测RE是不是在string的开始位置匹配,
search()会扫描整个string查找匹配;
38、什么是正则的贪婪匹配?
答:贪婪模式是把所有匹配的获取到,非贪婪模式只取到第一个匹配到的字符串,
39、求结果: a. [ i % 2 for i in range(10) ] b. ( i % 2 for i in range(10) )
答:a:[0, 1, 0, 1, 0, 1, 0, 1, 0, 1]
b:返回是个生成器
40、求结果: a. 1 or 2 b. 1 and 2 c. 1 < (2==2) d. 1 < 2 == 2
答:a:1 b:2 c:False d:True
41、def func(a,b=[]) 这种写法有什么坑?
答:函数的默认参数是一个list 当第一次执行的时候实例化了一个list 第二次执行还是用第一次执行的时候实例化的地址存储 所以三次执行的结果就是 [1, 1, 1] 想每次执行只输出[1] ,默认参数应该设置为None
42、如何实现 “1,2,3” 变成 [‘1’,’2’,’3’] ?
答:str1 = "1,2,3"
print (list(str1.replace(',','')))
43、如何实现[‘1’,’2’,’3’]变成[1,2,3] ?
答:list1 = ['1','2','3']
list2 = []
for i in list1:
list2.append(int(i))
print (list2)
44、比较: a = [1,2,3] 和 b = [(1),(2),(3) ] 以及 b = [(1,),(2,),(3,) ] 的区别?
答:列表里面的内容不一样
45、如何用一行代码生成[1,4,9,16,25,36,49,64,81,100] ?
答:print (list(int(i) for i in (["%d"% (x*x ) for x in range(1,11)])))
46、一行代码实现删除列表中重复的值 ?
答:print set(list1)
47、如何在函数中设置一个全局变量 ?
答:global
48、logging模块的作用?以及应用场景?
答:使用python的标准日志模块logging可以非常方便地记录日志。
(1)程序调试
(2)了解软件程序运行情况,是否正常
(3)软件程序运行故障分析与问题定位
49、请用代码简单实现stack 。
答:classStack(object):
def__init__(object): self.stack = []
defpush(self, value): self.stack.append(value)
defpop(self): if self.stack:
self.stack.pop()
else:
raise LookupError('stack is empty!')
defis_empty(self): return bool(self.stack)
deftop(self): #取出目前stack中最新的元素 return self.stack[-1]
50、常用字符串格式化哪几种?
答:print('hello %(first)s and %(second)s'%{'first':'df','second':'another df'})
51、简述 生成器、迭代器、可迭代对象 以及应用场景?
答:迭代器是访问集合元素的一种方式,迭代器只能往前不会后退;
带有 yield 的函数在 Python 中被称之为 generator(生成器),生成器其实是一种特殊的迭代器
可以返回一个迭代器的对象都可称之为可迭代对象
52、用Python实现一个二分查找的函数。
答:def BinarySearch(arr, key):
if keyin arr :
return arr.index(key)
else:
print "找不到数字"
53、谈谈你对闭包的理解?
答:在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的引用。这样就构成了一个闭包。
54、os和sys模块的作用?
答:os模块负责程序与操作系统的交互,提供了访问操作系统底层的接口;sys模块负责程序与python解释器的交互,提供了一系列的函数和变量,用于操控python的运行时环境。
55、如何生成一个随机数?
答:import random
print random.randint(1,10)
56、如何使用python删除一个文件?
答:import os
os.remove(file_path)
57、谈谈你对面向对象的理解?
答:封装、继承、多态
58、Python面向对象中的继承有什么特点?
答:单继承、多继承
重写 父类方法有两种情况:
1.覆盖 父类的方法 2.对父类方法进行 扩展
59、面向对象深度优先和广度优先是什么?
答:深度优先 广度优先
60、面向对象中super的作用?
答:super() 函数是用于调用父类(超类)的一个方法。
super 是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO)、重复调用(钻石继承)等种种问题。
MRO 就是类的方法解析顺序表, 其实也就是继承父类方法时的顺序表。
61、是否使用过functools中的函数?其作用是什么?
答:functools模块中有两个方法是从_functools引入的,分别是partial和reduce函数。
62、列举面向对象中带爽下划线的特殊方法,如:__new__、__init__
答:__init__(self,...) 、__del__(self) 、__call__(self, *args) 、__str__(self方法)、__add__、__dic__、__getitem__、__setitem__、__delitem__、__iter__
63、如何判断是函数还是方法?
答:(1)函数要手动传self,方法不用传self
(2)如果是一个函数,用类名去调用,如果是一个方法,用对象去调用
64、静态方法和类方法区别?
答:(1)静态方法就是一个普通的方法,与类和对象无关
(2)类方法就是JAVA里面的类方法,属于类,被各个对象共享
65、列举面向对象中的特殊成员以及应用场景
答:https://www.jb51.net/article/111964.htm
66、1、2、3、4、5 能组成多少个互不相同且无重复的三位数
答:list1 = []
for iin range(1,6):
for jin range(i,6):
for kin range(j,6):
if (i != j) & (j!=k):
list1.append(i*100+j*10+k)
print len(list1)
67、什么是反射?以及应用场景?
答:python的反射,它的核心本质其实就是利用字符串的形式去对象(模块)中操作(查找/获取/删除/添加)成员,一种基于字符串的事件驱动!python的四个重要内置函数:getattr、hasattr、delattr和setattr较为全面的实现了基于字符串的反射机制
68、metaclass作用?以及应用场景?
答:metaclass的实例化结果是类,而class实例化的结果是instanc
69、用尽量多的方法实现单例模式。
答:https://www.cnblogs.com/huchong/p/8244279.html
70、装饰器的写法以及应用场景。
答:参数检查(Agrument checking)
缓存(Caching)
代理(Proxy)
提供上下文(Context Provider)
71、异常处理写法以及如何主动跑出异常(应用场景)
答:try except
72、什么是面向对象的mro
答:对于你定义的每一个类,python会计算出一个方法解析顺序(MRO)列表,这个MRO列表就是一个简单的所有基类的线性顺序列表
73、isinstance作用以及应用场景?
答:来判断一个对象是否是一个已知的类型
74、写代码并实现:
75、json序列化时,可以处理的数据类型有哪些?如何定制支持datetime类型?
答:s
76、json序列化时,默认遇到中文会转换成unicode,如果想要保留中文怎么办?
答:在编程过程还发现一个问题,在序列化时,中文汉字总是被转换为unicode码,在网上搜索后发现,在dumps函数中添加参数ensure_ascii=False即可解决
77、什么是断言?应用场景?
答:没有特定的规则,断言应该用于:
防御型的编程
运行时检查程序逻辑
检查约定
程序常量
检查文档
78、有用过with statement吗?它的好处是什么?
答:with语句适用于对资源进行访问的场合,确保不管使用过程中是否发生异常都会执行必要的“清理”操作,释放资源,比如文件使用后自动关闭、线程中锁的自动获取和释放等。
79、使用代码实现查看列举目录下的所有文件。
答:importos
forfilename inos.listdir(r'c:\\windows'):
printfilename
80、简述 yield和yield from关键字。
答:yield from 是 Python3.3 后新加的语言结构。在其他语言中,类似的结构使用 await 关键字,这个名称好多了,因为它传达了至关重要的一点:在生成器 gen 中使用 yield from subgen() 时,subgen 会获得控制权,把产出的值传给 gen 的调用方,即调用方可以直接控制 subgen。与此同时,gen 会阻塞,等待 subgen 终止。