目录
🍔 Python下多线程的限制以及多进程中传递参数的⽅式
🍔 Python是如何进⾏内存管理的?
🍔 Python⾥⾯如何拷⻉⼀个对象?
🍔 Python⾥⾯search()和match()的区别?
🍔 lambda表达式格式以及应⽤场景?
🍔 *args和**kwarg作⽤是什么?
🍔 is和==的区别是什么?
🍔 简述Python的深浅拷⻉以及应⽤场景?
🍔 Python垃圾回收机制?
🍔 解释 Python 中的三元表达式
🍔 Python的可变类型和不可变类型?
🍔 Python下多线程的限制以及多进程中传递参数的⽅式
- python多线程有个全局解释器锁(global interpreter lock),这个锁的意思是任⼀时间只能有⼀个线程 使⽤解释器,跟单cpu跑多个程序⼀个意思,⼤家都是轮着⽤的,这叫“并发”,不是“并⾏”。
- 多进程间共享数据,可以使⽤ multiprocessing.Value 和 multiprocessing.Array
🍔 Python是如何进⾏内存管理的?
- Python引⽤了⼀个内存池(memory pool)机制,即Pymalloc机制(malloc:n.分配内存),⽤于管理对⼩块内存的申请和释放。
内存池(memory pool)的概念:
- 当创建⼤量消耗⼩内存的对象时,频繁调⽤new/malloc会导致⼤量的内存碎⽚,致使效率降低。内存池的概念就是预先在内存中申请⼀定数量的,⼤⼩相等 的内存块留作备⽤,当有新的内存需求时,就先从内存池中分配内存给这个需求,不够了之后再申请新的内存。这样做最显著的优势就是能够减少内存碎⽚,提升效率。内存池的实现⽅式有很多,性能和适⽤范围也不⼀样。
python中的内存管理机制——Pymalloc:
- python中的内存管理机制都有两套实现,⼀套是针对⼩对象,就是⼤⼩⼩于256bits时,pymalloc会在内 存池中申请内存空间;当⼤于256bits,则会直接执⾏new/malloc的⾏为来申请内存空间。
- 关于释放内存⽅⾯,当⼀个对象的引⽤计数变为0时,python就会调⽤它的析构函数。在析构时,也采⽤了内存池机制,从内存池来的内存会被归还到内存池中,以避免频繁地释放动作。
🍔 Python⾥⾯如何拷⻉⼀个对象?
- 标准库中的copy模块提供了两个⽅法来实现拷⻉.⼀个⽅法是copy,它返回和参数包含内容⼀样的对象, 使⽤deepcopy⽅法,对象中的属性也被复制
🍔 Python⾥⾯search()和match()的区别?
- match()函数只检测re是不是在string的开始位置匹配,search()会扫描整个string查找匹配, 也就是说 match()只有在0位置匹配成功的话才有返回,如果不是开始位置匹配成功的话,match()就返回none。
🍔 lambda表达式格式以及应⽤场景?
- lambda函数就是可以接受任意多个参数(包括可选参数)并且返回单个表达式值得函数。
- 语法:lambda [arg1 [,arg2,.....argn]]:expression
def calc(x,y):
return x*y
# 将上述⼀般函数改写为匿名函数:
lambda x,y:x*y
应⽤:
- lambda函数⽐较轻便,即⽤即仍,适合完成只在⼀处使⽤的简单功能。
- 匿名函数,⼀般⽤来给filter,map这样的函数式编程服务
- 作为回调函数,传递给某些应⽤,⽐如消息处理。
🍔 *args和**kwarg作⽤是什么?
- *args代表位置参数,它会接收任意多个参数并把这些参数作为元组传递给函数。
- **kwargs代表的关键字参数,允许你使⽤没有事先定义的参数名。
- 位置参数⼀定要放在关键字参数的前⾯。
- 作⽤:使⽤*args和**kwargs可以⾮常⽅便的定义函数,同时可以加强扩展性,以便⽇后的代码维护。
🍔 is和==的区别是什么?
- ==是python标准操作符中的⽐较操作符,⽤来⽐较判断两个对象的value(值)是否相等;
- is也被叫做同⼀性运算符,这个运算符⽐较判断的是对象间的唯⼀身份标识,也就是id是否相同。
🍔 简述Python的深浅拷⻉以及应⽤场景?
- 导⼊模块:import copy
- 浅拷⻉:copy.copy
- 深拷⻉:copy.deepcopy
- 浅拷⻉指仅仅拷⻉数据集合的第⼀层数据,深拷⻉指拷⻉数据集合的所有层。<br> 所以对于只有⼀
- 层的数据集合来说深浅拷⻉的意义是⼀样的,⽐如字符串,数字,还有仅仅⼀层的字典、列表、元祖等.
应用:
- 浅拷⻉在拷⻉⼤量数据且不需要改变内部元素的值的时候,能⼤量的减少内存的使⽤;
- 深拷⻉在拷⻉⼤量数据的时候,需要在前后内部元素的内容进⾏改变的时候,可以修改拷⻉出来的模板。
🍔 Python垃圾回收机制?
- 回收计数引⽤为0的对象,释放其占⽤空间
- 循环垃圾回收器。释放循环引⽤对象
🍔 解释 Python 中的三元表达式
与 C++不同, 在 Python 中我们不需要使⽤符号,⽽是使⽤如下语法:
- [on true] if [expression]else [on false]
- 如果 [expression] 为真, 则 [on true] 部分被执⾏。如果表示为假则 [on false] 部分被执⾏
🍔 Python的可变类型和不可变类型?
不可变类型:
- 整数(int)
- 浮点数(float)
- 元组(tuple)
- 字符串(str)
- 布尔值(bool)
可变类型:
- 列表(list)
- 字典(dict)
- 集合(set)
💘若能为您的学习之旅添一丝光亮,不胜荣幸💘
🐼期待您的宝贵意见,让我们共同进步共同成长🐼