问题1:Python的优缺点
问题2:python2和python3的区别?
问题3:你觉得python2的项目如果迁移到python3,困难会在哪里?
问题4:列举出你常用的Python标准库和第三方库
问题5:请解释一下什么是编译型语言和解释型语言?
问题6:列举常见的Python内置函数
问题7:列举Python的运算符
问题1:Python的优缺点
优点
1.免费开源
2.语法简洁,可读性强,易上手学习(易于读写和学习,写更少的代码,完成更多的事情)
3.有非常丰富强大的标准库以及第三方库,避免重复造轮子,提高我们的开发效率
4.使用领域广,可用于数据分析、后台开发、爬虫以及机器学习等领域
5.可扩展可移植
6.由于Python是一门解释型语言,这意味着Python不经过编译,直接逐行执行代码,如果出现任何错误,它会立刻停止执行,并报告所发生的错误,即使程序有多个错误,也只显示一个错误,这使得调试更加容易
7.Python是动态类型的语言,在我们运行代码之前,Python不知道变量的类型,它在执行过程中自动分配数据类型,程序员不需要担心变量的类型
缺点
1.Python程序相对于其他语言的运行速度比较慢
Python是一门解释型语言,逐行执行代码常常会导致执行速度缓慢,如果项目对性能和速度要求很高,不太建议使用Python
2.Python的内存效率不高
为了提供开发的简单和易用性,Python使用了大量的内存,当我们做一些内存敏感的项目时,这可能是一个缺点
问题2:python2和python3的区别?
Python 3.x不兼容Python 2.x,但它们在语法层面的差别不大,Python 3.x移除了部分混淆的表达方式,但大体语法与Python 2.x相似,Python 3.x的使用者可以轻松阅读Python 2.x编写的代码
下面列举Python 3.x和Python 2.x的部分区别,以帮助大家了解它们之间的差异
(1) 编码方式
Python 3.x默认采用utf-8编码,对中文和英文都有良好的支持
Python 2.x默认采用ASCII编码,对中文支持不够良好,为了防止因程序包含中文而报错,一般在Python 2.x文件首行将编码格式设置为utf-8,设置方式如下:
# -*- coding: utf-8 -*-
(2) print
Python2中的print是语句(statement),Python3中的print则变成了函数,在Python3中调用print需要加上括号,不加括号会报SyntaxError错误
Python2
print "hello world" # hello world
Python3
# SyntaxError: Missing parentheses in call to 'print'. Did you mean print("Hello world")?
print "Hello world"
print("hello world") # hello world
(3) 除法运算
Python3.x中两个整数相除(使用运算符/)返回一个浮点数,不再返回整数,新增运算符//实现整除效果
在Python2中,3/2的结果是整数,在Python3中,结果则是浮点数
Python2
# 3 / 2 = 1
print '3 / 2 =', 3 / 2
# 3 / 2.0 = 1.5
print '3 / 2.0 =', 3 / 2.0
print 1 / 2 # 0
print 1.0 / 2.0 # 0.5
Python3
# 3 / 2 = 1.5
print('3 / 2 =', 3 / 2)
# 3 / 2.0 = 1.5
print('3 / 2.0 =', 3 / 2.0)
print(1/2) # 0.5
print(1//2) # 0
(4) range 和 xrange
Python2中有 range 和 xrange 两个方法,其区别在于,range返回一个list,在被调用的时候返回整个序列;xrange返回一个iterator,在每次循环中生成序列的下一个数字
Python3中不再支持 xrange 方法,Python3中的 range 方法就相当于Python2中的 xrange 方法
Python3.x中使用list()函数对range()函数的返回值进行转换,以实现Python2.x中range()返回列表的功能
range和xrange区别
首先得说明一下,只有在python2中才有xrange和range,python3中没有xrange,并且python3中的range和python2中的range有本质的区别,所以这儿说的range和xrange的区别是只针对python2的
不同点
在python2中,range得到的是一个列表
x = range(0, 5)
print(type(x)) # 打印x的类型,结果是list
print(x) # 结果是[0,1,2,3,4]
在python2中,xrange得到的是一个生成器对象
x = xrange(0, 5)
print(type(x)) # 输出类型,结果为一个生成对象
print(x) # 输出x,结果为xrange(0,5)
python3中的range实际上是python2中的xrange,而不是python2中的range,因为使用生成器可以节约内存,比如现在有个代码是for i in range(0, 10000),如果还是使用python2中的range的话,那么你就会得到一个0到9999的一个列表,这个将会占用你很大的空间,但是使用生成器的话,就会节省很大的资源
共同点
python2中的xrange和range这两个的使用都是一样的,基本上都是在for循环的时候遍历所有值
for i in range(0, 100):
print(i)
for i in xrange(0, 100):
print(i)
这两个输出的结果都是一样的
要生成很大的数字序列的时候,用python2的xrange会比python2的range性能优很多,因为不需要预先开辟一块很大的内存空间
(5) map函数
在Python2中,map函数返回list,而在Python3中,map函数返回iterator
Python2
map(lambda x: x+1, range(5)) # [1, 2, 3, 4, 5]
Python3
map(lambda x: x+1, range(5)) # <map at 0x195983a5640>
list(map(lambda x: x+1, range(5))) # [1, 2, 3, 4, 5]
提示Tips:filter函数在Python2和Python3中也是有上述同样的区别
(6) 字典dict的has_key方法
Python3中的字典不再支持has_key方法
Python2
person = {"age": 30, "name": "Xiao Wang"}
print "person has key \"age\": ", person.has_key("age") # person has key "age": True
print "person has key \"age\": ", "age" in person # person has key "age": True
Python3
person = {"age": 30, "name": "Xiao Wang"}
print ("person has key \"age\": ", person.has_key("age")) # AttributeError: 'dict' object has no attribute 'has_key'
print ("person has key \"age\": ", "age" in person) # person has key "age": True
(7) 八进制表示
Python3.x中只使用"0o"开头以表示八进制,删除了Python2.x中使用"0"开头的表示方法
(8) 比较行为
Python3.x只使用" != "表示不等运算,删除了Python2.x中的" <> "表示方法
Python3.x中的 <,<=,>,>=运算符被用于比较两个不存在有意义的元素时,不再返回布尔值,而是抛出异常
Python2
print 1 < 'a' # False
Python3
# TypeError: '<' not supported between instances of 'int' and 'str'
print(1 < 'a')
(9) input
Python3.x中使用input()函数取代了raw_input()函数
(10) 异常处理
Python3.x中使用as关键字识别异常信息
在Python2中,捕获异常的方式可以使用以下方式:
try:
# some code
except Exception, e:
# handle exception
在Python3中,捕获异常的方式如下:
try:
# some code
except Exception as e:
# handle exception
问题3:你觉得python2的项目如果迁移到python3,困难会在哪里?
由于参加工作所用到的都是Python3的项目,所以如果对于Python2的项目,从我的角度我是选择使用python3对该项目进行重构
如果决策者考虑该项目需要从python2迁移到python3,对代码进行升级的话,我们必须详细了解2个版本之间的差异,同时我会查找相关Python版本迁移工具或者模块进行操作
问题4:列举出你常用的Python标准库和第三方库
列出工作过程中使用过的python标准库
os库: 提供了不少与操作系统相关联的函数
math库: 数学运算
datetime库: 处理日期时间
sys库: 通常用于调用命令行参数
random库: 生成随机数
列出工作过程中使用过的Python第三方库
Pandas库
Numpy库
Openpyxl库
Pymysql库
Requests库
BeautifulSoup库
那些在安装Python时就默认已经安装好的模块被称为“标准库”
“第三方库”不会随着你安装python的时候一起附带上,在我们需要的时候可以使用pip或者其他工具下载
问题5:请解释一下什么是编译型语言和解释型语言?
任何高级语言编写的程序若想被计算机运行,都必须将其转换成计算机语言,也就是机器码
转换的方式有两种:编译、解释
由此高级编程语言按照程序的执行方式分为编译型语言和解释型语言
编译型语言是指会通过编译器将源代码一次性翻译成机器码然后执行
一般编译型语言执行速度比较快
源代码中一处有错,就不允许编译
编译过程中出现一处错误就停止编译
现有的C、C++等语言都属于编译型语言
解释型语言是指会通过解释器一句一句地将源代码解释成机器码并执行,而不是一次编译成全部代码(使用专门的解释器对源程序逐行解释成特定平台的机器码并立即执行的语言)
一般解释型语言开发效率比较高
源代码有错照样能解释执行,遇到错误再停下来,而且每次运行程序都要对源代码进行重新解释,所以运行速度比编译型慢的多
现有的JavaScript、Python等语言都属于解释型语言
可以发现无论是编译型语言还是解释型语言,都是将源代码译成机器码才能执行,其区别在于一个是执行前先行编译,一个是在执行期动态解释
编译型语言的执行效率较高,在执行前只要执行一次编译的过程,而解释型语言却要在每次执行时,对执行到的程序进行逐行翻译
解释型语言的跨平台性较好,通过解释器对各平台的兼容,相同的代码可以在不同的平台正常运行
问题6:列举常见的Python内置函数
help()
range()
len()
zip()
round()
set()
dict()
tuple()
dir()
open()
enumerate()
int()
ord()
chr()
isinstance()
type()
hex()
sorted()
print()
format()
….
问题7:列举Python的运算符
1.算术运算符 (加减乘除等数学运算)
2.比较运算符(关系运算符) (<, >, ==, !=等)
3.赋值运算符
4.逻辑运算符 (and, or, not)
5.成员运算符 (in, not in)
6.身份运算符 (is, is not)
7.位运算符