Python经典高频率面试问答题汇总!内附答案!

Time will tell.

1、说说Python和其他语言的区别

Python属于解释型语言,当程序运行时,是一行一行的解释,并运行,所以调式代码很方便,开发效率高。

Python定位是任其自由发展、优雅、明确、简单,所以在每个领域都有建树,所有它有着非常强大的第三方库。


特点:

Python的类库齐全并且使用简洁,语法简洁优美,功能强大,标准库与第三方库都非常强大,而且应用领域也非常广。可移植性,可扩展性,可嵌入性。


缺点:
  运行速度慢。


区别:

(1)与java相比,在很多方面,Python比Java要简单,比如java中所有变量必须声明才能使用,而Python不需要声明,用少量的代码构建出很多功能;(高效的高级数据结构)。

(2)与php相比,python标准包直接提供了工具,并且相对于PHP代码更易于维护。

(3)Python与c相比:Python 和 C Python这门语言是由C开发而来。

2、Python有什么特点?

  1. 用少量的代码构建出很多功能(高效的高级数据结构)
  2. Python 拥有最成熟的程序包资源库之一
  3. Python完全支持面向对象
  4. Python 是跨平台且开源的
  5. 动态类型

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

  • 解释型:就是边解释边执行(Python,php)
  • 编译型:编译后再执行(c、java、c#)

4、Python的解释器种类及相关特点是什么?

CPython

  • 当我们从Python官方网站下载并安装好Python 3.6后,我们就直接获得了一个官方版本的解释器:CPython。这个解释器是用C语言开发的,所以叫CPython。在命令行下运行python就是启动CPython解释器。

    CPython是使用最广的Python解释器。教程的所有代码也都在CPython下执行。

IPython

  • IPython是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所增强,但是执行Python代码的功能和CPython是完全一样的。好比很多国产浏览器虽然外观不同,但内核其实都是调用了IE。

    CPython用>>>作为提示符,而IPython用In [序号]:作为提示符。

PyPy

  • PyPy是另一个Python解释器,它的目标是执行速度。PyPy采用JIT技术,对Python代码进行动态编译(注意不是解释),所以可以显著提高Python代码的执行速度。

    绝大部分Python代码都可以在PyPy下运行,但是PyPy和CPython有一些是不同的,这就导致相同的Python代码在两种解释器下执行可能会有不同的结果。如果你的代码要放到PyPy下执行,就需要了解PyPy和CPython的不同点。

Jython

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

IronPython

  • IronPython和Jython类似,只不过IronPython是运行在微软.Net平台上的Python解释器,可以直接把Python代码编译成.Net的字节码。


Python的解释器有很多,但使用最广泛的还是CPython。如果要和Java或.Net平台交互,最好的办法不是用Jython或IronPython,而是通过网络调用来交互,确保各程序之间的独。

如果你对更多内容、及Python实例练习题、面试题、自动化软件测试感兴趣的话可以加入我们175317069一起学习喔。

5、位和字节的关系

位(bit),1字节 = 8 位。数据存储是以“字节”(Byte)为单位,数据传输是以大多是以“位”(又名“比特”)为单位。

一个位就代表一个0或1(即一个二进制),二进制是构成存储器的最小单位,每8个位(bit,简写为b)组成一个字节(Byte,简写为B),字节是最小一级的信息单位。

6、b、B、KB、MB、GB的关系

b —> 位(bit)

B —> 字节(一个字节等于8位)

1B = 8 bit

1kb = 1024 B

1 MB = 1024 KB

1 GB = 1024 MB

7、PE8规范

  • 使用4个空格而不是tab键进行缩进
  • 每行长度不能超过79
  • 使用空行来间隔函数和类,以及函数内部的大块代码
  • 必要时候,在每一行下写注释
  • 使用文档注释,写出函数注释
  • 在操作符和逗号之后使用空格,但是不要在括号内部使用
  • 命名类和函数的时候使用一致的方式,比如使用CamelCase来命名类,使用lower_case_with_underscores来命名函数和方法
  • 在类中总是使用self来作为默认
  • 尽量不要使用魔法方法
  • 默认使用UTF-8,甚至ASCII作为编码方式
  • 换行可以使用反斜杠,最好使用圆括号
  • 不要在一句import中多个库

8、通过代码实现如下转换(进制之间转换)

# 二进制转换成十进制-->int
v = "0b1111011"
b = int(v,2)
print(b)  # 123


# 十进制转换成二进制--->bin
v2 = 18
print(bin(int(v2)))
# 0b10010

# 八进制转换成十进制
v3 = "011"
print(int(v3))
# 11

# 十进制转换成八进制:---> oct
v4 = 30
print(oct(int(v4)))
# 0o36

# 十六进制转换成十进制:
v5 = "0x12"
print(int(v5,16))
# 18

# 十进制转换成十六进制:---> hex
v6 = 87
print(hex(int(v6)))
# 0x57

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

请编写一个函数实现将IP地址转换成一个整数。
如 10.3.9.12 转换规则为:
        10            00001010

         3            00000011

         9            00001001

        12            00001100

再将以上二进制拼接起来计算十进制结果:00001010 00000011 00001001 00001100 =def v1(addr):
    # 取每个数
    id = [int(x) for x in addr.split(".")]
    print(id)
    return sum(id[i] << [24, 16, 8, 0][i] for i in range(4))

print(v1("127.0.0.1"))

# [127, 0, 0, 1]
# 2130706433

10、ascii、unicode、utf-8、gbk的区别

  • python2内容进行编码(默认ascii),而python3对内容进行编码的默认为utf-8

  • ascii:最多只能用8位来表示(一个字节),即:2**8 = 256,所以,ASCII码最多只能表示 256 个符号。

  • unicode:万国码,任何一个字符==两个字节

  • utf-8:万国码的升级版 一个中文字符 == 三个字节 英文是一个字节 欧洲的是 2个字节

  • gbk:国内版本 一个中文字符==2个字节 英文是一个字节
    gbk 转 utf-8 需通过媒介 unicode

如果你对更多内容、及Python实例练习题、面试题、自动化软件测试感兴趣的话可以加入我们175317069一起学习喔。

11、字节码和机器码的区别

机器码,学名机器语言指令,有时也被称为原生码,是电脑的CPU可直接解读的数据。

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

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

如果你对更多内容、及Python实例练习题、面试题、自动化软件测试感兴趣的话可以加入我们175317069一起学习喔。

12、三元运算写法和应用场景

应用场景:简化if语句
# 关于三元运算
# 结果+ if  + 条件  + else + 结果
result='gt' if 1>3 else 'lt'
print(result)       # lt
# 理解:如果条件为真,把if前面的值赋值给变量,否则把else后面的值赋值给变量。


lambda 表达式
temp = lambda x,y:x+y
print(temp(4,10))   # 14

可替代:
def foo(x,y):
    return x+y
print(foo(4,10))    # 14

13、Python3和Python2中的 int 和 long 的区别

在python3里,只有一种整数类型int,大多数情况下,和python2中的长整型类似。

14、xrange 和 range 的区别

都在循环时使用,xrange内存性能更好,xrange用法与range完全相同,range一个生成list对象,xrange是生成器。

要生成很大的数字序列的时候,用xrange会比range性能优很多,因为不需要一上来就开辟一块很大的内存空间。


在python2中:

  • range([start,] stop[, step]),根据start与stop指定的范围以及step设定的步长,生成一个序列

  • xrange用法与range完全相同,所不同的是生成的不是一个数组,而是一个生成器。


在Python 3中:

  • range() 是像 xrange() 那样实现,xrange()被抛弃。

15、文件操作时xreadlines和readlines的区别

readlines:返回一个列表

xreadlines:返回一个生成器

16、 lambda表达式格式以及应用场景是什么?

匿名函数:为了解决那些功能很简单的需求而设计的一句话函数
函数名 = lambda 参数 :返回值

#参数可以有多个,用逗号隔开
#匿名函数不管逻辑多复杂,只能写一行,且逻辑执行结束后的内容就是返回值
#返回值和正常的函数一样可以是任意数据类型

lambda 表达式
temp = lambda x,y:x+y
print(temp(4,10))   # 14

可替代:
def foo(x,y):
    return x+y
print(foo(4,10))    # 14

17、说说pass的作用

pass 是空语句,是为了保持程序结构的完整性。pass 不做任何事情,一般用做占位语句。

18、*arg 和 **kwarg 作用

*args代表位置参数,它会接收任意多个参数并把这些参数作为元祖传递给函数。

**kwargs代表的关键字参数,返回的是字典,位置参数一定要放在关键字前面。

19、 is和==的区别

a = 'lishi'
str1 = "li"
str2 = "shi"
str3 = str1 + str2
print("a == str3",a == str3)
print("a is str3",a is str3)
print("id(a)",id(a))
print("id(str3)",id(str3))
# a == str3 True    ==  ---> 只需要内容相等
# a is str3 False   is  ---> 只需要内存地址相等
# id(a) 38565848
# id(str3) 39110280

is 比较的是两个实例对象是不是完全相同,它们是不是同一个对象,占用的内存地址是否相同。

== 比较的是两个对象的内容是否相等,即内存地址可以不一样,内容一样就可以了。默认会调用对象的__eq__()方法。

20、谈谈Python的深浅拷贝,以及实现方法和应用场景

浅拷贝只是增加了一个指针指向一个存在的地址。

而深拷贝是增加一个指针并且开辟了新的内存,这个增加的指针指向这个新的内存,采用浅拷贝的情况,释放内存,会释放同一内存,深拷贝就不会出现释放同一内存的错误。

一层的情况:

import copy
 
# 浅拷贝
li1 = [1, 
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值