第一部分 Python基础篇(80题)

备注:自用回答

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 终止。

推荐阅读更多精彩内容