
Python专栏
文章平均质量分 75
喵哥Python,为大家提供最简单,最详细,最全面的Python教程,欢迎大家订阅关注
少云清
纸上得来终觉浅,绝知此事要躬行
展开
-
3_python进阶—正则表达式
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。原创 2022-10-08 00:20:38 · 442 阅读 · 0 评论 -
2_python进阶—闭包、迭代器、生成器、装饰器
从中我们可以看到yield和return的效果是一样的。区别是:yield是分段来执行一个函数,return直接停止执行函数。python规定,如果你在内部函数中访问了外层函数中的变量。生成器的惰性机制:生成器只有在访问的时候才取值。不找他要,他是不会执行的。如果一个函数执行完毕,则这个函数中的变量以及局部命名空间中的内容都将会被销毁。综上,闭包的作用就是让一个变量能够常驻内存,供后面的程序使用。也就是说:使用闭包,可以保证外层函数中的变量在内存中常驻。迭代器把可迭代对象中的内容一个一个从头到尾点一遍。原创 2022-10-05 22:29:15 · 708 阅读 · 0 评论 -
1_python进阶—浅拷贝、深拷贝
两个1st完全不一样。内存地址和内容也不一样。发现实现了内存的拷贝。创建新对象,内存地址不同。原创 2022-10-03 21:48:10 · 203 阅读 · 0 评论 -
5_python高阶_协程—gevent实现多任务(重点)
在程序中延时用到的 time.sleep(),而不是gevent.sleep( ),在不修改程序的前提下,给程序打补丁。可以看到,3个greenlet是依次运行而不是交替运行。原创 2022-09-26 22:06:02 · 200 阅读 · 0 评论 -
4_python高阶_协程—greenlet实现多任务
为了更好使用协程来完成多任务,python中的greenlet模块对其封装,从而使得切换任务变的更加简单。原创 2022-09-25 15:09:22 · 321 阅读 · 0 评论 -
3_python高阶_协程—yield实现多任务
操作系统为了程序运行的高效性每个线程都有自己缓存Cache等等数据,操作系统还会帮你做这些数据的恢复操作。但是协程的切换只是单纯的操作CPU的上下文,所以一秒钟切换个上百万次系统都抗的住。协程是python中另外一种实现多任务的方式,只不过比线程更小占用更小执行单元(理解为需要的资源)。通俗的理解:在一个线程中的某个函数,可以在任何地方保存当前函数的一些临时变量等信息,然后切换到另外一个函数中执行,注意不是通过调用函数的方式做到的,并且切换的次数以及什么时候再切换到原来的函数都由开发者自己确定。原创 2022-09-24 19:57:59 · 148 阅读 · 0 评论 -
2_python高阶_协程—生成器
使用了yield关键字的函数不再是函数,而是生成器。(使用了yield的函数就是生成器)yield关键字有两点作用:保存当前运行状态(断点),然后暂停执行,即将生成器(函数)挂起将yield关键字后面表达式的值作为返回值返回,此时可以理解为起到了return的作用可以使用next()函数让生成器从断点处继续执行,即唤醒生成器(函数)原创 2022-09-23 20:36:31 · 119 阅读 · 0 评论 -
1_python高阶_协程—迭代器
iter(x) 中放可迭代的对象,返回值是一个迭代器next(x) 中放迭代器,之后调用迭代器中的next()函数往下走。原创 2022-09-22 21:59:05 · 139 阅读 · 0 评论 -
3_python高阶_进程—进程池Pool
初始化Pool时,可以指定一个最大进程数,当有新的请求提交到Pool中时,如果池还没有满,那么就会创建一个新的进程用来执行该请求;当需要创建的子进程数量不多时,可以直接利用multiprocessing中的Process动态成生多个进程,但如果是上百甚至上千个目标,手动的去创建进程的工作量巨大,此时就可以用到multiprocessing模块提供的Pool方法。原创 2022-09-19 20:04:48 · 500 阅读 · 0 评论 -
2_python高阶_进程—进程间通信-Queue
1)如果block使用默认值,且没有设置timeout(单位秒),消息列队如果为空,此时程序将被阻塞(停在读取状态),直到从消息列队读到消息为止,如果设置了timeout,则会等待timeout秒,若还没读取到任何消息,则抛出"Queue.Empty"异常;初始化Queue()对象时(例如:q=Queue()),若括号中没有指定最大可接收的消息数量,或数量为负值,那么就代表可接受的消息数量没有上限(直到内存的尽头);原创 2022-09-18 23:56:11 · 220 阅读 · 0 评论 -
1_python高阶_进程
multiprocessing模块就是跨平台版本的多进程模块,提供了一个Process类来代表一个进程对象,这个对象可以理解为是一个独立的进程,可以执行另外的事情。工作中,任务数往往大于cpu的核数,即一定有一些任务正在执行,而另外一些任务在等待cpu进行执行,因此导致了有了不同的状态。原创 2022-09-17 22:20:36 · 82 阅读 · 0 评论 -
0_进程、线程、协程对比分析
进程是系统进行资源分配和调度的一个独立单位。线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。进程是资源分配的单位线程是操作系统调度的单位进程切换需要的资源很最大,效率很低线程切换需要的资源一般,效率一般(当然了在不考虑GIL的情况下)协程切换任务资源很小,效率高。原创 2022-09-08 21:22:21 · 118 阅读 · 0 评论 -
5_python高阶_线程—死锁、银行家算法
对于a图的状态,按照安全序列的要求,我们选的第一个客户应满足该客户所需的贷款小于等于银行家当前所剩余的钱款,可以看出只有C2客户能被满足:C2客户需1个资金单位,小银行家手中的2个资金单位,于是银行家把1个资金单位借给C2客户,使之完成工作并归还所借的3个资金单位的钱,进入b图。例如:有三个客户C1,C2,C3,向银行家借款,该银行家的资金总额为10个资金单位,其中C1客户要借9个资金单位,C2客户要借3个资金单位,C3客户要借8个资金单位,总计20个资金单位。某一时刻的状态如图所示。原创 2022-09-08 21:16:34 · 129 阅读 · 0 评论 -
4_python高阶_线程—同步、互斥锁解决资源竞争
创建锁 mutex = threading . Lock() # 锁定 mutex . acquire() # 释放 mutex . release()如果这个锁之前是没有上锁的,那么acquire不会堵塞如果在调用acquire对这个锁上锁之前,它已经被 其他线程上了锁,那么此时acquire会堵塞,直到这个锁被解锁为止确保了某段关键代码只能由一个线程从头到尾完整地执行阻止了多线程并发执行,包含锁的某段代码实际上只能以单线程模式执行,效率就大大地下降了。原创 2022-09-07 19:20:12 · 129 阅读 · 0 评论 -
3_python高阶_线程—多线程-共享全局变量
假设两个线程t1和t2都要对全局变量g_num(默认是0)进行加1运算,t1和t2都各对g_num加10次,g_num的最终的结果应该为20。在一个函数中,对全局变量进行修改时侯,到底是否需要使用global进行说明,要看是否对全局变量的指向进行修改。原创 2022-09-06 21:12:36 · 2033 阅读 · 2 评论 -
2_python高阶_线程—threading模块
每个线程默认有一个名字,尽管上面的例子中没有指定线程对象的name,但是python会自动为线程指定一个名字。当线程的run()方法结束时该线程完成。无法控制线程调度程序,但可以通过别的方式来影响线程调度的方式。原创 2022-09-06 20:51:34 · 299 阅读 · 0 评论 -
1_python高阶_线程—多任务(并发、并行)
python高阶_线程—多任务(并发、并行)原创 2022-09-01 20:52:50 · 197 阅读 · 0 评论 -
文本文件的编码格式
Python 2.x 默认使用。Python 3.x 默认使用。Python 2.x 默认使用。Python 3.x 默认使用。这方式是官方推荐使用的!原创 2022-08-31 21:15:38 · 585 阅读 · 0 评论 -
关键字、函数和方法
关键字、函数和方法原创 2022-08-31 21:10:55 · 153 阅读 · 0 评论 -
eval 函数
eval 函数原创 2022-08-31 20:31:02 · 3455 阅读 · 0 评论 -
24_python基础—open 与 with open区别
Python中 open 与 with open区别原创 2024-09-06 23:04:09 · 489 阅读 · 0 评论 -
23_python基础—模块和包
文章目录一、模块1.1. 导入模块1.1.1 导入模块的方式1.1.2 导入方式详解1.1.2.1 import (导入全部功能)1.1.2.2 from..import.. (导入部分功能)1.1.2.3 from .. import *1.1.2.4 as定义别名1.2. 制作模块1.2.1 定义模块1.2.2 测试模块(`__name__`)1.2.3 调用模块1.2.4 注意事项1.3. 模块定位顺序1.4. `__all__`二、包(Package)2.1 概念2.2 制作包2.3 导入包2.原创 2021-09-15 20:23:16 · 230 阅读 · 0 评论 -
22_python基础—异常
文章目录一、异常的概念和作用二、异常的写法2.1 语法2.2 示例2.3 捕获指定异常2.3.1 语法2.3.2 示例2.3.3 捕获多个指定异常2.3.4 捕获异常描述信息2.3.5 捕获所有异常—Exception(重点)2.4 异常的else2.5 异常的finally三、异常的传递四、自定义异常(抛出 `raise` 异常)1)抛出异常2)应用场景五、总结一、异常的概念和作用程序在运行时,如果 Python 解释器 遇到 到一个错误,会停止程序的执行,并且提示一些错误信息,这就是 异常程序停原创 2021-09-14 11:24:27 · 287 阅读 · 0 评论 -
21_python基础—单例和 __ new __ 方法
文章目录目标一、单例设计模式1.1 设计模式1.2 单例设计模式的应用场景二、 `__new__` 方法2.1 `__new__`方法作用2.2 示例代码三、Python 中的单例3.1 只执行一次初始化工作目标单例设计模式__new__ 方法Python 中的单例一、单例设计模式1.1 设计模式设计模式设计模式 是 前人工作的总结和提炼,通常,被人们广泛流传的设计模式都是针对 某一特定问题 的成熟的解决方案使用 设计模式 是为了可重用代码、让代码更容易被他人理解、保证代码可靠性原创 2021-09-13 09:46:23 · 137 阅读 · 0 评论 -
20_python基础—面向对象-私有属性和私有方法
文章目录一、应用场景及定义方式二、伪私有属性和私有方法(科普)一、应用场景及定义方式应用场景在实际开发中,对象 的 某些属性或方法 可能只希望 在对象的内部被使用,而 不希望在外部被访问到私有属性 就是 对象 不希望公开的 属性私有方法 就是 对象 不希望公开的 方法定义方式在 定义属性或方法时,在 属性名或者方法名前 增加 两个下划线,定义的就是 私有 属性或方法class Women: def __init__(self, name): self.na原创 2021-09-12 11:28:05 · 149 阅读 · 0 评论 -
19_python基础—面向对象-类结构、类属性和类方法、静态方法
文章目录目标一. 面向对象三大特性二、类结构2.1 术语—实例2.2 类是一个特殊的对象三、类属性和实例属性3.1 类属性(两种访问方式)3.1.1 设置和访问类属性3.1.2 修改类属性(一种修改方式)3.2 实例属性四、类方法和静态方法4.1 类方法(两种访问方式)4.1.1 类方法语法4.1.2 类方法特点4.1.3 类方法使用场景4.2 静态方法(两种访问方式)4.2.1 静态方法语法4.2.2 静态方法特点4.2.3 静态方法使用场景五、总结目标面向对象三大特性类属性和实例属性类方法和静原创 2021-09-11 16:55:01 · 195 阅读 · 0 评论 -
18_python基础—面向对象-多态
文章目录一、 多态1.1 定义(重点)1.2 实现步骤1.3 体验多态一、 多态1.1 定义(重点)多态 :不同的 子类对象 调用相同的 父类方法,产生不同的执行结果多态 可以 增加代码的灵活度以 继承 和 重写父类方法 为前提是调用方法的技巧,不会影响到类的内部设计1.2 实现步骤多态指的是一类事物有多种形态,(一个抽象类有多个子类,因而多态的概念依赖于继承)。定义:多态是一种使用对象的方式,子类重写父类方法,不同子类对象调用相同父类方法,可以产生不同的执行结果好处:调用灵活,原创 2021-09-10 11:03:38 · 298 阅读 · 0 评论 -
17_python基础—面向对象-继承
文章目录一、继承的概念二、单继承2.1 概念和语法1)概念2)语法2.2 专业术语2.3 继承的传递性2.4 案例三、多继承3.1 概念和语法1)概念2)语法3.2 多继承的使用注意事项1)问题的提出2)Python 中的 MRO —— 方法搜索顺序(知道)3.3 案例四、子类重写父类同名方法和属性五、调用父类方法(两种方式)5.1 子类调用父类的同名方法和属性5.2 super()调用父类方法1)用法2)super3)案例六、多层继承七、父类 私有属性 和 私有方法7.1 定义私有属性和方法7.2 获取原创 2021-09-09 15:46:24 · 298 阅读 · 0 评论 -
16_python基础—面向对象基础
文章目录目标一、理解面向对象1.1 面向对象基本概念1.2 过程和函数(科普)1.3 面相过程 和 面相对象 基本概念1.3.1 面相过程 —— 怎么做?1.3.2 面向对象 —— 谁来做?二、类和对象2.1 类和对象的关系(重点)2.2 理解类和对象2.2.1 类1)类的设计(类名、属性、方法)2)大驼峰命名法3)类名的确定2.2.2 对象2.3 面向对象实现方法(重点)2.3.1 定义类2.3.2 创建对象(实例)2.3.3 self对象三、添加和获取对象属性(重点)3.1 类外面添加对象属性(不推荐)原创 2021-09-08 14:38:29 · 132 阅读 · 0 评论 -
15_python基础—文件操作
文章目录目标一、文件的概念1.1 文件的概念和作用1.2 文件的存储方式(二进制)1.3 文本文件和二进制文件二、文件的基本操作2.1 文件操作步骤2.2 操作文件的函数/方法2.2.1 打开文件的方式2.2.2 文件对象方法2.2.2.1 写–write2.2.2.2 读—按行读取2.2.2.3 seek()—用来移动文件指针2.2.2.4 关闭三、文件备份3.1 步骤3.2 代码实现3.3 思考3.4 复制文件四、文件和目录的管理操作4.1 文件操作4.2 目录(文件夹)操作4.3 应用案例五、总结原创 2021-09-07 11:19:24 · 282 阅读 · 0 评论 -
14_python基础—匿名函数lambda表达式
匿名函数lambda表达式文章目录一、lambda 表达式1.1 lambda的应用场景1.2 lambda语法快速入门1.3 示例:计算a + b1.3.1 函数实现1.3.2 lambda实现1.4 lambda的参数形式1.4.1 无参数1.4.2 一个参数1.4.3 默认参数(缺省参数)1.4.4 可变参数:*args1.4.5 可变参数:**kwargs1.5 lambda的应用1.5.1 带判断的lambda1.5.2 列表数据按字典key的值排序二、高阶函数2.1 体验高阶函数2.2 内置高原创 2021-09-04 19:25:43 · 406 阅读 · 0 评论 -
13_python基础—函数进阶(参数、返回值、递归)
文章目录目标一、函数参数和返回值的作用1.1 无参数,无返回值1.2 无参数,有返回值1.3 有参数,无返回值1.4 有参数,有返回值二、函数的返回值 进阶2.1 示例 —— 温度和湿度测量2.2 面试题 —— 交换两个数字解法 1 —— 使用其他变量解法 2 —— 不使用临时变量解法 3 —— Python 专有,利用元组三、函数的参数 进阶(重点)3.1. 不可变和可变的参数面试题 —— `+=`3.2 缺省参数3.2.1 指定函数的缺省参数(参数后使用赋值语句)3.2.2 缺省参数的注意事项1) 缺省原创 2021-09-02 14:51:35 · 375 阅读 · 0 评论 -
12_python基础—函数基础(参数、返回值、调用)
文章目录目标一、了解函数二、函数基本使用2.1 函数的定义2.2 函数调用2.3 第一个函数演练思考2.4 PyCharm 的调试工具2.5 函数的文档注释三、函数的参数3.1 函数参数的使用3.2 参数的作用3.3 形参和实参四、函数的返回值五、函数的嵌套调用函数嵌套的演练 —— 打印分隔线六、使用模块中的函数6.1 语法6.2 模块名也是一个标识符6.3 Pyc 文件(了解)目标函数的快速体验函数的基本使用函数的参数函数的返回值函数的嵌套调用在模块中定义函数一、了解函数所谓函数,原创 2021-08-31 17:20:10 · 302 阅读 · 0 评论 -
11_python基础—函数(引用、全局、局部变量)
文章目录目标一、 变量的引用1.1 引用的概念1.2 `变量引用` 的示例1.3 函数的参数和返回值的传递二、局部变量和全局变量2.1 局部变量2.1.1 局部变量的作用2.1.2 局部变量的生命周期2.2 全局变量1) 函数不能直接修改 `全局变量的引用`2) 在函数内部修改全局变量的值(global关键字声明)3) 全局变量定义的位置4) 全局变量命名的建议目标变量的引用可变和不可变类型局部变量和全局变量一、 变量的引用变量 和 数据 都是保存在 内存 中的在 Python 中 函原创 2021-08-30 08:55:24 · 1620 阅读 · 0 评论 -
10_python基础—数据序列(推导式)
文章目录目标一、列表推导式1.1 快速体验1.2 带if的列表推导式1.3 多个for循环实现列表推导式二、字典推导式2.1 快速体验三、集合推导式四、总结目标列表推导式字典推导式集合推导式一、列表推导式作用:用一个表达式创建一个有规律的列表或控制一个有规律列表。列表推导式又叫列表生成式。1.1 快速体验需求:创建一个0-10的列表。while循环实现# 1. 准备一个空列表list1 = []# 2. 书写循环,依次追加数字到空列表list1中i = 0while原创 2021-08-29 08:45:09 · 237 阅读 · 0 评论 -
9_python基础—数据序列(公共方法)
文章目录一、公共方法(Python 内置函数)1.1 range()1.2 enumerate()二、切片(使用索引)三、运算符3.1 成员运算符四、容器类型转换(列表、元组、集合)4.1 list()4.2 tuple()4.3 set()五、完整的 for 循环语法5.1 应用场景一、公共方法(Python 内置函数)Python 包含了以下内置函数:函数描述备注len(item)计算容器中元素个数字符串、列表、元组、字典集合、del(item)删除变量del原创 2021-08-27 11:12:00 · 135 阅读 · 0 评论 -
8_python基础—高级变量类型(字符串、列表、元组、字典、集合)
文章目录一、字符串 str,有序序列(支持下标)不可变1.1 字符串的定义1.2 字符串的常用操作1) 判断类型 - 92) 查找和替换 - 73) 大小写转换 - 54) 文本对齐 - 35) 去除空白字符 - 36) 拆分和连接 - 51.3 字符串的切片索引的顺序和倒序二、 列表 list( ),有序(支持下标)可变序列2.1 列表的定义2.2 列表常用操作2.2.1 del 关键字(科普)2.2.2 关键字、函数和方法(科普)2.3 循环遍历2.4 列表嵌套2.5 **应用场景**三、元组 tupl原创 2021-08-26 13:00:57 · 630 阅读 · 0 评论 -
7_python基础—while循环应用1-100累加和
文章目录一、1-100累加和二、1-100偶数累加和(法一)三、1-100偶数累加和(法二)一、1-100累加和# 需求:1-100数字累加和 -- 1 + 2 + 3 + 4...+ 100 = 结果,打印结果"""1. 准备做加法运算的数据 1- 100 增量为12. 准备变量保存将来运算的结果3. 循环做加法运算4. 打印结果5. 验证结果正确性"""# 准备数据i = 1# 结果变量result = 0# 循环while i <= 100: # 加法原创 2021-08-20 16:36:56 · 18702 阅读 · 2 评论 -
6_python基础—循环
文章目录一、程序的三大流程二、`while` 循环基本使用2.1 `while` 语句基本语法第一个 while 循环死循环2.2 Python 中的计数方法2.3 循环计算需求进阶三、break 和 continue3.1 break3.2 continue四、`while` 循环嵌套4.1 循环嵌套4.2 循环嵌套演练 —— 九九乘法表第 1 步:用嵌套打印小星星第 2 步:使用循环嵌套打印小星星第 3 步: 九九乘法表五、for循环5.1 语法5.2 示例5.2.1 break5.2.2 contin原创 2021-08-18 21:42:05 · 202 阅读 · 0 评论 -
5_python基础—条件语句(三目运算符)
三目运算符三目运算符也叫三元运算符或三元表达式。语法如下:条件成立执行的表达式 if 条件 else 条件不成立执行的表达式a = 1b = 2c = a if a > b else bprint(c) # 2# 需求: 有两个变量,比较大小 如果变量1 大于 变量2 执行 变量 1 - 变量2; 否则 变量2 - 变量1aa = 10bb = 6cc = aa - bb if aa > bb else bb - aaprint(cc) # 4...原创 2021-08-16 06:02:41 · 246 阅读 · 0 评论