第十三章:python基础面试80题

女生的网名这么多〃 提交于 2019-11-26 07:17:56

文章目录

1. 为什么学习Python

Python语言比较简单,不需要自己去写变量的数据类型。Python可以实现多继承,而Java和C#只能实现单继承。相对于Java和C#语言,接口是一种数据类型,主要用于约束派生类中必须实现制定的方法,但Python不存在。

2. 通过什么途径学习的Python

通过看纸质的书,网上的教程,网课,微信公众号等……

3. Python和Java、PHP、C、C#、C++等其他语言的对比

python相对于Java、PHP、C、C#、C++等其他语言而言,语法比较简单,易学。

4. 简述解释型和编译型编程语言

解释型编程语言只在执行程序时,从上到下把写过的代码一行一行的解释成机器码并给计算机来执行(边解释边执行)。编译型语言需要把源程序的每一条语句都编译成机器语言码,并保存成二进制文件,运行时计算机可以直接识别并运行。

5. Python解释器种类以及特点

python2的解释器与python3的解释器,python2解释器与python3解释器有很大不同。

6. 位和字节的关系

1bytes = 8bit

7. b、B、KB、MB、GB 的关系

1B = 24bit
1KB = 1024B
1MB = 1024KB
1GB = 1024MB

8. 请至少列举5个 PEP8 规范
9. 通过代码实现如下转换

1.二进制转换成十进制:v = “0b1111011”
2.十进制转换成二进制:v = 18
3.八进制转换成十进制:v = “0o11”
4.十进制转换成八进制:v = 30
5.十六进制转换成十进制:v = “0x12”
6.十进制转换成十六进制:v = 87

1. 二进制转换成十进制:v = “0b1111011”

In [1]: v = '0b1111011'
In [2]: val = int(v,2)
In [3]: print(val)
123

2.十进制转换成二进制:v = 18

In [1]: v = 18
In [2]: val = bin(v)
In [3]: print(val)
0b10010

3.八进制转换成十进制:v = “0o11”

In [1]: v = '0o11'
In [2]: val = int(v,8)
In [3]: print(val)
9

4.十进制转换成八进制:v = 30

In [1]: v = 30
In [2]: val = oct(v)
In [3]: print(val)
0o36

5.十六进制转换成十进制:v = “0x12”

In [1]: v = '0x12'
In [2]: val = int(v,16)
In [3]: print(val)
18

6.十进制转换成十六进制:v = 87

In [1]: v = 87
In [2]: val = hex(v)
In [3]: print(val)
0x57
10. 请编写一个函数实现将IP地址转换成一个整数

如 10.3.9.12 转换规则为:
10 00001010
3 00000011
9 00001001
12 00001100

再将以上二进制拼接起来计算十进制结果:00001010 00000011 00001001 00001100 = ?

# coding:utf-8
def count_ip(ip):
    ip_list = ip.split('.')
    for item in ip_list:
        val = bin(int(item))[2:]
        if len(val) < 8:
            result_item = '0' * (8 - len(val)) + val
        print(result_item)

count_ip('10.3.9.12')
'''
00001010
00000011
00001001
00001100
'''

# coding:utf-8
def count_ip(ip):
    ip_list = ip.split('.')
    result = ''
    for item in ip_list:
        val = bin(int(item))[2:]
        if len(val) < 8:
            result_item = '0' * (8 - len(val)) + val
        result += result_item
    return int(result, base=2)

val = count_ip('10.3.9.12')
print(val)
'''
167971084
'''
11. python递归的最大层数(次数)

python中默认递归限制的最大次数是1000层,查看默认最大层数:

# coding:utf-8
import sys

print(sys.getrecursionlimit())  # 1000
12. 求结果

v1 = 1 or 3
v2 = 1 and 3
v3 = 0 and 2 and 1
v4 = 0 and 2 or 1
v5 = 0 and 2 or 1 or 4
v6 = 0 or Flase and 1

v1 = 1 or 3:结果是1

In [1]: print(1 or 3)
1

v2 = 1 and 3:结果是3

In [2]: print(1 and 3)
3

v3 = 0 and 2 and 1:结果是0

In [3]: print(0 and 2 and 1)
0

v4 = 0 and 2 or 1:结果是1

In [4]: print( 0 and 2 or 1)
1

v5 = 0 and 2 or 1 or 4:结果是1

In [5]: print(0 and 2 or 1 or 4)
1

v6 = 0 or Flase and 1:结果是False

In [7]: print(0 or False and 1)
False
13. ascii、unicode、utf-8、gbk 区别
14. 字节码和机器码的区别
15. 三元运算规则以及应用场景
16. 列举 Python2和Python3的区别
17. 用一行代码实现数值交换

a = 1,b = 2

18. Python3和Python2中 int 和 long的区别
19. xrange和range的区别
20. 文件操作时:xreadlines和readlines的区别
21. 列举布尔值为False的常见值?
22. 字符串、列表、元组、字典每个常用的5个方法?
23. lambda表达式格式以及应用场景?
24. pass的作用?
25. *arg和**kwarg作用
26. is和==的区别
27. 简述Python的深浅拷贝以及应用场景?
28. Python垃圾回收机制?
29. Python的可变类型和不可变类型?
30. 求结果

v = dict.fromkeys([‘k1’,‘k2’],[])
v[‘k1’].append(666)
print(v)
v[‘k1’] = 777

print(v)

31. 求结果
32. 列举常见的内置函数
33. filter、map、reduce的作用
34. 一行代码实现9*9乘法表
35. 如何安装第三方模块,以及用过哪些第三方模块
36. 至少列举8个常用模块都有那些
37. re的match和search区别?
38. 什么是正则的贪婪匹配?
39. 求结果:

a. [ i % 2 for i in range(10) ]
b. ( i % 2 for i in range(10) )

40. 求结果:

a. 1 or 2
b. 1 and 2
c. 1 < (2==2)
d. 1 < 2 == 2

41. def func(a,b=[]) 这种写法有什么坑
42. 如何实现 “1,2,3” 变成 [‘1’,’2’,’3’]
43. 如何实现[‘1’,’2’,’3’]变成[1,2,3]
44. 比较: a = [1,2,3] 和 b = [(1),(2),(3) ] 以及 b = [(1,),(2,),(3,) ] 的区别
45. 如何用一行代码生成[1,4,9,16,25,36,49,64,81,100]
46. 一行代码实现删除列表中重复的值
47. 如何在函数中设置一个全局变量
48. logging模块的作用?以及应用场景
49. 请用代码简答实现stack
50. 常用字符串格式化哪几种
51. 简述 生成器、迭代器、可迭代对象 以及应用场景
52. 用Python实现一个二分查找的函数
53. 谈谈你对闭包的理解
54. os和sys模块的作用
55. 如何生成一个随机数
56. 如何使用python删除一个文件
57. 谈谈你对面向对象的理解(面向对象可以解决什么问题)

面向对象中的最重要的是封装,可以将实现归类和打包。
归类:将函数放到一个类中
打包:可以将数据打包放到对象中

58. Python面向对象中的继承有什么特点

继承可以实现代码的复用,当两个类或多个类中有相同的方法时,为了避免代码重复编写,会把这些方法放到基类中。继承不仅可以使用单继承,还可以使用多继承。

59. 面向对象深度优先和广度优先是什么
60. 面向对象中super的作用

super不是指父类(基类),而是按照类的继承顺序指下一个类。下面是帮助理解的程序代码:

# coding:utf-8
class Base(object):
    def f1(self):
        print('Base.f1()')
        pass

class Foo1(object):
    def f1(self):
        super().f1()

class Foo2(object):
    def f1(self):
        print('Foo2.f1()')

class Info(Foo1, Foo2):
    pass

obj = Info()
obj.f1()
'''
先找Info类中有无f1方法,确认Info类中没有f1方法
下面按照类的继承顺序,找下一个类Foo1
Foo1中找到f1方法,Foo1中的f1方法执行super().f1()
super().f1()即:按照Info类的继承顺序找下一个类(注意:并不是去Foo1的基类object中找f1),看有无f1方法
下一个类是Foo2,在Foo2中找到了f1方法,所以执行Foo2类中的f1方法
'''
61. 是否使用过functools中的函数?其作用是什么
62. 列举面向对象中带爽下划线的特殊方法,如:__ new __ 、__ init __

_ _ init _ _

_ _ new _ _

_ _ call _ _

_ _ getitem _ _

_ _ setitem_ _

_ _ delitem_ _

_ _ add _ _

_ _ enter _ _

_ _ exit _ _

_ _ new _ _

63. 如何判断是函数还是方法

一般我们认为在类中是方法,写在外面的是函数。其实,这样判断是函数还是方法是不精准的。方法和函数的区分,不仅和定义的位置有关系,还和方法或函数的调用者有关系。如果通过对象.xxx调用,那么xxx就是方法;如果通过类.xxx调用或者直接执行xxx,那么xxx就是个函数。

64. 静态方法和类方法区别
65. 列举面向对象中的特殊成员以及应用场景

_ _ init _ _
类名():自动执行_ _ init _ _方法

_ _ call _ _
对象():自动执行_ _ call _ _方法

_ _ getitem _ _
对象[]:自动执行_ _ getitem _ _方法

_ _ setitem_ _
对象[‘xxx’] = xx:自动执行_ _ getitem _ _方法

_ _ delitem_ _
del 对象[xxx]:自动执行_ _ delitem_ _方法

_ _ add _ _
对象+对象:自动执行_ _ add_ _方法

_ _ enter _ _ 与_ _ exit _ _
with 对象:自动执行_ _ enter _ _ exit _ _方法

_ _ new _ _
类():其实先执行_ _ new _ _方法,再执行 _ _ init _ _方法

66. 1、2、3、4、5 能组成多少个互不相同且无重复的三位数
67. 什么是反射?以及应用场景?

反射主要是指程序可以访问、检测和修改它本身状态或行为的一种能力(自省)。
python面向对象中的反射就是通过字符串获取模块、对象或类的属性,进行操作。

68. metaclass作用?以及应用场景
69. 用尽量多的方法实现单例模式
70. 装饰器的写法以及应用场景
71. 异常处理写法以及如何主动跑出异常(应用场景)
72. 什么是面向对象的mro
73. isinstance作用以及应用场景

判断第对象是否是某一个指定类或其及父类的实例。

74. 写代码并实现

Given an array of integers, return indices of the two numbers such that they add up to a specific target.You may assume that each input would
have exactly one solution, and you may not use the same element twice.
Example:

      Given nums = [2, 7, 11, 15], target = 9,

Because nums[0] + nums[1] = 2 + 7 = 9,

       return [0, 1]
75. json序列化时,可以处理的数据类型有哪些?如何定制支持datetime类型
76. json序列化时,默认遇到中文会转换成unicode,如果想要保留中文怎么办
77. 什么是断言?应用场景
78. 有用过with statement吗?它的好处是什么
79. 使用代码实现查看列举目录下的所有文件
80. 简述 yield和yield from关键字
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!