python知识点汇总(十一)

python知识点总结
- 1、在Python退出运行时,默认情况下是否会对所有已分配的内存进行清理?
- 2、请列举Python的主要优势。
- 3、如何实现对元组元素的解包操作?
- 4、在Python中如何实现对象属性的动态获取与设置?
- 5、具体步骤说明如何从操作系统中删除特定文件。
- 6、如何通过捕获异常来主动抛出异常?
- 7、请解释help()函数与dir()函数的区别与用途。
- 8、什么是模块化编程中的猴子补丁?
- 9、请编写一个斐波那契数列生成器。
- 10、你是否曾使用过Python的协程?若否,请详细说明其实现原理。
- 11、请阐述Python中的反射机制及其应用场景。
- 12、除了使用title函数外,请提供一种将字符串首字母大写的实现方法。
- 13、super()函数的主要作用是什么?
- 14、单下划线命名与双下划线命名各自适用什么样的场景?
- 15、为什么建议避免将可变对象作为默认参数传递?
- 16、请描述多种方法获取当前系统时间。
- 17、列表与元组在数据类型存储方式上有哪些区别?
- 18、“列表”与“字典”在数据存储功能上有何本质区别?”
1、当Python退出时,是否会清除所有分配的内存?
回答是否?当程序正常结束运行时,在以下情况下不会触发内存释放:
一是那些在运行过程中与其他对象形成循环引用关系的Python模块;
二是那些从全局名称空间中导入的对象。
这些内存部分无法通过解压或其他方式被释放出去,
因为具备一套高效的内存管理机制,
系统会尽力清理并销毁所有的对象。
2、Python的优势有哪些?
Python具有相对容易的学习特性
3、什么是元组的解封装
首先展示解封装
将1,2,3封装到元组mytuple中,再将值解封装到变量x,y,z
mytuple=1,2,3
print(mytuple)
x,y,z=mytuple
print(x)
print(y)
print(z)
c
4、Python中如何动态获取和设置对象的属性?
Python中动态获取属性
class MyClass:
def __init__(self):
self.my_attr = 'Hello World'
my_object = MyClass()
# 动态获取属性
my_attr_value1 = getattr(my_object, 'my_attr')
print(my_attr_value1) # 输出: Hello World!
# my_attr_value2=getattr(my_object,'my_name')
# print(my_attr_value2) # AttributeError: 'MyClass' object has no attribute 'my_name'
my_attr_value3 = getattr(my_object, 'my_name', 'There is no attribute value')
# There is no attribute value
print(my_attr_value3)
c

Python中动态修改属性
class MyClass:
def __init__(self):
self.my_attr = 'Hello World'
my_object = MyClass()
# 动态获取属性
my_attr_value4 = getattr(my_object, 'my_attr')
print(my_attr_value4) # Hello World
# 动态设置属性
setattr(my_object, 'my_attr1', 'Goodbye ')
my_attr_value5 = getattr(my_object, 'my_attr1')
print(my_attr_value5) # Goodbye
c

5、创建删除操作系统上的文件
- 获取当前工作目录:调用os模块的cwd函数
- 获取文件列表:可以通过调用listdir方法来查看当前目录中的所有文件与目录
- 在当前目录下创建一个新的子目录:可以使用mkdir方法创建一个新的子目录
- 递归创建多级子目录:makedirs函数允许设置层级参数以实现递归创建多级子目录
- 删除空子目录:rmdir方法可以用来删除无名或不可执行的空子目录
- 获取绝对路径值:abs属性能够返回一个对象的绝对路径值
- 提取文件名信息:basename属性能够提取出文件名的部分
- 分解路径信息:dirname属性能够分解出路径中包含的所有部分
- 分割完整路径组件:split方法可以将完整的路径分解为头尾两部分
- 拼接路径组件到一起:join方法能够将多个字符串拼接成一个完整的路径字符串
- 检查特定路径是否存在:exists方法能够判断指定路径是否真的存在
- 判断特定对象是否为存储容器类对象实例?isdir方法能够判断一个变量是否指向一个存储容器(如 directory)
- 判断特定对象是否为存储文件类对象实例?isfile方法能够判断一个变量是否指向一个存储文件(如 file)
6、主动抛出异常

常见的异常
列表或元组索引越界 | 字典中不存在指定键 | 未定义变量 | 代码存在语法问题 | 导入失败 | 断言失败 | 对象不具备该属性 | 缩进异常 | 除以零的情况发生
7、help() 函数和 dir() 函数
help()函数:该函数主要用于显示文档字符串,并且可以帮助了解如何在这些参数中使用它
该Python函数能够返回所指定的类或模块的所有内容,并涵盖其中的所有方法、属性以及变量。
8、什么是猴子补丁

9、实现一个斐波那契数列
def func(n):
a = 0
b = 1
while a <= n:
print(a)
a, b = b, (a + b)
func(8)
c
10、用过python的协程吗?如何实现?
1、协程是一种以用户态为基础设计的轻量级并行执行单元,在调度机制上完全由调用者主动进行配置与管理;这种特点使得系统的整体性能得到显著优化,并且相比传统的线程切换方式具有更低的资源消耗开销。
2、目前最常用且功能强大的异步框架是gevent库。
3、单个进程或主线程最多可同时管理多个独立运行的协进程。
在利用gevent实现多任务处理的过程中存在一个独特的优势特性:当某个耗时操作启动后会立即暂停当前执行的任务以执行另一个非阻塞操作。

11、Python 中的反射



我使用于接口自动化中

12、将"hello world"转换为首字母大写"Hello World"(不使用 title 函数)
d="hello world"
print([i[0].upper()+i[1:] for i in d.split(" ")])
c
13、super 函数的作用
super 函数在Python中主要用于获取当前对象的父类(或超类),从而实现对父类方法的调用。它通过提供一种简便的方式供开发者访问和重用父类中的功能,并且解决了多重继承时的方法查找顺序问题。

14、单下划线和双下划线的作用

15、为什么不建议函数的默认参数传入可变对象
Python中,在函数定义阶段生成默认值的做法并不适用于每次函数调用阶段的执行过程。具体来说,在Python中,默认参数是由函数定义阶段生成的静态对象实例,并非动态创建;而只有当可变类型的默认参数被实际传递给调用方时才会被初始化为该类型实例;因此,在未显式传递的情况下,默认参数会被自动赋值给对应的形参变量并保持其初始状态
可变类型的默认值在定义函数时只会初始化一次,在随后的函数调用中会被反复使用。这表示一旦在函数体内对这个默认值进行了更改,在之后的所有函数调用中它的值会保持修改后的状态,并不会恢复到最初未更改的状态。
16、获取当前时间

17、列表与元组的区别
列表[],元组()
元组不可变,列表可变
* **由于元组不可变,所以使用 tuple 可以使代码更安全** * **tuple 放弃了对元素的增删(内存结构设计上变的更精简),换取的是性能上的提升:创建 tuple 比 list 要快,存储空间比 list 占用更小。所以就出现了“能用 tuple 的地方就不用 list”的说法。** * **多线程并发的时候,tuple 是不需要加锁的,不用担心安全问题,编写也简单多了** * **直接在同一个元组上更新是不可行的,但是可以通过拷贝现有的元组片段构造一个新的元组的方式解决。
通过分片的方法让元组拆分成两部分,然后再使用连接操作符(+)合并成一个新元组,最后将原来的变量名(temp)指向连接好的新元组。在这里就要注意了,逗号是必须的,小括号也是必须的!**

列表具有增删改查等操作,元组只有查操作
列表append、extend、pop、remove、del 元组只有index、count
列表用于频繁操作,元素用于存储后读取
列表不可哈希,元组可以哈希
元组使用(a,),如果只有一个元素,必须使用,
18、列表与字典的区别
相同点
- 可变性: 列表和字典都是可变的数据结构,可以在创建后修改其内容。
不同点
1、存储元素的方式
- 列表:是一个顺序排列的集合,并且每个元素可以通过其索引位置进行获取。其中所有元素都是按照连续整数从0开始进行编号。
- 字典:是一种非顺序存储的数据结构,在其内部组织形式中包含多个键-值对。每个数据项都由一个唯一的键与一个特定的数据项相关联,并且可以根据该键快速定位到对应的数值。
2、索引和键
- 列表:列表中的元素可通过索引直接获取,默认情况下支持整数索引运算功能。如在代码中可表示为my\_list[0]。
- 字典:字典中的元素可通过键名直接获取,默认情况下支持字符串键的操作特性。如在代码中可表示为my\_dict['key']。
3、有序性:
- 列表:具有顺序特性,在数据存储时会按照插入顺序维护元素位置关系。
- 字典:无固定顺序,在数据存储时不会维持元素排列位置,在功能设计上也未提供基于索引访问元素的支持。
4、元素类型:
- 集合: 集合成员可以是各种数据类型,并且包含整数、字符串以及列表等多种形式;成员之间可能具有相同的值。
- 字典: 字典中的键字段及其属性名称都可采用任意数据类型配置。值得注意的是每个键字段必须具有唯一的名称,并且各字段的属性名称可具有相同的名称。
5、语法表示:
列表:以方括号[]的方式表示;字典:以花括号{}的方式表示
6、可迭代性:
- 列表:通过循环遍历每个元素。
- 字典:可以依次遍历字典的所有键值对;或者也可以逐个访问字典中的每一个键及其对应的值。
7、常见操作:
- 列表: 包含基本的添加元素以及删除元素的操作,并且还支持切片操作。
- 字典:支持基本的添加键值对以及删除键值对的操作,并且能够获取所有的键或者所有的值。
8、空间占用和查找效率对比
- 字典查询速度较快, 但存储数据所占内存较大, 占用空间的时间有所提升
- 列表查询速度较慢, 但存储数据所占内存较小, 占用时间的空间有所提升

