- 博客(23)
- 收藏
- 关注
原创 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
667
原创 闭包(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
168
原创 python 字典与集合的工作原理
字典dict与集合set简介字典是一系列由键(key)和值(value)配对组成的元素的集合,在Python3.7+,字典被确定为有序(注意:在3.6中,字典有序是一个implementation detail,在3.7才正式成为语言特性,因此3.6中无法100%确保其有序性),而3.6之前是无序的,其长度大小可变,元素可以任意地删减和改变。相比于列表和元组,字典的性能更优,特别是对于查找、添加和删除操作,字典都能在常数时间复杂度内完成。而集合和字典基本相同,唯一的区别,就是集合没有键和值的配对
2022-02-08 10:58:20
225
原创 python列表和元组差别
先说结论: 列表是动态的,长度可变,可以随意的增加、删减或改变元素。列表的存储空间略大于元组,性能略逊于元组。 元组是静态的(可以用作字典的key),长度大小固定,不可以对元素进行增加、删减或者改变操作。元组相对于列表更加轻量级,性能稍优。 一、存储方式的差异1. 储存同样数量和大小的元素,列表占用空间更大原因:一是因为列表是动态的,需要存储指针;二是因为列表多一个额外空间存储目前已分配的长度大小,用于实时追踪列表空间的使用情况,当空间不足时,及时分配额外空间。2. 列表
2022-02-07 17:01:42
1391
原创 C++项目中的extern “C“ {}
https://www.cnblogs.com/skynet/archive/2010/07/10/1774964.html
2021-08-05 10:43:04
50
原创 Python 零碎知识点
python中list作为全局变量无需global声明的原因https://www.cnblogs.com/yym2013/p/5915980.html
2021-07-27 21:51:32
113
原创 Python关键字 global与nonlocal的区别
https://blog.csdn.net/xCyansun/article/details/79672634
2021-07-21 16:08:29
80
原创 Python 可迭代对象、迭代器、生成器
可迭代对象(Iterable)对象中实现了 __getitem__ 或者 __iter__ 方法,那么这个对象就是可迭代对象;可迭代对象分为两大类,一种是实际保存的序列,即列表、元组,字符串,Python中几乎所有的容器类型都是可迭代对象;另一种是虚拟序列,包括range函数的返回值、zip函数的返回值、enumerate函数的返回值等等。迭代器(Iterator)若对象中实现了 __next__ 和 __iter__ 方法,那么这个对象就是迭代器;可迭代对象支持内置函数iter,通
2021-07-21 15:53:21
90
原创 Python装饰器
使用场景可以用到装饰器的地方有很多,简单的举例如以下场景引入日志 函数执行时间统计 执行函数前预备处理 执行函数后清理功能 权限校验等场景 缓存装饰器的理解https://blog.csdn.net/u013858731/article/details/54971762多个装饰器装饰同一个函数时的执行流程https://www.cnblogs.com/ywk-1994/p/9502848.html...
2021-07-21 10:03:53
155
1
原创 GDB QuickStart
源码查看list / l 打印当前源码 l 10 打印第10行附近的源码 l filename:10 打印指定文件第10行的源码(行号可以省略) l function 打印指定函数附近的源码 启动调试gdb ./可执行文件 启动gdb run / r 运行程序 list 打印当前文件源码 调试core文件(coredump)ulimit -c 查看core文件的大小限制,如果返回...
2021-06-01 11:29:01
102
原创 Cmake入门笔记(二)
常用命令cmake_minimum_required (VERSION XXX) 指定运行此配置文件所需的CMake最低版本;(一般只在根CMakeLists文件中添加) project (XXX) 指定项目的名称为XXX,后续可以通过${PROJECT_NAME}获取;(一般只在根CMakeLists文件中添加) add_executable (XXX srcFiles) 将源文件(如main.cpp)编译成名为XXX的可执行文件; 源文件的数量可以为多个..
2021-05-31 15:49:12
665
1
原创 Cmake入门笔记(一)
过程解析如下:(一)预处理阶段。首先我们会对我们编辑得到的源代码(即扩展名为.c/.cpp文件)通过预处理器进行预处理,这一部分是由我们的编译器帮我们完成的。预处理器做的事情就是将原始源文件中的所有预处理器指令替换为暗示指令的实际库代码。那么什么是预处理指令呢?实际上这些是我们在代码很常见的,如#include和#define指令。之后,生成的文件基本上被取代并获得扩展名为.i文件。(二)编译器编译阶段。接下来是编译器的处理阶段,这个阶段是把高级语言翻译成低级语言的过程,也负责检查源代码的语法/..
2021-05-29 15:44:25
212
原创 Python垃圾回收机制
核心阐述在Python中,主要通过引用计数进行垃圾回收; 通过 “标记-清除” 解决容器对象可能产生的循环引用问题; 通过 “分代回收” 以空间换时间的方法提高垃圾回收效率。一、引用计数typedef struct_object { int ob_refcnt; struct_typeobject *ob_type;} PyObject;Python中每一个对象的核心就是一个结构体PyObject,它的内部有一个引用计数器(ob_refcnt)。程序在运行的过程中会实时的.
2021-05-19 16:57:34
90
转载 Python List底层实现
list 就是个动态指针数组,指针数组里面对应存放了每个元素所在的地址https://blog.csdn.net/u014029783/article/details/107992840
2021-05-18 17:40:59
164
原创 GIL全局变量锁
一、GIL介绍GIL (Global Interperter Lock) 称作全局解释器锁;在解析多线程时,保证每个时刻是由一个线程占用CPU,即使是多核CPU,即“并发”而非“并行”。它不是Python的语言特性,是Cpython解释器的一个概念,GIL只在Cpython存在;在CPython中,每一个Python线程执行前都需要去获得GIL锁 ,获得该锁的线程才可以执行,没有获得的只能等待 ,当具有GIL锁的线程运行完成后,其他等待的线程就会去争夺GIL锁。二、为什么需要GIL.
2021-05-17 23:30:37
416
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
89
原创 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
287
原创 Python传参 传值or传引用
结论传值或者传引用,是C/C++的函数参数的传递方式;Python中没有所谓传值或者传引用,所以此问题没有意义,Python有着自己的一套独特的传参方式,是其动态语言的性质决定的;细节1. 传递的是不可变参数在Python中,所有的不可变对象(mutable)是共享内存的,如int, float, string, tuple。见下面的例子:所以:传递不可变对象参数时,如果只读该参数值,那么等同于传引用,因为实参形参都指向同一内存;传递不可变对象参数时,如果“修改”该参数的话,那么其实
2021-05-17 12:04:35
233
原创 类、抽象类、接口的继承
简化概括1.类继承—>子类完全继承父类特点2.抽象类继承—>继承时抽象的部分不同的子类可以有不同的实现3.接口继承—>所有成员在子类都可以有不同的实现至于为什么要用接口而不是抽象类,这要看二者适用的情况当个性大于共性时,适合接口,如鸟和飞机,适合抽象出一个飞的接口当共性大于个性时,适合抽象类,如老鹰和麻雀,适合抽象出一个鸟的父类另外接口可以实现多重继承,这也是一...
2020-04-26 10:53:27
156
转载 面向对象之多态(向上转型与向下转型)
https://blog.csdn.net/qq_31655965/article/details/54746235
2020-04-25 10:31:21
119
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人