目录
最常见的是IndexError(索引错误),KeyError(键错误),ValueError(值错误)
一、python中type和isinstance的区别
type是用来打印数据类型,isinstance是用来判断数据是否是指定类型
二、什么是python上下文
class ManagedFile:
def __init__(self, name):
self.name = name
print(self.name)
def __enter__(self):
self.file = open(self.name, 'w')
print('self.file=',self.file)
return self.file
def __exit__(self, exc_type, exc_val, exc_tb):
if self.file:
self.file.close()
with ManagedFile('hello.txt') as f:
f.write('hello, world!')
f.write('bye now')
这是一个python上下文的原生代码,enter() 方法在语句体执行之前进入运行时上下文,exit() 在语句体执行完后从运行时上下文退出,使用这种方法,可以更方便管理代码,例如开启上下文,还需要手动关闭挺麻烦,使用这种方法就可以自动关闭
with是语句,open是类,所以类可以自己定义,open也可以更改
三、python常见的异常
最常见的是IndexError(索引错误),KeyError(键错误),ValueError(值错误)
其他常见的异常类:
四、 迭代器详解
python一切皆对象,迭代器(iterator)也可以说是迭代器对象。具有__iter__
方法的对象调用__iter__
会返回一个迭代器对象。从语法上说就是那些同时具有__next__
和__iter__
方法的对象。
- 迭代器调用
__next__
方法会调用迭代器中的下一个值; - 迭代器调用
__iter__
方法返回迭代器本身;
五、python的三大器
装饰器、迭代器、生成器
六、生成器中yield解释
如果不太好理解yield
,可以先把yield
当作return
的同胞兄弟来看,他们都在函数中使用,并履行着返回某种结果的职责。
return结束函数返回,yield是暂停函数并返回,当下次执行会从上次暂停的地方继续执行
七、tcp三握四挥
TCP(传输控制协议)是一种可靠的传输协议,用于在计算机网络中传输数据。"三握四挥"是指TCP连接的建立和断开过程中的步骤。
三握(Three-way handshake)是建立TCP连接的步骤,包括以下三个阶段:
- 第一步(SYN):客户端向服务器发送一个同步序列编号(SYN)标志的数据包,表明客户端希望建立连接。
- 第二步(SYN+ACK):服务器接收到客户端的请求后,向客户端发送一个确认序列编号(ACK)和一个同步序列编号(SYN)标志的数据包,表示接受请求并同意建立连接。
- 第三步(ACK):客户端接收到服务器的确认后,向服务器发送一个带有确认序列编号(ACK)标志的数据包,表示客户端同意建立连接。
四挥(Four-way handshake)是断开TCP连接的步骤,包括以下四个阶段:
- 第一步(FIN):任何一端的应用程序发出一个结束(FIN)标志,表示要关闭连接。
- 第二步(ACK):接收到结束标志的一端发送一个确认序列编号(ACK)标志给对方,表示已收到关闭请求。
- 第三步(FIN):被动关闭的一端(接收到第一步的FIN)向对方发送一个结束标志,表示同意关闭连接。
- 第四步(ACK):主动关闭的一端接收到第三步的结束标志后,向被动关闭的一端发送一个确认序列编号(ACK)标志,表示确认关闭连接。
通过这样的"三握四挥"过程,TCP可以在通信双方建立可靠的连接和安全地关闭连接。
八、简述python元类
元类(metaclass)是 Python 中的一个特殊概念,用于创建类的类。元类可以控制类的创建、行为和属性。
在 Python 中,一切皆对象,包括类。在定义类时,Python 首先会查找类的元类,然后使用元类来创建这个类。元类可以被看作是类的模板,它定义了类应该具有的属性、方法和行为。
下面是关于元类的一些详解:
- 类是对象:在 Python 中,类也是对象,因此它们都是通过元类创建的实例。
- type 是默认的元类:如果在创建类时没有指定元类,Python 默认使用 type 作为元类。type 是 Python 中所有类的元类,它负责创建类对象。
- 自定义元类:我们可以通过定义自己的元类来控制类的创建过程。自定义元类需要继承于 type 类,并重写一些特殊方法,如 new 和 init 等。通过重写这些方法,我们可以在类创建的过程中动态地修改类的属性、方法等。
- 元类的作用:使用元类可以实现一些高级的功能,例如对类的注解、属性、方法进行验证、修改或增强。元类还可以用于自动注册类、实现ORM(对象关系映射)等。
- metaclass 属性:在定义类时,可以通过 metaclass 属性来指定元类。例如:class MyClass(metaclass=MyMeta)。
- 元类的继承:元类也可以继承自其他元类,形成元类的层次结构。当创建类时,Python 会按照继承关系依次调用所有相关的元类。
需要注意的是,元类的使用相对较高级,一般情况下不太需要自定义元类。大多数情况下,使用默认的 type 元类就能满足需求。因此,如果对元类的详细了解和使用并不是必需的,大部分开发者不需要过多关注元类的细节。
九、python内置函数
Python 提供了许多内置函数,这些函数是在解释器中内置的,可以直接使用而无需导入任何模块。以下是一些常用的 Python 内置函数:
-
类型转换函数
- int():将一个对象转换为整数类型。
- float():将一个对象转换为浮点数类型。
- str():将一个对象转换为字符串类型。
- bool():将一个对象转换为布尔类型。
- list():将一个可迭代对象转换为列表类型。
- tuple():将一个可迭代对象转换为元组类型。
- dict():创建一个字典对象。
-
数学函数
- abs():返回一个数值的绝对值。
- pow():返回一个数的指定次幂。
- round():对一个数进行四舍五入。
- max():返回给定参数的最大值。
- min():返回给定参数的最小值。
- sum():返回可迭代对象中所有元素的和。
-
迭代函数
- range():生成一个指定范围的数字序列。
- len():返回一个对象的长度。
- enumerate():返回一个可迭代对象的索引和值。
- zip():将多个可迭代对象打包成一个元组序列。
-
输入输出函数
- print():打印输出到标准输出。
- input():从标准输入读取用户输入。
-
文件操作函数
- open():打开文件并返回文件对象。
- read():读取文件内容。
- write():向文件写入内容。
- close():关闭文件。
-
其他常用函数
- type():返回一个对象的类型。
- isinstance():判断一个对象是否属于指定的类型。
- help():获取函数、模块等对象的帮助文档。
以上仅是一些常用的内置函数,Python 还提供了很多其他有用的内置函数。你可以在 Python 官方文档中查找完整的内置函数列表及其使用方法。
十、python 列表推导式
Python 中的列表推导式(List Comprehension)允许我们使用简洁的语法快速生成列表。它提供了一种在一行代码中创建列表的方法,非常常用和方便。
一般形式为:
[expression for item in iterable if condition]
其中,expression 是对 item 进行操作得到的值,item 是可迭代对象中的每个元素,iterable 是原始的可迭代对象,if condition 是可选的条件表达式。
十一、python 字典推导式
Python 中的字典推导式(Dictionary Comprehension)可以通过一行代码快速创建字典。它提供了一种简洁的语法来生成字典,非常方便和实用。
一般形式为:
{key_expression: value_expression for item in iterable if condition}
其中,key_expression 是对 item 进行操作得到的键值的表达式,value_expression 是对 item 进行操作得到的值的表达式,item 是可迭代对象中的元素,iterable 是原始的可迭代对象,if condition 是可选的条件表达式。
十二、列表和元组的区别
列表(List)和元组(Tuple)是 Python 中两种常用的数据结构,它们有一些相似之处,但也有一些不同之处。
-
可变性(Mutability):
- 列表是可变的(Mutable),也就是说,可以通过索引修改、添加或删除列表中的元素。
- 元组是不可变的(Immutable),一旦创建了一个元组,就无法修改其中的元素。如果需要修改元组,只能通过创建一个新的元组来实现。
-
语法表示:
- 列表使用方括号 [] 来表示,元素之间使用逗号分隔。
- 元组使用圆括号 () 来表示,元素之间使用逗号分隔。可以省略圆括号,仅通过逗号分隔元素也会被视为元组。
-
迭代性(Iterability):
- 列表和元组都是可迭代的,可以通过循环遍历其中的元素。
-
性能:
- 由于元组是不可变的,在某些情况下可能比列表更加高效。因为在进行迭代、访问元素或传递给函数时,元组的性能可能比列表更好。
- 列表由于可变性,可以在原地修改,但这也导致了一些额外的开销。
-
使用场景:
- 如果需要存储的数据可能需要修改,建议使用列表。
- 如果需要存储的数据是固定的,不需要修改,可以使用元组。例如,表示坐标、日期等不可变的数据。
需要根据具体的应用场景来选择使用列表还是元组。如果需要频繁地对数据进行修改和操作,选择列表;如果需要保护数据的完整性或者对性能要求较高,选择元组。