Python
文章平均质量分 61
有梦想的小飞机
这个作者很懒,什么都没留下…
展开
-
map()、filter()和reduce()
map()、filter()和reduce()是python提供的几个常用的函数式编程接口,性能好,直接由C语言写的,运行时不需要通过python解释器间接调用,并且内部做了诸多优化。map()map(function, iterable)函数,它表示,对iterable中的每个元素,都运用function这个函数,最后返回一个新的可遍历的集合:l = [1, 2, 3, 4, 5]new_list = map(lambda x: x * 2, l) # [2, 4, 6, 8, 10]原创 2022-02-12 15:25:35 · 639 阅读 · 0 评论 -
闭包(closure)
闭包简介闭包其实和嵌套函数类似,不同的是,闭包的外部函数返回的是一个函数,而不是一个具体的值。返回的函数通常赋于一个变量,这个变量可以在后面被继续执行调用。def nth_power(exponent): def exponent_of(base): return base ** exponent return exponent_of # 返回值是exponent_of函数square = nth_power(2) # 计算一个数的平方cube = nth_p原创 2022-02-09 09:18:12 · 133 阅读 · 0 评论 -
python 字典与集合的工作原理
字典dict与集合set简介字典是一系列由键(key)和值(value)配对组成的元素的集合,在Python3.7+,字典被确定为有序(注意:在3.6中,字典有序是一个implementation detail,在3.7才正式成为语言特性,因此3.6中无法100%确保其有序性),而3.6之前是无序的,其长度大小可变,元素可以任意地删减和改变。相比于列表和元组,字典的性能更优,特别是对于查找、添加和删除操作,字典都能在常数时间复杂度内完成。而集合和字典基本相同,唯一的区别,就是集合没有键和值的配对原创 2022-02-08 10:58:20 · 174 阅读 · 0 评论 -
python列表和元组差别
先说结论: 列表是动态的,长度可变,可以随意的增加、删减或改变元素。列表的存储空间略大于元组,性能略逊于元组。 元组是静态的(可以用作字典的key),长度大小固定,不可以对元素进行增加、删减或者改变操作。元组相对于列表更加轻量级,性能稍优。 一、存储方式的差异1. 储存同样数量和大小的元素,列表占用空间更大原因:一是因为列表是动态的,需要存储指针;二是因为列表多一个额外空间存储目前已分配的长度大小,用于实时追踪列表空间的使用情况,当空间不足时,及时分配额外空间。2. 列表原创 2022-02-07 17:01:42 · 1334 阅读 · 0 评论 -
Python 零碎知识点
python中list作为全局变量无需global声明的原因https://www.cnblogs.com/yym2013/p/5915980.html原创 2021-07-27 21:51:32 · 60 阅读 · 0 评论 -
Python 可迭代对象、迭代器、生成器
可迭代对象(Iterable)对象中实现了 __getitem__ 或者 __iter__ 方法,那么这个对象就是可迭代对象;可迭代对象分为两大类,一种是实际保存的序列,即列表、元组,字符串,Python中几乎所有的容器类型都是可迭代对象;另一种是虚拟序列,包括range函数的返回值、zip函数的返回值、enumerate函数的返回值等等。迭代器(Iterator)若对象中实现了 __next__ 和 __iter__ 方法,那么这个对象就是迭代器;可迭代对象支持内置函数iter,通原创 2021-07-21 15:53:21 · 65 阅读 · 0 评论 -
Python装饰器
使用场景可以用到装饰器的地方有很多,简单的举例如以下场景引入日志 函数执行时间统计 执行函数前预备处理 执行函数后清理功能 权限校验等场景 缓存装饰器的理解https://blog.csdn.net/u013858731/article/details/54971762多个装饰器装饰同一个函数时的执行流程https://www.cnblogs.com/ywk-1994/p/9502848.html...原创 2021-07-21 10:03:53 · 127 阅读 · 1 评论 -
Python垃圾回收机制
核心阐述在Python中,主要通过引用计数进行垃圾回收; 通过 “标记-清除” 解决容器对象可能产生的循环引用问题; 通过 “分代回收” 以空间换时间的方法提高垃圾回收效率。一、引用计数typedef struct_object { int ob_refcnt; struct_typeobject *ob_type;} PyObject;Python中每一个对象的核心就是一个结构体PyObject,它的内部有一个引用计数器(ob_refcnt)。程序在运行的过程中会实时的.原创 2021-05-19 16:57:34 · 86 阅读 · 0 评论 -
Python List底层实现
list 就是个动态指针数组,指针数组里面对应存放了每个元素所在的地址https://blog.csdn.net/u014029783/article/details/107992840转载 2021-05-18 17:40:59 · 126 阅读 · 0 评论 -
GIL全局变量锁
一、GIL介绍GIL (Global Interperter Lock) 称作全局解释器锁;在解析多线程时,保证每个时刻是由一个线程占用CPU,即使是多核CPU,即“并发”而非“并行”。它不是Python的语言特性,是Cpython解释器的一个概念,GIL只在Cpython存在;在CPython中,每一个Python线程执行前都需要去获得GIL锁 ,获得该锁的线程才可以执行,没有获得的只能等待 ,当具有GIL锁的线程运行完成后,其他等待的线程就会去争夺GIL锁。二、为什么需要GIL.原创 2021-05-17 23:30:37 · 375 阅读 · 1 评论 -
Python的深拷贝浅拷贝
m = [1, 2, [3, 4], [5, [6, 7]]]假拷贝:n = m浅拷贝(shallow copy)主要操作有:copy.copy, a=b.copy(), a=b[:]切片深拷贝(deep copy)主要操作有:copy.deepcopy总结:浅拷贝只是新建了外层对象,内部元素还是和原对象的内部元素指向内存一样,因此浅拷贝的可变对象 元素的修改会相互影响;深拷贝不仅新建了外层对象,还为内部元素中的可变对象元素新建了对象,因此深拷贝的可变对象元素的修改相原创 2021-05-17 16:22:41 · 64 阅读 · 0 评论 -
Python中赋值操作的逻辑
先看代码C++和python操作后会得到同样结果,但是两者在PC中的操作其实不同;(1)python代码在内存中的操作示意图:首先内存会为3创建一个数据单元,再让b指向这个单元;然后b+5得到8,内存又会为这个8创建一个数据单元,再让b指向这个单元(b指向的内存地址发生了改变!);(2)C++代码在内存中的操作示意图:首先内存会创建一个int类,并分配对应的数据单元,类名为b,b类中存储数据3,然后b+3则对b类中的数据3加5变成8(b指向的内存地址没有发生改变!)(3)pyth原创 2021-05-17 15:26:06 · 270 阅读 · 0 评论 -
Python传参 传值or传引用
结论传值或者传引用,是C/C++的函数参数的传递方式;Python中没有所谓传值或者传引用,所以此问题没有意义,Python有着自己的一套独特的传参方式,是其动态语言的性质决定的;细节1. 传递的是不可变参数在Python中,所有的不可变对象(mutable)是共享内存的,如int, float, string, tuple。见下面的例子:所以:传递不可变对象参数时,如果只读该参数值,那么等同于传引用,因为实参形参都指向同一内存;传递不可变对象参数时,如果“修改”该参数的话,那么其实原创 2021-05-17 12:04:35 · 218 阅读 · 0 评论