
Python全栈
本专栏面向Python零基础读者,从基本语法写起,介绍了数据结构和算法、数据库优化、Linux命令、高级编程技巧和Web安全攻防、项目前导,讲解两大Web框架:Flask和Django。后进入Python爬虫、数据分析和机器学习入门阶段,基本覆盖Python全部内容,并提供面试技巧,助力全栈。
东哥说AI
AI超级个体:专注AI智能体、AI编程、大模型部署定制、RPA等前沿技术应用。
分享AI玩法、变现思路。
关注东哥不迷路,创富路上大踏步。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Python全栈(四)高级编程技巧之8.Python多任务-线程(下)和进程介绍
有两个线程对某一资源同时写入时,就可能会产生资源竞争,dis.dis()可以查看代码执行过程;当多个线程几乎同时修改某一个共享数据的时候,需要进行同步控制,即加互斥锁,保证了多线程情况下数据的正确性,如果两个线程分别占有一部分资源并且同时等待对方的资源,就会造成死锁,重用锁对象需要使用RLock;Condition类实现线程同步,可以用上下文处理器处理;进程是正在运行的代码+用到的资源,程序是没有执行的代码,是静态的,主要包括就绪、运行、等待三个状态,子进程将主进程的代码复制再执行。原创 2020-02-04 20:27:58 · 3112 阅读 · 3 评论 -
Python全栈(四)高级编程技巧之7.Python多任务-线程的介绍和使用
多任务是指多个任务同时进行,子线程结束之后主线程才会结束,要想主线程直接执行结束,可增加守护线程;enumerate()函数可以查看当前线程的数量,线程运行是没有先后顺序的;当调用Thread创建出来的实例对象的start()方法的时候,才会创建线程以及开始运行这个线程;类继承自Thread时,run()方法必须要重写,并且不能改名字;在函数内部修改全局变量不一定要声明global,要看是否对全局变量的指向进行了修改,多线程是共享全局变量的。原创 2020-02-04 13:53:20 · 2548 阅读 · 4 评论 -
Python全栈(四)高级编程技巧之6.Socket编程-TCP客户端和服务端
TCP协议是一种面向连接的、可靠的、基于字节流的传输层通信协议,特点是面向连接、可靠传输;TCP客户端构建流程包括创建socket、连接服务器、收发数据、 关闭套接字;TCP服务端构建过程包括socket创建套接字、信息绑定、listen使套接字变为可以被动连接、accept等待客户端的连接、收发数据、关闭套接字;多客户端实现需要使用多个循环;文件下载器时客户端发送文件请求,服务器端读取文件传输数据,客户端进行保存。原创 2020-02-03 15:34:32 · 5098 阅读 · 3 评论 -
Python全栈(四)高级编程技巧之5.Socket编程-基本概念、UDP发送与接收数据
IP用来标记网络上的一台电脑,根据版本分为IPv4和Ipv6,根据IP分为A、B、C类等;端口是为了识别不同的应用程序而分配给不同的应用的,分为知名端口和动态端口;TCP/IP定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准,分为四层,应用程序通过套接字向网络发出请求或者应答网络请求,socket的使用过程分为创建、收发数据、关闭;sendto(self, data, address)用于UDP发送数据,recvfrom(self, bufsize, flags)用于接收数据。原创 2020-02-02 18:37:53 · 4080 阅读 · 2 评论 -
Python全栈(四)高级编程技巧之4.元类编程、迭代器和生成器
__getattr__魔法方法是在查找不到属性的时候调用,__getattribute__方法在__getattr__方法之前执行;在类中实现 __get__ 、__set__ 、__del__ 中的一个方法,即可构成属性描述符,属性查找顺序优先级最高的是属性描述符;type还可以动态的创建类type(类名,由父类组成的元组,包含属性的字典);如果一个类中定义了metalass = xxx,Python就会用元类的方式来创建类;迭代器能作用于next()函数,生成器一次只能产生一个值,消耗的内存大大减小。原创 2020-02-02 11:33:19 · 3767 阅读 · 6 评论 -
Python全栈(四)高级编程技巧之3.垃圾回收机制和性能分析
实例方法名字的字符串调用方法需要实现不同类的统一接口;对象的引用计数变为0触发垃圾回收机制,内存被释放,gc模块手动释放内存,引用计数为0是垃圾回收机制启动的充分非必要条件,objgraph.show_refs()调试内存泄漏;用pdb.set_trace()进行代码调试,用cProfile进行性能分析;Python中对象分为可变对象和不可变对象,小整数对象池的范围是 -5 - 256。原创 2020-01-31 19:02:07 · 2863 阅读 · 1 评论 -
Python全栈(四)高级编程技巧之2.类与对象深度问题与解决技巧
类与对象深度问题与解决技巧主要包括六部分:如何派生内置不可变类型并修改其实例化行为;如何为创建大量实例节省内存,应用于游戏等;with语句用于上下文管理,contextlib简化上下文管理器;如何创建可管理的对象属性,是操作更简便同时保证安全性;在类中增加方法让类支持比较操作;通过弱引用在环状数据结构中管理内存。原创 2020-01-30 18:08:32 · 2923 阅读 · 4 评论 -
Python全栈(四)高级编程技巧之1.类与对象深度
Python崇尚“鸭子类型”,不要求严格的继承体系,定义时的类型和运行时的类型不一样,此时就成为多态;抽象基类就是定义各种方法而不做具体实现的类,不能被实例化,方法在子类中必须重写;isinstance()方法会考虑类的继承关系,type()没有考虑类的继承关系,类属性可以向上查找,实例属性不能向下查找;MRO算法用于查找顺序,自省通过一定的机制查询到对象的内部结构;如果希望在重写父类的方法的同时实现父类的功能,这时需要调用父类的方法了,可通过使用super来实现。原创 2020-01-29 19:33:16 · 3288 阅读 · 2 评论 -
Python全栈 Linux基础之4.远程管理命令
Linux常见的远程管理命令有:shutdown命令可以安全关闭或者重新启动系统;ifconfig查看/配置计算机当前的网卡信息,ping测试目标ip地址的连接是否正常;ping命令用来测试主机之间网络的连通性;SSH(Secure Shell)是一种网络协议,用于计算机之间的加密登录,客户端命令为ssh [-p port] user@remote;远程拷贝命令scp -P port 源文件路径 目标文件路径;配置公钥ssh-keygen;可以在~/.ssh/config里配置别名。原创 2020-01-28 18:39:09 · 4161 阅读 · 0 评论 -
Python全栈 Linux基础之3.Linux常用命令
Linux对文件(包括目录)有很多常用命令,可以加快开发效率:ls是列出当前目录下的文件列表,选项有-a、-l、-h,还可以使用通配符;c功能是跳转目录,可以使用相对路径和绝对路径;mkdir命令创建一个新的目录,有-p选项,rm删除文件或目录,有-f、-r选项;cp用于复制文件,有-i、-r选项,tree命令可以将目录结构显示出来(树状显示),有-d选项,mv用来移动文件/目录,有-i选项;cat查看文件内容,more分屏显示文件内容,grep搜索内容;>、>>将执行结果重定向到一个文件;|用于管道输出。原创 2020-01-23 21:20:47 · 34703 阅读 · 7 评论 -
Python全栈 Linux基础之2.Linux终端命令简介
终端命令的格式是command [options] [parameter],可以通过command --help显示command命令的帮助信息、man command查询command命令的使用手册,手册中有一些特定功能的操作按键。常用的Linux命令包括查看路径、文件,创建文件、文件夹和删除文件、文件夹等。在Linux中要多多使用快捷键、形成肌肉记忆,可以大大提高开发效率。原创 2020-01-23 10:56:19 · 4465 阅读 · 0 评论 -
Python全栈 Linux基础之1.Linux初章
操作系统是管理和控制计算机硬件与软件资源的计算机程序,其中Linux在服务器中占有率极高。操作系统从Unix、MacOS到Windows、Linux,是一部曲折、有趣的发展史,他们的诞生伴随着传奇人物和传奇事件。Ubuntu时Linux最具代表性的发行版之一,从目录结构、常见快捷键、常见设置(语言设置、Launcher菜单栏设置、常用软件及安装)等方面对Ubuntu进行了简单介绍。原创 2020-01-21 16:43:39 · 11819 阅读 · 5 评论 -
Python全栈(三)数据库优化之13.MySQL高级-主从复制和数据库总结
MySQL主从复制的目的是读写分离,一个数据库只负责读,一个只负责写,需要在主机和从机进行配置。MySQL常用的规范包括命名规范、设计规范、SQL语句规范和行为规范,在进行数据库编程时要遵守。最后从MySQL基础、MySQL高级和MySQL高级三个方面对数据库进行了总结。原创 2020-01-20 16:34:21 · 4552 阅读 · 5 评论 -
Python全栈(三)数据库优化之12.MySQL高级-数据库锁和数据库分区
锁是协调多个进程或线程并发访问某一资源的机制,根据对数据操作的粒度,分为表锁、行锁、间隙锁,表锁偏读,行锁偏写。分区表在逻辑上为一个表,在物理上存储在多个文件中,有Range、List、Hash三种类型,有各自不同的特点和使用场景,可根据不同的业务需要灵活选择。原创 2020-01-16 17:53:38 · 3420 阅读 · 0 评论 -
Python全栈(三)数据库优化之11.MySQL高级-排序优化、慢查询日志、批量插入数据和Show Profile
排序优化尽量使用index方式排序,避免使用filesort方式排序。慢查询日志用来记录在MySQL中响应时间超过阙值的语句,默认情况下没有开启。要实现批量插入数据,需要创建函数和存储过程并调用。Show Profile是MySQL提供可以用来分析当前会话中语句执行的资源消耗情况,可以用于SQL的调优的测量,默认情况下,参数处于关闭状态,并保持最近15次的运行结果。原创 2019-12-19 21:11:48 · 2157 阅读 · 1 评论 -
Python全栈(三)数据库优化之10.MySQL高级-表优化和索引优化
对表的优化包括单表优化、双表优化和多表优化,都是要使type成为index、range、ref等,避免全表扫描,同时Using index。对索引的优化有一些基本规律和原则,可概括为:全值匹配我最爱,最左前缀要遵守;带头大哥不能死,中间兄弟不能断;索引列上少计算,范围之后全失效;like百分写最右,覆盖索引不写星;不等空值还有or,索引失效要少用;varchar引号不可丢,SQL高级也不难。优化步骤包括问题复现、开启慢查询日志抓取慢SQL、explain分析、查询执行细节、调优等,并保证小表驱动大表。原创 2019-12-18 14:44:57 · 1979 阅读 · 1 评论 -
Python全栈(三)数据库优化之9.MySQL高级-explain分析SQL语句
影响服务器性能的原因包括硬件条件和SQL本身性能下降,MySQL常见瓶颈包括CPU、IO和服务器硬件。使用explain关键字可以模拟优化器执行SQL查询语句,语法是explain + SQL语句;包括id、select_type、type、possible_keys、key、key_len、ref、rows、Extra等字段,每个字段都有自己的意义,用于对SQL语句的性能进行测试。原创 2019-12-16 17:16:44 · 2022 阅读 · 1 评论 -
Python全栈(三)数据库优化之8.MySQL高级-存储引擎和基准测试
MySQL引擎中,MyISAM使用表级锁,并发性较低,不支持事务;InnoDB支持事务的ACID特性和行级锁,支持高并发;CSV以csv格式进行数据存储,适合作为数据交换的中间表;Memory数据存在内存中。基准测试是一种测量和评估软件性能指标的活动,用于评估服务器的处理能力,分为对整个系统和MySQL的测试,常用指标有TPS和QPS,测试工具有mysqlslap等。原创 2019-12-15 20:28:13 · 2064 阅读 · 0 评论 -
Python全栈(三)数据库优化之7.MySQL高级-事务、索引、账户管理和存储引擎介绍
事务是一个操作序列,这些操作要么都执行,要么都不执行,具有四大特性ACID,操作有开启事务、提交事务、回滚事务。索引是一种特殊的文件,包含着对数据表里所有记录的引用指针,可以大大提高查询效率。账户管理的操作包括创建账户、删除账户、修改密码、授权权限等。MySQL体系结构包括连接层、服务层、存储引擎层、文件系统4个层次,存储引擎层负责MySQL中数据的存储与提取原创 2019-12-10 22:28:34 · 1831 阅读 · 0 评论 -
Python全栈(三)数据库优化之6.Python操作MySQL和视图
用面向对象的方法对DB进行封装,对数据库的操作通过在类中定义方法来实现,主要包括初始化(连接数据库)、查询单条、多条、所有数据,通过实例化来实现操作。并且在数据库操作中通过commit()来提交事务、rollback()来处理异常状况。视图是一条select语句执行后返回的结果集,即虚表,也包括使用、删除、等操作,并且视图一般不能修改。视图的作用包括提高重用性、重构数据库、提高安全性等。原创 2019-12-07 17:31:23 · 1972 阅读 · 2 评论 -
Python全栈(三)数据库优化之5.MySQL自关联、外键与Python操作MySQL
自关联是处理SQL数据的一种技巧,可以加快查询效率。为了保证数据的完整性,将两张表之间的数据建立关系,因此就需要在表中添加外键约束,保证了数据的参照完整性。数据表拆分是一种思想,将大表拆分成很多小表,可以增加复用、提高效率。Python操作MySQL一般分为开始、创建connection、获取cursor、执行查询(执行命令、获取数据、处理数据等)、关闭cursor、关闭connection、结束等过程,并且在连接数据库时,一般要异常处理。原创 2019-12-06 17:28:11 · 1596 阅读 · 0 评论 -
Python全栈(三)数据库优化之4.数据库查询(分组、排序、分页、连接查询、子查询)
MySQL数据库查询包括很多操作,可以用group by进行分组,并且可以在分组后再进行筛选;用order by进行排序,有asc、desc两种模式;分页用来限制显示的条数。连接查询包括内连接、左连接和右连接,是将多张表连接成一个大的数据集。子查询即嵌套查询,在一个select语句中嵌套另一个select语句。原创 2019-12-03 20:19:01 · 1362 阅读 · 0 评论 -
Python全栈(三)数据库优化之3.数据的修改和删除及数据的条件查询
在MySQL中,修改和删除数据是很重要的操作。最重要的是查询,包括查询所有列、去重、指定列,还可以重命名。条件查询包括比较运算符(>、<、>=、<=、=、!=)、逻辑运算符(and、or、not),模糊查询的关键字like、rlike可以匹配模糊字段,范围查询的关键字有in、not in、between ... and ...、not between ... and ...,还用is null进行空判断。常用的聚合函数包括count()、max()、min()、sum()、avg(),详细具体、适合小白。原创 2019-12-02 14:22:24 · 1347 阅读 · 2 评论 -
Python全栈(一)基础之16.文件操作
文件操作是Python很重要的一个特性,一般分为打开文件、具体操作、关闭文件三个步骤,对于较大文件,应该逐行或者分批读取,并且有readline()和readlines()函数实现逐行读取,文件的写入包括覆盖和追加,对于不同的读写需求,打开模式可以设定不同的参数。对于二进制文件,参数后加b,是以字节形式读取的。tell()函数用来读取当前的位置,seek()函数用来修改当前读取位置。我们还可以通过os模块的函数进行目录相关的操作。详细具体,适合入门。原创 2019-12-01 13:35:03 · 1600 阅读 · 0 评论 -
Python全栈(三)数据库优化之2.数据库的操作与数据表的操作
SQL是关系型数据库的代表,语句分为DQL、DML、DDL,要保持数据的完整性和数据库约束,有整型、小数、字符串、日期时间、枚举类型等数据类型,包括主键、非空、自增等约束。操作包括对数据库的操作、对数据表的操作和对数据的操作(数据插入),既包括操作代码,又包括结果,详细具体、循序渐进,适合初学者。原创 2019-11-29 17:26:38 · 1226 阅读 · 1 评论 -
Python全栈(三)数据库优化之1.数据库简介
数据库是很重要的工具,相比于传统的存储数据的方式,他有很多不可替代的优势,这篇博客简单介绍了数据库相比于传统数据存储方式的优势、数据库(主要是MySQL)的相关简介和MySQL的安装配置。原创 2019-11-25 21:59:35 · 1223 阅读 · 2 评论 -
Python全栈(一)基础之15.异常处理
异常是Python中一个很重要的机制,用于处理程序运行中不可避免的一些错误,处理异常一般使用try_except_else语句。异常在被处理后不会再传播;异常传播时,实际就是异常对象抛给了调用处;Exception可以捕获所有的异常,并且可将异常对象赋值给另一个对象。并且还可以加入finally语句。同时,我们可以自定义异常类型来抛出程序运行时遇到的异常。原创 2019-11-24 17:32:55 · 1136 阅读 · 0 评论 -
Python全栈(二)数据结构和算法之9.树与树的算法
树作为一种抽象数据结构,用来模拟具有树状结构性质的数据集合,包括节点之间的关系(父子节点、兄弟节点、叶子节点等),节点的高度、深度、层数,包括无序树、有序树,有序树中最重要的是二叉树。从二叉树的定义、存储表示到算法实现,简单明了,并且对树的遍历的多种方式进行讲解和对比,浅显易懂,结合图示,更加直观,适合算法入门者学习、参考。原创 2019-11-23 17:11:21 · 1090 阅读 · 1 评论 -
Python全栈(二)数据结构和算法之8.快速排序、归并排序和二分查找的实现
快速排序和归并排序是时间复杂度相对较低的两种常见排序算法,实现的思路都是将序列分成两个部分,并且都能用递归实现,但是稳定性有所不同。搜索中查找是一种最基本的算法,最坏的时间复杂度是O(log2n)。博客中结合了过程图示和动态演示,生动直观,适合初学者。原创 2019-11-21 20:39:17 · 1567 阅读 · 2 评论 -
Python全栈(二)数据结构和算法之7.选择排序、插入排序和希尔排序的实现
选择排序、插入排序、希尔排序是常见也很重要的三种排序方式,本博客对这三种方式的定义、基本实现原理、Python代码实现和算法性能等方面进行了分析解读,简明易懂,还有图形过程解析和动图演示,生动直观,并且有多种实现方法,可以为读者提供多种思考路径。原创 2019-11-19 21:48:54 · 1205 阅读 · 2 评论 -
Python全栈(二)数据结构和算法之6.队列的实现和冒泡排序的实现
从队列的定义说起,讲解了队列和双端队列的实现,并进行了测试,还介绍了阻塞队列及其应用;提出了对排序算法进行分析的角度,并简单回顾了递归,其在算法的实现中起着重要的作用,最后对冒泡排序进行了细致分析和多种方法实现,并分析了稳定性和时间复杂度,简洁明了、适合初学者。原创 2019-11-17 21:39:37 · 1400 阅读 · 1 评论 -
Python全栈(一)基础之14.面向对象(3)
面向对象是Python的重要思想之一,本篇博客从多态说起,到方法的重写,super()的使用,再到多重继承的分析,再谈到面向对象的另一个重要特性——多态,最后分析了实例方法、实例属性、类方法、类属性,用了大量的实例和对比分析,加深对语法和概念的理解,适合初学者。原创 2019-11-16 22:21:20 · 1766 阅读 · 0 评论 -
Python全栈(二)数据结构和算法之5.双向链表的实现和栈的实现
双向链表是一种又一种链表,其is_empty() 判断链表是否为空、length() 返回链表的长度、travel() 遍历、add(item) 在头部添加一个节点、append(item) 在尾部添加一个节点、insert(pos, item) 在指定位置pos添加节点、remove(item) 删除一个节点、search(item) 查找节点等操作与单链表、循环链表不完全一致。栈是一种后进先出的线性表,其实现依赖于顺序表或链表,相对于链表的实现更简单。有示意图相结合,简明清晰,适合初学者。原创 2019-11-14 21:01:47 · 1150 阅读 · 2 评论 -
Python全栈(二)数据结构和算法之4.单向循环链表的实现
循环链表是一种特殊的单链表,尾结点指针是指向链表的头结点。对is_empty() 判断链表是否为空、length() 返回链表的长度、travel() 遍历、add(item) 在头部添加一个节点、append(item) 在尾部添加一个节点、insert(pos, item) 在指定位置pos添加节点、remove(item) 删除一个节点、search(item) 查找节点是否存在等方法进行了实现,详细具体、适合入门者。原创 2019-11-13 17:05:34 · 902 阅读 · 3 评论 -
Python全栈(二)数据结构和算法之3.链表的实现
单链表是顺序表之外的另一种顺序表,从节点的定义、单链表的初始化,再到单链表的各种操作,包括判断是否为空、遍历、获取链表长度、在头部和尾部添加元素、指定位置添加元素、查找节点是否存在和删除节点,有讲解,也有代码,最后将链表和顺序表进行了对比,并总结出了一些写代码的思考,简单说明了链表的一个应用——LRU缓存算法。原创 2019-11-10 20:31:15 · 1373 阅读 · 0 评论 -
Python全栈(一)基础之13.面向对象(2)
面向对象有特殊方法,即魔术方法,对象的创建流程、类的基本结构,并且要保证数据的安全性,解决措施即封装,是面向对象三大特性之一,通过getter和setter方法来访问和修改值,用下划线加属性,可以在一定程度上防止属性被修改,并且使用装饰器property可以像调用属性一样调用方法。原创 2019-11-09 21:41:19 · 1351 阅读 · 0 评论 -
Python全栈(二)数据结构和算法之2.顺序表
内存中不同类型的数据所占字节数不同,包括连续存储等方式。分为基本顺序表和元素外置顺序表,存储方式有所不同,下标从0开始是为了减少减法运算。顺序表包含表头信息和数据区,有一体式和分离式两种结构;两种结构替换方式不同;一体式扩充时需要重新开辟内存,分离式结构可以不改变表对象,即动态顺序表,扩充包括线性增长和成倍增长两种策略;元组采用一体式结构,列表采用分离式结构,允许任意加入元素。顺序表添加和删除元素不同方式复杂度不同。链表可以动态管理内存;不连续存储数据,而是存储位置;包括数据区和链接;变量实质是地址。原创 2019-11-08 19:24:36 · 1231 阅读 · 0 评论 -
Python全栈(二)数据结构和算法之1.算法和数据结构引入
算法具有一定的运行时间,枚举法效率很低;算法是独立存在的一种解决问题的方法和思想,有五大特性,算法的效率可以用执行时间衡量,但是受环境和数据本身的影响。T(n) = O(f(n))为大O时间复杂度表示法,表示代码执行时间随数据规模增长的变化趋势;时间复杂度分析有只关心循环执行次数最多的一段代码和加法原则两种方式,分为最优、平均、最坏等情况;常见时间复杂度包括常数、线性、平方、对数等。timeit模块用来测试代码的执行时间,用于对比算法的执行效率。数据存储方式会影响算法和效率,数据结构是算法处理的载体。原创 2019-11-06 22:23:40 · 1349 阅读 · 0 评论 -
Python全栈(一)基础之12.面向对象(1)
对象是内存中存储数据的一块区域;面向对象的结构包括id标识、type类型和value值;面向过程是将一件事分成一个个步骤、并用函数分别实现,面向对象即所有的操作都是通过对象来进行的,具备封装、继承和多态等特性和容易维护、方便复用等优点。类是对象的抽象,对象是类的实例,isinstance()可以用来检查一个对象是否是一个类的实例。创建对象时,可以对象中添加属性;对象包含了数据(属性)和行为(方法),类中定义的变量是公共属性,类中的函数称为方法。对象调用属性和方法时,会先在当前对象中寻找,再到类中寻找。原创 2019-11-03 22:00:08 · 1598 阅读 · 0 评论 -
Python全栈(一)基础之11.函数(3)
filter()函数从序列中根据传入的函数过滤出符合条件的元素,保存到新的序列中;匿名函数即lambda表达式,一般用于创建简单的函数,可以减少代码量;map()函数可以对可迭代对象中的所有元素做指定操作,并返回新的可迭代对象;用来对列表中的元素进行排序,可以指定key参数作为排序依据;sorted()函数返回一个新的列表。闭包将函数作为返回值返回,可以创建一些只有当前函数可以访问到的对象。扩展一个函数会定义新的函数,很麻烦;装饰器可以对任意函数进行扩展,并且可带参数,可以在扩展函数时不修改原有函数。原创 2019-11-03 17:26:54 · 1314 阅读 · 1 评论