基础
1.列出 5 个常用 Python 标准库?
- os:与操作系统相关联的函数,path 的 join()、split()、exists();mkdir()、listdir()、rename()、system() 等
- sys:通常用于命令行参数
- re:正则匹配,match、search、findall、sub、split、complie 等
- math:数学运算,三角函数(sin, cos, tan…)、向上向下取整(ceil, floor)、开方(sqrt) 等
- random:随机模块,random、randint、randrange 等
- calendar:日历模块
- time:时间模块,时间戳
time.time
、线程休眠time.sleep()
等 - datetime:处理日期时间
2.Python 内建数据类型有哪些?
- Number(数字)
- String(字符串)
- List(列表)
- Tuple(元组)
- Set(集合)
- Dictionary(字典)
3.简述 with 方法打开处理文件帮我我们做了什么?
打开文件在进行读写的时候可能会出现一些异常状况,如果按照常规的 f.open 写法,我们需要 try, except, finally… 做异常判断,并且文件最终不管遇到什么情况,都要执行 finally f.close() 关闭文件,with 方法帮我们实现了 finally 中 f.close()
4.列出 Python 中可变数据类型和不可变数据类型,为什么?
可变数据类型更改后地址不发生改变,不可变数据类型更改后地址发生改变
可变:
- 列表 (list)
- 字典 (dict)
- 集合 (set)
不可变:
- 数字 (int, float)
- 布尔 (bool)
- 字符串 (str)
- 集合 (set)
5.Python 获取当前日期?
import datetime
now_time = datetime.datetime.now()
# 或者
import time
now_time = time.localtime(time.time())
6.统计字符串每个单词出现的次数
(1)setdefault()的方法判断
message = 'It was a bright cold day in April, and the clocks were striking thirteen.'
count = {
}
for character in message:
count.setdefault(character, 0) # 方法调用确保了键存在于 count 字典中(默认值是 0)
count[character] = count[character] + 1
print(count)
(2)传统方法
count = {
}
for i in message:
if i not in count:
count[i] = 1
else:
count[i] += 1
print(count)
(3)Counter方法
from collections import Counter
count= Counter(message)
print(count)
7.用 Python 删除文件和用 linux 命令删除文件方法
- Python:
os.remove(path)
- Linux:
rm -f path
8.写一段自定义异常代码
# 你随便输入一句话 看我喜不喜欢 不喜欢我就抛出异常
# 自定义异常类
class UnlikeError(BaseException):
def __init__(self,msg,text):
self.msg = msg
self.text = text
# 函数中可能抛出异常
def hello():
text = input("输入一段话:")
if text == "你真帅":
print("你说得对!")
else:
raise UnlikeError("你再看看...","另一个参数")
# 捕获异常
try:
hello()
# 获取异常对象
except UnlikeError as e:
print(e.text)
9.举例说明异常模块中 try, except, else, finally… 的相关意义
- try, except, else… :没有捕获到异常,则执行 else 语句
- try, except, finally… :不管是否捕获到异常,都执行 finally 语句
try:
num = 100
print(num)
except NameError as errorMsg:
print('产生错误了:%s'% errorMsg)
else:
print('没有捕捉到异常,则执行该语句')
try:
num = 100
print(num)
except NameError as errorMsg:
print('产生错误了:%s'% errorMsg)
finally:
print('不管是否捕捉到异常,都执行该语句')
运行结果如下:
100
没有捕捉到异常,则执行该语句
100
不管是否捕捉到异常,都执行该语句
10.遇到 bug 如何处理
- 使用 debug 模式调试
- 使用 try, except, else… 或 try, except, finally… 捕捉异常
语言特性
1.谈谈对 Python 和其他语言的区别
Python 是一门语法简洁优美,功能强大无比,应用领域非常广泛,具有强大完备的第三方库,他是一门强类型的可移植、可扩展,可嵌入的解释型编程语言,属于动态语言。
-
语言特点
简洁、优雅,省略了各种大括号和分号,还有一些关键字、类型说明 -
语言类型
解释型语言,运行的时候是逐行解释并运行,所以调试代码很方便,开发效率高 -
第三方库
python 是开源的,并且 python 的最近几年发展迅猛,应用领域很多。比如:Web、运维、自动化测试、爬虫、数据分析、人工智能;Python 具有非常完备的第三方库。 -
缺点就是 Python 的执行速度不够快
python 是一门解释型语言,所以它的速度相较于 C/C++ 这种编译型语言会慢一些,但是并不影响使用
因为现在的硬件配置都非常的高,基本没什么影响,除非是一些实时性比较强的程序可能会受到一些影响,但是也是有解决办法的,可以嵌入 C/C++代码
2.简述解释型和编译型编程语言
-
解释型语言编写的程序不需要编译,在执行的时候,专门有一个解释器能够将我们写的代码翻译成机器语言,每个语句都是执行的时候才翻译。这样解释型语言每执行一次就要翻译一次,效率比较低。
-
编译型语言写的程序执行之前,需要一个专门的编译过程,通过编译系统,把源高级程序编译成为机器语言文件,翻译只做了一次,运行时不需要翻译,所以编译型语言的程序执行效率高,但也不能一概而论,部分解释型语言的解释器通过在运行时动态优化代码,甚至能够使解释型语言的性能超过编译型语言。
3.Python 的解释器种类以及相关特点?
- CPython
C语言开发的,使用最广的解释器 - IPython
基于 CPython 之上的一个交互式计时器,交互方式增强,功能和 CPython 一样 - PyPy
目标是执行效率,采用 JIT 技术,对 python 代码进行动态编译,提高执行效率 - JPython
运行在 Java 上的解释器,直接把 python 代码编译成 Java 字节码执行 - IronPython
运行在微软 .NET 平台上的解释器,把 python 编译成. NET 的字节码
4.说说你知道的 Python3 和 Python2 之间的区别?
- print 在 Python3 中是函数必须加括号;Python2 中 print 为 class。
- Python2 中使用 xrange;Python3 使用 range。
- Python2 中默认的字符串类型默认是 ASCII;Python3 中默认的字符串类型是 Unicode。
- Python2 中1/2的结果是整型 (0);Python3 中是浮点类型 (0.5),不再区分 int 和 long。
- Python2 中声明元类:
_metaclass_ = MetaClass
;
Python3 中声明元类:class newclass(metaclass = MetaClass): pass
详细了解可参考这篇文章:点此跳转
5.Python3 和 Python2 中 int 和 long 区别?
Python2 有 int 和 long 类型。int 类型最大值不能超过 sys.maxint,而且这个最大值是平台相关的。可以通过在数字的末尾附上一个L来定义长整型,显然,它比 int 类型表示的数字范围更大。在 Python3 里,只有一种整数类型 int,大多数情况下,和 Python2中的长整型类似。
6.xrange 和 range 的区别?
python3 中不存在 python2 的 xrange();python3 的 range 就是 python2 的 xrange。
- 在 python2 中,range 返回一个列表,即 range(3) 返回 [0,1,2],
而 xrange 返回一个 xrange 对象,即 xrange(3) 返回 iterator 对象,它与 Java 迭代器类似,并在需要时生成数字。 - 如果我们需要多次迭代相同的序列,我们更喜欢 range(),因为 range 提供了一个静态列表。而 xrange() 每次重建序列。
- xrange() 不支持切片和其他列表方法。
- xrange() 的优点是,当任务迭代大范围时,它可以节省内存。
- 在 python3 中,范围函数现在执行 xrange 在 python 2 中的功能,因此为了保持代码的可移植性,我们可能希望坚持使用范围。所以 python 3 的范围函数是来自 python 2 的 xrange。
编码规范
7.什么是 PEP8?
PEP 是 Python Enhancement Proposal 的缩写,翻译过来就是 Python 增强建议书;
PEP8 是 python 的一种编码规范,具体如下:
- 缩进。4个空格的缩进(编辑器都可以完成此功能),不使用 tab,更不能混合使用 tab 和空格。
- 每行最大长度79,换行可以使用反斜杠,最好使用圆括号。换行点要在操作符的后边敲回车。
- 类和 top-level 函数定义之间空两行;类中的方法定义之间空一行;函数内逻辑无关段落之间空一行;其他地方尽量不要再空行。
- 模块导入的顺序:按标准、三方和自己编写顺序依次导入,之间空一行。
- 不要在一句 import 中多个库,比如
import os, sys
不推荐 - 避免不必要的空格
- 注释必须要有
- 函数命名要遵循规范
- 尽可能使用 ‘is’ ‘is not’ 取代 ‘==’,比如
if x is not None
要优于if x
。 - 使用基于类的异常,每个模块或包都有自己的异常类,此异常类继承自 Exception。
- 异常中 try 的代码尽可能少。
8.了解 Python 之禅么?
适当回答几条即可:点此跳转
9.了解 docstring 么?
-
DocStrings 文档字符串是一个重要工具,用于解释文档程序,帮助你的程序文档更加简单易懂。
我们可以在函数体的第一行使用一对三个单引号 ‘’’ 或者一对三个双引号 “”" 来定义文档字符串。
你可以使用__doc__
(注意双下划线)调用函数中的文档字符串属性。 -
DocStrings 文档字符串使用惯例:它的首行简述函数功能,第二行空行,第三行为函数的具体描述。
10.了解类型注解么?
用 : 类型 的形式指定函数的参数类型,用 -> 类型 的形式指定函数的返回值类型。
例如:
def add(x:int, y:int) -> int:
return x + y
然后特别要强调的是,Python 解释器并不会因为这些注解而提供额外的校验,没有任何的类型检查工作。也就是说,这些类型注解加不加,对你的代码来说没有任何影响
详细了解可参考:点此跳转
11.例举你知道 Python 对象的命名规范,例如方法或者类等?
适当回答几条即可:点此跳转
12.Python 中的注释有几种?
- 单行注释:
#
- 多行注释:
""" """
13.如何优雅的给一个函数加注释?
函数注释通常在 def 语句下方,第一行表示函数用法,接下来对函数接受的参数进行解释,最后对函数的返回值进行注释,方便他人理解函数的用法
详细了解可参考这篇文章:点此跳转
14.如何给变量加注释?
- 单行注释:
#
- 多行注释:
""" """
15.Python 代码缩进中是否支持 Tab 键和空格混用。
需要统一使用 tab 或统一使用空格,不能混用
Python 是一门用空格缩进来区分代码层次的语言,其实 Python 并没有强制要求你用 Tab 缩进或者用空格缩进,甚至空格按几个都没有强制要求,但在 PEP8 中建议了使用4个空格作为缩进
16.是否可以在一句 import 中导入多个库?
可以是可以,但是不推荐。因为一次导入多个模块可读性不是很好,所以一行导入一个模块会比较好。同样的尽量少用 from modulename import *,因为判断某个函数或者属性的来源有些困难,不方便调试,可读性也降低了。
17.在给 py 文件命名的时候需要注意什么?
给文件命名的时候不要和标准库库的一些模块重复,比如 abc。 另外要名字要有意义,不建议数字开头或者中文命名。
18.例举几个规范 Python 代码风格的工具:
- pylint
- flake8
- YAPF,谷歌开发的代码规范工具
- Black,依赖 Python3.6+ 的第三方库,可以直接将原代码变为符合 PEP8 标准的代码
数据类型
字符串
19.列举 Python 中的基本数据类型?
- 整型 int
- 浮点型 float
- 布尔型 bool
- 字符串 str
20.如何区别可变数据类型和不可变数据类型?
可变数据类型更改后地址不发生改变,不可变数据类型更改后地址发生改变
21.将 “hello world” 转换为首字母大写 “Hello World”
strA = 'hello world'
print(strA.title())
# 或
print(strA.capitalize())
22.如何检测字符串中只含有数字?
使用 isdigit()
函数,返回一个 True 或 False
23.将字符串"ilovechina"进行反转
- 使用切片:
"ilovechina"[::-1]
- 使用
reversed()
方法:''.join(reversed('ilovechina'))
注意:
- reverse() :函数用于反向列表中元素,仅适用于列表
- reversed():函数是返回序列 seq 的反向访问的迭代子。参数可以是列表,元组,字符串
24.Python 中的字符串格式化方式你知道哪些?
- 使用 % 号
'Hey %s, there is a 0x%x error!' % (name, errno)
'Hey %(name)s, there is a 0x%(errno)x error!' % {"name": name, "errno": errno }
- 使用 format()
'Hello, {}'.format(name)
'Hey {name}, there is a 0x{errno:x} error!'.format(name=name, errno=errno)
- 字符串插值/f-Strings(Python 3.6+)
f'Hello, {name}!'
25.有一个字符串开头和末尾都有空格,比如“ adabdw ”,要求写一个函数把这个字符串的前后空格都去掉。
- 使用 replace() 方法
" adabdw ".replace(" ", "")
将空格替换为空 - 使用切片
" adabdw "[1:7]
26.获取字符串”123456“最后的两个字符。
"123456"[4:]
或者 "123456"[-2:]
27.一个编码为 GBK 的字符串 S,要将其转成 UTF-8 编码的字符串,应如何操作?
a= "S".encode("gbk").decode("utf-8",'ignore')
print(a)
28
(1).s="info:xiaoZhang 33 shandong"
,用正则切分字符串输出 ["info", "xiaoZhang", "33", "shandong"]
(2).a = "你好 中国 "
,去除多余空格只留一个空格。
- 使用 replace() 方法
"你好 中国 ".replace(" ", "")
将空格替换为空
29
(1).怎样将字符串转换为小写
strA = "ARHststh"
print(strA.lower())
(2).单引号、双引号、三引号的区别?
三种引号都表示字符串
- 单引号表示的字符串里可包含双引号,当然不能包含单引号
- 双引号表示的字符串里可以包含单引号,字符串都只能有一行
- 三个引号能包含多行字符串,同时常常出现在函数的声明的下一行,来注释函数的功能,与众不同的地方在于,这个注释作为函数的一个默认属性,可以通过
函数名.__doc__
来访问
列表
30.已知 AList = [1, 2, 3, 1, 2]
,对 AList 列表元素去重,写出具体过程。
AList = [1, 2, 3, 1, 2]
print(list(set(AList)))
31.如何实现 "1,2,3"
变成 [“1”,“2”,“3”]
32.给定两个 list,A 和 B,找出相同元素和不同元素
A=[1,2,3,4,5,6,7,8,9]
B=[1,3,5,7,9]
print('A、B中相同元素:')
print(set(A)&set(B))
print('A、B中不同元素:')
print(set(A)^set(B)