CSDN官方发布的《180道Python面试题,助你一举通过面试!》浅析(一)
CSDN官方发布的《180道Python面试题,助你一举通过面试!》浅析(一)
这是加入CSDN的第一篇博文,对python的使用也仅限于实验室的项目及课程中的大作业,尽量通过查阅资料和官方文档减少纰漏,一起讨论进步!
引用其他博主的文章内容都加了角标,并将链接附在参考文献
1. 列出 5 个常用 Python 标准库?
os:这个Lib提供了一些方便使用操作系统相关功能的函数。操作路径的os.path模块会经常用到。
io:这个Lib提供了 Python 用于处理各种 I/O 类型的主要工具。三种主要的 I/O类型分别为: 文本 I/O, 二进制 I/O 和 原始 I/O。
re:模块提供了与 Perl 语言类似的正则表达式匹配操作。模式和被搜索的字符串既可以是 Unicode 字符串 (str) ,也可以是8位字节串 (bytes)。 但不能混用。
- 对于反斜杠字符可以采用r’\n’来表示’‘和’n’。
- 重复修饰符 (*, +, ?, {m,n}, 等) 不能直接嵌套,特殊字符(.^$?等)的排列顺序和组合方式
- 常用的函数:match,search,split,findall等,编译后的正则表达式对象支持的方法和属性。
sys:模块提供了一些变量和函数。这些变量可能被解释器使用,也可能由解释器提供。这些函数会影响解释器。这个模块总是可用的。
math:模块提供了对C标准定义的数学函数的访问。这些函数不适用于复数,如果你需要计算复数,请使用 cmath 模块中的同名函数。
struct:模块可以执行 Python 值和以 Python bytes 对象表示的 C 结构之间的转换。 这可以被用来处理存储在文件中或是从网络连接等其他来源获取的二进制数据。 它使用 格式字符串 作为 C 结构布局的精简描述以及与 Python 值的双向转换。
- struck.pack(format,v1,v2,…)返回一个 bytes 对象,其中包含根据格式字符串 format 打包的值 v1, v2, … 参数个数必须与格式字符串所要求的值完全匹配。
- struck.unpack(format,buffer)根据格式字符串 format 从缓冲区 buffer 解包(假定是由 pack(format, …) 打包)。结果为一个元组,即使其只包含一个条目。 缓冲区的字节大小必须匹配格式所要求的大小。
- 模块还定义了以下类型:class struct.Struct(format)返回一个新的 Struct 对象,它会根据格式字符串 format 来写入和读取二进制数据。 一次性地创建 Struct 对象并调用其方法相比使用同样的格式调用 struct 函数更为高效,因为这样格式字符串只需被编译一次。
random:该模块实现了各种分布的伪随机数生成器。不应将此模块的伪随机生成器用于安全目的。有关安全性或加密用途,请参阅 secrets 模块。
datatime:模块提供了可以通过多种方式操作日期和时间的类。在支持日期时间数学运算的同时,实现的关注点更着重于如何能够更有效地解析其属性用于格式化输出和数据操作。
2. Python 内建数据类型有哪些?
整型(int)、布尔型(bool)、字符串(str)、列表(list)、元组(tuple)、字典(dict)。
3. 简述 with 方法打开处理文件帮我们做了什么?
with方法打开文件,可以在我们对文件操作完成后,自动关闭文件,保证文件的安全性。[2]
4. 列出 Python 中可变数据类型和不可变数据类型,为什么?
可变类型(mutable):变量进行append、+=等这种操作后 ,等于 改变了变量的值,而不会新建一个对象,变量引用的对象的地址也不会变化,不过对于相同的值的不同对象,在内存中则会存在不同的对象,即每个对象都有自己的地址,相当于内存中对于同值的对象保存了多份,这里不存在引用计数,是实实在在的对象。
- list
- dict
- set
- byte array
- user-defined classes (除非是特别定义的不可变)
不可变类型(immutable):改变了变量的值 ,等于新建了一个对象,而对于相同的值的对象,在内存中则只有一个对象(一个地址)。
- int
- float
- decimal
- complex
- bool
- string
- tuple
- range
- frozenset
- bytes[3]
5. Python 获取当前日期?
from time import localtime,strftimestrftime("%Y-%m-%d", localtime())OUT:'2019-09-22'
6. 统计字符串每个单词出现的次数
Python 统计字符串里每个单词出现的次数的三种方法:[4]
import retext = 'How are you? I am fine, thank you, and you?'text = re.sub(r'[^\w\s]','',text)text_list = text.split()#将字符串转化为列表 count = {}for word in text_list:count.setdefault(word, 0) # 方法调用确保了键存在于 count 字典中(默认值是 0)count[word] = count[word] + 1print(count)————————————————count = {}for i in text_list:if i not in count:count[i] = 1else:count[i] += 1print(count)————————————————from collections import Countercount= Counter(text_list) print(count)
7. 用 python 删除文件和用 linux 命令删除文件方法
Python删除文件的方法:
- os.remove(path, *, dir_fd=None):如果path是目录,则会引发 IsADirectoryError警告,应该使用使用rmdir()删除目录。
Linux删除文件方法:
- 简单删除:rm [选项] 文件
- 彻底删除:shred -u -z [file name]
8. 写一段自定义异常代码
程序可以通过创建新的异常类来命名它们自己的异常。异常通常应该直接或间接地从 Exception 类派生。在创建可能引发多个不同错误的模块时,通常的做法是为该模块定义的异常创建基类,并为不同错误条件创建特定异常类的子类:(Error是其他两个异常的基类)
class Error(Exception):"""Base class for exceptions in this module."""passclass InputError(Error):"""Exception raised for errors in the input.Attributes:expression -- input expression in which the error occurredmessage -- explanation of the error"""def __init__(self, expression, message):self.expression = expressionself.message = messageclass TransitionError(Error):"""Raised when an operation attempts a state transition that's notallowed.Attributes:previous -- state at beginning of transitionnext -- attempted new statemessage -- explanation of why the specific transition is not allowed"""def __init__(self, previous, next, message):self.previous = previousself.next = nextself.message = message
9. 举例说明异常模块中 try except else finally 的相关意义
>>> def divide(x, y):... try:... result = x / y... except ZeroDivisionError:... print("division by zero!")... else:... print("result is", result)... finally:... print("executing finally clause")...>>> divide(2, 1)result is 2.0executing finally clause>>> divide(2, 0)division by zero!executing finally clause>>> divide("2", "1")executing finally clauseTraceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 3, in divideTypeError: unsupported operand type(s) for /: 'str' and 'str'
- try:执行 try 子句( try 和 except 关键字之间的(多行)语句)。如果没有异常发生,则跳过 except 子句 并完成 try 语句的执行。如果在执行 try 子句时发生了异常,则跳过该子句中剩下的部分。可以在此处尝试捕获和处理异常。
- except:捕获try代码块执行时所发生的异常。
- else:try … except 语句有一个可选的 else 子句,在使用时必须放在所有的 except 子句后面。对于在try 子句不引发异常时必须执行的代码来说很有用。使用 else 子句比向 try 子句添加额外的代码要好,因为它避免了意外捕获不是由 try … except 语句保护的代码引发的异常。
- finally:finally 子句在任何情况下都会被执行。 第三个例子两个字符串相除所引发的 TypeError 不会由 except 子句处理,因此会在 finally 子句执行后被重新引发。在实际应用程序中,finally 子句对于释放外部资源(例如文件或者网络连接)非常有用,无论是否成功使用资源。
10. 遇到 bug 如何处理
1、根据编辑器报错的异常类型和异常发生位置回溯检查。
2、根据异常信息不能明确错误原因时,重新梳理程序逻辑,必要时通过设置断点或加入print()查看程序中语句运行结果。
3、用try…except…排查。(额,没用过)
3、在CSDN、论坛、贴吧搜索类似bug。
参考文献
[1]https://blog.csdn.net/csdngkk/article/details/99116607.
[2]https://blog.csdn.net/weixin_41460135/article/details/100030741.
[3]https://www.cnblogs.com/sea-stream/p/11188732.html.
[4]https://blog.csdn.net/whjay520/article/details/82996665.
作者:话说一半的王
来源链接:https://blog.csdn.net/weixin_41966900/article/details/101158532
版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。
2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。