python是一种解释型、面向 的程序语言_python面试题

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

1、为什么学习Python?

python入门简单。

Python编写代码的速度非常的快,而且非常注重代码的可读性,非常适合多人参与的项目。

Python支持多平台开发,用它编写的代码可以不经过任何转换就能在Linux与Windows系统任何移植,在苹果OS系统也没有任何兼容性的问题。

2、通过什么途径学习的Python?

自己看书,网上查资料。查看网上的授课视频

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

python是一种解释型语言,python是完全面向对象的语言,完全支持继承、重载、派生、多继承,有益于增强源代码的复用性。胶水语言

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

编译型语言:把做好的源程序全部编译成二进制代码的可运行程序。然后,可直接运行这个程序。

解释型语言:把做好的源程序翻译一句,然后执行一句,直至结束!

编译语言是在编译后可以直接运行,而解释语言的执行需要一个解释环境。

5、Python解释器种类以及特点?

CPython  使用最广的Python解释器。

IPython  是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所增强

PyPy  显著提高Python代码的执行速度。

Jython   是运行在Java平台上的Python解释器,可以直接把Python代码编译成Java字节码执行。

IronPython     是运行在微软.Net平台上的Python解释器,可以直接把Python代码编译成.Net的字节码。

6、位和字节的关系?

1byte=8bit

最小的存储单位称为位(bit

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

1TB=1024GB,

1GB=1024MB;

1MB=1024KB;

1KB=1024B;

1B=8bit

8、请至少列举5个 PEP8 规范(越多越好)。

缩进   每级缩进用4个空格

最大行宽   限制所有行的最大行宽为79字符。

空行  两行空行分割顶层函数和类的定义

导入  导入在单独行

表达式和语句的空格  , 括号里边避免空格   逗号,冒号,分号之前避免空格

``````

9、通过代码实现如下转换:

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

>>> v='0b1111011'

>>> print(int(v,2))

123

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

>>> v=18

>>> print(bin(v))

0b10010

八进制转换成十进制:v = “011”

>>> v = "011"

>>> print(int(v,8))

9

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

>>> v=30

>>> print(oct(v))

0o36

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

>>> v = "0x12"

>>> print(int(v,16))

18

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

>>> v=87

>>> print(hex(v))

0x57

10、请编写一个函数实现将IP地址转换成一个整数。

如 10.3.9.12 转换规则为:

10           00001010

3            00000011

9            00001001

12           00001100

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

11、python递归的最大层数?

理论上是1000左右

12、求结果:

v1 =1or3

v2 =1and3

v3 =0and2and1

v4 =0and2or1

v5 =0and2or1or4

v6 =0orFlaseand1

13、ascii、unicode、utf-8、gbk 区别?

ASCII码  使用一个字节编码,所以它的范围基本是只有英文字母、数字和一些特殊符号 ,只有256个字符。

Unicode  能够表示全世界所有的字节

GBK  是只用来编码汉字的,GBK全称《汉字内码扩展规范》,使用双字节编码。

UTF-8  是一种针对Unicode的可变长度字符编码,又称万国码

14、字节码和机器码的区别?

机器码是电脑CPU直接读取运行的机器指令,运行速度最快,但是非常晦涩难懂,也比较难编写,一般从业人员接触不到。

字节码是一种中间状态(中间码)的二进制代码(文件)。需要直译器转译后才能成为机器码。

15、三元运算规则以及应用场景?

三元操作符是if-else的简化写法

16、列举 Python2和Python3的区别?

简单的说,2是旧3是新,3是2的升级版,3完全高于2,2是时代的眼泪3是现在和未来,2逐渐被淘汰3用的人越来越多

输入函数

py2:input_raw()

py3:input()

1/2的结果

py2:返回0

py3:返回0.5,没有了int和long的区别

编码

py2:默认编码ascii

py3:默认编码utf-8

。。。。。。。。

17、用一行代码实现数值交换:

a = 1

b = 2

a,b=b,a

18、Python3和Python2中 int 和 long的区别?

python2有非浮点数准备的int和long类型。int类型最大值不能超过sys.maxint,而且这个最大值是平台相关的。可以通过在数字的末尾附上一个L来定义长整型,显然,它比int类型表示的数字范围更大。在python3里,只有一种整数类型int,大多数情况下,和python2中的长整型类似。

19、xrange和range的区别?

xrange 用法与 range 完全相同,所不同的是生成的不是一个list对象,而是一个生成器。

20、文件操作时:xreadlines和readlines的区别?

readlines() 读取文件所有内容,按行为单位放到一个列表中,返回list类型。

xreadlines()返回一个生成器,来循环操作文件的每一行。循环使用时和readlines基本一样,但是直接打印就不同

21、列举布尔值为False的常见值?

值为0的数

空列表

空字符串

空元组

空字典

22、字符串、列表、元组、字典每个常用的5个方法?

字符串:find   查找是否存在;count 统计;split  切片;upper 小写转大写;lower  大写转小写

列表:len  长度  ;append 新增;remove  删除;sort  排序;in  判断

元组:元组与列表类似,不同之处在于元组的元素不能 修改。 元组使用小括号,列表使用方括号。元组的功能 = 列表不 修改的功能

字典:字典.pop(键) 根据键,删除指定的值,并将此值返回;字典.clear() 清空字典里的键值对; 键 in 字典 如果键在字典中存在,返回True否则,返回 False; 字典.get(键,[默认值]) 通过dict提供的get方法,如果key不存在,可 以返回None,或者自己指定的值; len(字典)    计算字典元素个数,即键的总数

23、lambda表达式格式以及应用场景?

代替一些简单的函数,使得代码看上去更简洁并且可读性高

f = lambda x:pow(x,2)

f(2)

24、pass的作用?

1,空语句 do nothing

2,保证格式完整

3,保证语义完整

25、*arg和**kwarg作用

允许我们在调用函数的时候传入多个实参

26、is和==的区别

is也被叫做同一性运算符,这个运算符比较判断的是对象间的唯一身份标识,也就是id是否相同。

==是python标准操作符中的比较操作符,用来比较判断两个对象的value(值)是否相等

27、简述Python的深浅拷贝以及应用场景?

导入模块:import copy

浅拷贝:copy.copy

深拷贝:copy.deepcopy

字面理解:浅拷贝指仅仅拷贝数据集合的第一层数据,深拷贝指拷贝数据集合的所有层。

28、Python垃圾回收机制?

引用计数:当一个对象的引用被创建或者复制时,对象的引用计数加1;当一个对象的引用被销毁时,对象的引用计数减1,当对象的引用计数减少为0时,就意味着对象已经再没有被使用了,可以将其内存释放掉。

标记-清除:1. 寻找跟对象(root object)的集合作为垃圾检测动作的起点,跟对象也就是一些全局引用和函数栈中的引用,这些引用所指向的对象是不可被删除的;2. 从root object集合出发,沿着root object集合中的每一个引用,如果能够到达某个对象,则说明这个对象是可达的,那么就不会被删除,这个过程就是垃圾检测阶段;3. 当检测阶段结束以后,所有的对象就分成可达和不可达两部分,所有的可达对象都进行保留,其它的不可达对象所占用的内存将会被回收,这就是垃圾回收阶段。(底层采用的是链表将这些集合的对象连接在一起)

分代回收:将系统中的所有内存块根据其存活时间划分为不同的集合,每一个集合就成为一个“代”,Python默认定义了三代对象集合,垃圾收集的频率随着“代”的存活时间的增大而减小。也就是说,活得越长的对象,就越不可能是垃圾,就应该减少对它的垃圾收集频率。那么如何来衡量这个存活时间:通常是利用几次垃圾收集动作来衡量,如果一个对象经过的垃圾收集次数越多,可以得出:该对象存活时间就越长。

29、Python的可变类型和不可变类型?

Python的每个对象都分为可变和不可变,主要的核心类型中,数字、字符串、元组是不可变的,列表、字典是可变的。

30、求结果:

v = dict.fromkeys(['k1','k2'],[])

v[‘k1’].append(666)

print(v)

{'k2': [666], 'k1': [666]}

v[‘k1’] =777

print(v)

{'k2': [666], 'k1': 777}

31、求结果:

32、列举常见的内置函数?

abs() 函数返回数字的绝对值。

bool() 函数用于将给定参数转换为布尔类型,如果没有参数,返回 False。

dict() 函数用于创建一个字典。

dir() 函数不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。

33、filter、map、reduce的作用?

filter,迭代器,把符合要求的值列出来

map,把对参数的操作就过列出来

reduce把一个函数作用在一个序列[x1, x2, x3...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算

34、一行代码实现9*9乘法表

print('\n'.join([''.join(['%s*%s=%-2s'% (y,x,x*y)foryinrange(1,x+1)])forxinrange(1,10)]))

35、如何安装第三方模块?以及用过哪些第三方模块?

pip install 模块名        pymysql      unidecode,ascii和Unicode文本转换函数。

36、至少列举8个常用模块都有那些?

time;     datetime;     random;     os;    pickle;     sys;    hashlib;   re

37、re的match和search区别?

match()函数只检测RE是不是在string的开始位置匹配,

search()会扫描整个string查找匹配;

38、什么是正则的贪婪匹配?

正则表达式一般趋向于最大长度匹配,也就是所谓的贪婪匹配

39、求结果:

a. [ i % 2 for i in range(10) ]     ======》[0, 1, 0, 1, 0, 1, 0, 1, 0, 1]

b. ( i % 2 for i in range(10) )  ====== 》 一个迭代器对象

40、求结果:

a. 1 or 2  ===========》1

b. 1 and 2   =============》 2

c. 1 < (2==2)   ========》 False

d. 1 < 2 == 2   =========》True

41、def func(a,b=[]) 这种写法有什么坑?

函数的第二个默认参数是一个list,当第一次执行的时候实例化了一个list,第二次执行还是用第一次执行的时候实例化的地址存储

42、如何实现 “1,2,3” 变成 [‘1’,’2’,’3’] ?

43、如何实现[‘1’,’2’,’3’]变成[1,2,3] ?

a=['1','2','3']

[  int(i) for i in a]

44、比较: a = [1,2,3] 和 b = [(1),(2),(3) ] 以及 b = [(1,),(2,),(3,) ] 的区别?

a = [1,2,3]就是一个普通列表

b = [(1),(2),(3) ]

b = [(1,),(2,),(3,) ]   包含一个个元组的列表

45、如何用一行代码生成[1,4,9,16,25,36,49,64,81,100] ?

[ i*i for i in range(1,11)]

46、一行代码实现删除列表中重复的值 ?

list(set([列表]))

47、如何在函数中设置一个全局变量 ?

在一个函数中用global声明一个变量

48、logging模块的作用?以及应用场景?

记录程序运行情况的日志功能.

用户登录

49、请用代码简答实现stack 。

class Stack(object):

def__init__(self):

self.stack = []

defpush(self, value):# 进栈        self.stack.append(value)

defpop(self):#出栈if self.stack:

self.stack.pop()

else:

raiseLookupError(‘stack is empty!‘)

defis_empty(self):# 如果栈为空return bool(self.stack)

def top(self):

#取出目前stack中最新的元素returnself.stack[-1]

50、常用字符串格式化哪几种?

print('hello %s and %s'%(df,another df))

print('hello {} and {}'.format{df,another df})

51、简述 生成器、迭代器、可迭代对象 以及应用场景?

生成器:一边循环一边计算的机制。应用场景:不想同一时间将所有计算出来的大量结果集分配到内存当中

迭代器:可以被 next() 函数调用并不断返回下一个值的对象

可迭代对象:能作用于 for 循环的都是 可迭代对象

52、用Python实现一个二分查找的函数。

53、谈谈你对闭包的理解?

在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的引用。这样就构成了一个闭包。

54、os和sys模块的作用?

os模块负责程序与操作系统的交互,提供了访问操作系统底层的接口

sys模块负责程序与python解释器的交互,提供了一系列的函数和变量,用于操控python的运行时环境。

55、如何生成一个随机数?

import  random

random.randint(1,99)

56、如何使用python删除一个文件?

import os

os.remove(path)

57、谈谈你对面向对象的理解?

具有三大特性:封装,继承和多态。

将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性

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

子类继承父类,提高代码的重用性

59、面向对象深度优先和广度优先是什么?

60、面向对象中super的作用?

是用来解决多重继承问题

61、是否使用过functools中的函数?其作用是什么?

62、列举面向对象中带爽下划线的特殊方法,如:__new__、__init__

__str__(self方法):str方法中含有什么,则return什么东西,print(对象)就返回什么东西

__dic__ :获取对象中封装的所有字段,用__dic__可以取到,并存放在字段中

__add__(self, other):对象相加直接执行

63、如何判断是函数还是方法?

函数是封装了一些独立的功能,可以直接调用

方法和函数类似,同样封装了独立的功能,但是方法是需要通过对象来调用的,表示针对这个对象要做的操作,使用时采用点方法

64、静态方法和类方法区别?

静态方法就是一个普通的方法,与类和对象无关

类方法就是JAVA里面的类方法,属于类,被各个对象共享

65、列举面向对象中的特殊成员以及应用场景

__doc__ 描述类的信息

__call__ 对象后面加括号,触发执行

__dict__ 查看类或对象中的所有成员

66、1、2、3、4、5 能组成多少个互不相同且无重复的三位数

list1 = []

for a in range(1,6):

for b in range(1,6):

for c in range(1,6):

if a!=b and a!=c and b!=c:

list1.append(a+b+c)

print(len(list1))=============》60

67、什么是反射?以及应用场景?

68、metaclass作用?以及应用场景?

69、用尽量多的方法实现单例模式。

70、装饰器的写法以及应用场景。

71、异常处理写法以及如何主动跑出异常(应用场景)

72、什么是面向对象的mro

73、isinstance作用以及应用场景?

74、写代码并实现:

Given an arrayofintegers,returnindicesofthe two numbers such that they add up to a specific target.You may assume that each input would

have exactly one solution,andyou maynotuse 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关键字。

CPython

>>> v=18

>>> print(bin(v))

0b10010

*arg和**kwarg作用

filter,迭代器,把符合要求的值列出来

在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的引用。这样就构成了一个闭包。

os模块负责程序与操作系统的交互,提供了访问操作系统底层的接口

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值