浅谈python中的引用、拷贝、指针与C++的区别
最近在学C++,在刷题的时候遇到了关于引用、指针的问题,重温相关知识后发现C++中的引用于python中引用有很大的区别,我想这就是C++效率远高于python的原因之一。通过两篇文章想梳理下python与C++在引用上的区别以及C++中引用和指针的区别。 Python的引用 在python中引用就是引用赋值,等同于浅拷贝,可以看一个例子: In [13]: a = 1 In [14]: b = a In [15]: id(a) Out[15]: 4553065616 In [16]: id(b) Out[16]: 4553065616 In [20]: b is a Out[20]: True In [21]: b == a Out[21]: True 上面代码中先初始化了一个值为1,名字..
更多如何理解Python的接口类、抽象类、多态和鸭子类型
抽象类 抽象类是一个特殊的类,为了在团队开发中能够规范化代码而延伸出来的知识,源于java,这种类它只能被继承而不能被实例化。这也说明了该类中的所有函数以及属性都将用来被继承。 为什么要使用抽象类 规范代码: 它的子类必须实现抽象类中的所有函数 前面有提到有一点就是为了规范代码,在团队协作中很经常会遇到多个人开发同一个模块的情况,如果因为函数命名问题导致两个子类中的方法不同。为了避免这种问题才出现了抽象类这种概念。 易于维护: 还有另外个原因是为了减少代码的重复量和易于维护。比方说我们有多个汽车产品,不同的汽车有不同的功能。有的有自动驾驶,有的有全景天窗,但是只要是汽车都会有行驶,左转右转等基本功能,这些基本功能我们就可以放在抽象类中。 from abc import ABCMeta,abst..
更多python迭代器、生成器看完这篇你就懂了
生成器是python中非常有用特性,而且十分特殊,特殊到以前学过的语言都没有这种功能,身边的一些学其他语言的开发朋友也都不清楚生成器是什么。 所以在这篇文章中将尽可能详细的解释下生成器是什么,迭代器是什么 可迭代对象 在说生成器之前我们必须得提可迭代对象。可迭代对象是什么,顾名思义迭代器就是支持迭代操作的对象。在python3如列表,字典,字符串都是可迭代对象,简单来说就是任何实现了__next__方法的容器都是可迭代对象,而可迭代对象可以转换成迭代器。 迭代器甚至可以表示一个无限大的数据流,例如全体自然数。而使用list是永远不可能存储全体自然数的。 看了下面的代码应该会清楚很多 In [7]: a = [1,2,3] In [8]: b = iter(a) In [9]: a Out[9]: [1..
更多浅谈MySQL中的锁
前言 之前学习了MySQL的事务管理MySQL管理事务处理 在数据库处理高并发的时候需要涉及到事务管理和锁的机制问题这两块知识。对于锁的处理一直是一个老生常谈的话题,内容太过复杂。这次借助这篇文章分享下我对Innodb中的锁的机制的理解。 快照读与当前读 在了解锁的机制前我们得先了解快照读与当前读的区别。 一般我们常用的select * from ...也是读,共享锁那也是读,它们之间有什么区别呢?其实MySQL中的读与事务隔离级别中的读是不同的读。 在 MVCC 并发控制中,读操作可以分成两类:快照读 (snapshot read)与当前读 (current read)。 快照读,读取的是记录的可见版本 (有可能是历史版本),不用加锁。当前读,读取的是记录的最新版本,并且,当前读返回的记录,都会加上锁,..
更多【MySQL必知必会】管理事务处理
什么是事务处理 事务处理是为了维护数据的完整性的技术手段,是对数据库数据安全的一种保证。它能确保成批的MySQL语句要么完全执行要么完全不执行,不会存在执行部分语句而造成该处理的数据没有被处理导致数据的错乱。 举例来说:公司某位员工离职了,除了要删除职员表中的数据还需要删除财务数据表中的相关数据以及其他业务上的数据,客户关系数据等。这些操作都需要全部一起执行,否则会造成很严重的问题。 ACID 事务是DBMS的执行单位。它由有限个数据库操作语句组成。但不是任意的数据库操作序列都能成为事务。一般来说,事务是必须满足4个条件(ACID) 原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚。 一致性(Consistency) 一致性是指事务必须使数据库从一个一致的状态变到另..
更多算法图解之广度优先搜索
简介 广度优先搜索算法(Breathed First Search)是一种搜索算法。原理就是从树的根节点开始去遍历所有节点,从而找出最短路径。 使用范围 可以用来走迷宫,在游戏领域中可以用来做自动寻路功能 可以用来编写跳棋AI,计算多少步能获胜 也可以用来根据自己的人际关系网络查找到关系最近的医生 图 图由节点和边组成。一个节点可能与众多节点直接相连 图用于模拟不同的东西是如何相连的。 类似这样模拟了欠债关系的就是图 在遇到能用广度优先搜索算法解决问题时,我们可以先借助图来建立问题模型,然后再通过算法去解决问题。 图只是用来模拟问题模型,并不是最终答案 树形结构也是一种图,与其他图不同的是它不会往后指。 也就是说遇到问题后,我们可以通过图把问题的关键点放在节点上。用散列表把这些点按照图的结构存储起..
更多【MySQL】浅谈MySQL的LOAD DATA
前言 好久没碰MySQL了,这次碰巧在研究superset的时候需要将一份csv格式的数据文件导入到数据库中。正好借此机会可以重温下MySQL。 数据来源 网盘密码 : g5xa 开发环境 Mac OS 10.13 MySQL 8.0 准备工作 在开始之前需要对源数据做一次清洗: 去除”,“等影响数据导入的符号 去除第一行索引值,因为它不是数据 如果需要咋数据库中加上id,那么为了对应在源数据中也要加上,excel中加上id还是很方便的。 把数据转为utf-8格式的csv文件 在这之前先简单阅读下官方文档:MySQL Documentation 可以很方便的找到LOAD DATA的表达式: LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] ..
更多【MySQL必知必会】使用触发器
触发器 当某个表发生更改时需要MySQL自动处理事件就是触发器。MySQL只会响应以下语句从而自动执行一条MySQL语句: DELETE INSERT UPDATE 创建触发器 创建触发器时,需要注意一些细节: 唯一的触发器名 触发器关联的表 触发器应该响应的活动(DELETE,INSERT,UPDATE) 触发器何时执行(处理之前或之后) 在MySQL5中同一数据库中的两个表可以用同一个名字,但是同一个表中的触发器名字必须唯一。但是在DBMS数据库中触发器名只能唯一。 可以用CREATE TRIGGER语句创建触发器。 CREATE TRIGGER test_tt AFTER DELETE ON `test` FOR EACH ROW BEGIN DECLARE s VARCHAR(20)..
更多【MySQL必知必会】使用游标
游标 由于MySQL检索返回的是一组成为结果集的行,可能是零行也可能是多行,但是之前学到的并没有能一行一行处理的方式。而有时候需要需要在检索出来的行中前进、后退一行或多行,这个时候需要使用游标。 游标主要用于交互式应用,其中用户需要滚动屏幕上的数据,并对数据进行浏览过更改。 游标在MySQL中只能用于存储过程或者函数 使用游标的流程 在能够使用游标前,必须声明它。为了定义要使用的SELECT语句。 声明游标后需要打开游标。这个过程用SELECT语句把数据实际检索出来。 对于填有数据的游标,根据需要检索出各行。 结束游标需要关闭它 打开和关闭游标 打开:OPEN CURSOR 关闭: CLOSE CURSOR CURSOR指的是先前定义的游标名 如一个完整的打开关闭过程: CREATE PROCED..
更多【MySQL必知必会】使用存储过程
存储过程 存储过程简单来说就是为以后的使用而保存的一条或多条MySQL语句集合。这里可以理解为在实际项目中,可能会遇到不同逻辑的MySQL,这个时候需要把这些语句集合起来,相当于是一个文件。 为什么使用存储过程 通过把处理封装在容易使用的单元中,简化复杂的操作。 由于不要求反复建立一系列处理步骤,这保证了数据的完整性。如果所有开发人员和应用程序都使用同一存储过程,则所使用的代码都是相同的。这一点的延伸就是防止错误。需要执行的步骤越多,出错的可能性就越大。防止错误保证了数据的一致性。 简化对变动的管理。如果表名、列名或业务逻辑有变化,只需要更改存储过程的代码。使用它的人员甚至不需要知道这些变化。 提高性能。因为使用存储过程比使用比使用单独的SQL语句要快。 存在一些只能用在单个请求中的MySQL元素和特性..
更多