[TOC] <br/><br/><br/> # <b style="color:#4F4F4F;">简介说明</b> 结构脑图:[地址](https://naotu.baidu.com/file/dc0ce8772b61cf8cbed95631b1e4ab33?token=45c30b33dcb7443c) 原文链接: - [Python](https://docs.python.org/zh-cn/3.9/py-modindex.html) ``` 版本:Python 作用:跨平台的计算机程序设计语言 ``` <br/> # <b style="color:#4F4F4F;">基本语法</b> <br/> # <span style="color:#619BE4">global</span> ***** 访问全局变量 <br/> # <span style="color:#619BE4">nonlocal</span> ***** 访问上层函数变量,形成闭包 <br/> # <span style="color:#619BE4">assert</span> ***** 断言 <br/> # <span style="color:#619BE4">raise</span> ***** 抛出一个异常对象 <br/> # <span style="color:#619BE4">del</span> ***** 销毁变量,可以直接改变数组大小 <br/> # <span style="color:#619BE4">yield</span> ***** 将python函数变为生成器对象,当使用next方法时yield的值被返回,并往下继续执行 <br/> ### 示例内容 <span style="color:red;">1. 举例说明</span> ``` def gen(): time.sleep(3) yield time.time() print("go") return None def sleep_1(t): print("sleep " + str(t)) def main(): for task in gen(): sleep_1(task) print(next(gen())) ``` <br/> # <span style="color:#619BE4">yield from</span> ***** 跟一个可迭代对象,并将它一个一个yield出来,并且做了一系列异常处理,最后返回可迭代对象的结果集合 <br/> # <span style="color:#619BE4">is</span> ***** 判断对象是否是指向同一个地址的相同对象,==比较的是内容是否相同 <br/> # <span style="color:#619BE4">__name</span> ***** 设置私有属性,如果外部强行调用需要 `_【类名】【属性名】` 方式调用 <br/> # <span style="color:#619BE4">f'字符串'</span> ***** python3.6新特性,可以直接嵌套变量到字符串 <br/> # <span style="color:#619BE4">b'字符串'</span> ***** 将字符串unicode编码成bytes类型,默认编码算法utf8 <br/> # <span style="color:#619BE4">"" ""</span> ***** 传参数时多个字符串空格分开会被自动合并,如list("2" "3"),传入的是"23" <br/> # <span style="color:#619BE4">:=</span> ***** 海象运算符 <br/> # <span style="color:#619BE4">/ *</span> ***** 参数指定符,指定传入参数只能是顺序参数,或关键字参数 <br/> # <span style="color:#619BE4">[::]</span> ***** 切片,[开始:结束:步长],如果步长设置-1可以实现倒序 <br/> # <span style="color:#619BE4">\>\></span> ***** 右移位运算符,即当前数值除以2的n次方取整 <br/> # <span style="color:#619BE4">\<\<</span> ***** 左移位运算符,即当前数值乘以2的n次方 <br/> # <span style="color:#619BE4">^</span> ***** 异或运算符 <br/> # <span style="color:#619BE4">~</span> ***** 取反运算符,计算机存储的是补码,取出时候会对补码进行还原 <br/> # <span style="color:#619BE4">//</span> ***** 整除运算符 <br/> # <b style="color:#4F4F4F;">特性内容</b> <br/> # <span style="color:#619BE4">Garbage collection(GC)</span> ***** 垃圾回收 <br/> ### 示例内容 <span style="color:red;">1. 引用计数</span> ``` 当一个对象有新的引用时,它的ob_refcnt就会增加, 当引用它的对象被删除,它的ob_refcnt就会减少。 当引用计数为0时,该对象生命就结束了。 引用计数机制的优点: 1. 简单 2. 实时性:一旦没有引用,内存就直接释放了。 不用像其他机制等到特定时机。 实时性还带来一个好处:处理回收内存的时间分摊到了平时。 引用计数机制的缺点: 1. 维护引用计数消耗资源 2. 循环引用 list1与list2相互引用,如果不存在其他对象对它们的引用, list1与list2的引用计数也仍然为1,所占用的内存永远无法被回收,这将是致命的。 ``` <span style="color:red;">2. 标记清除</span> ``` 1. 首先标记对象(垃圾检测),然后清除垃圾(垃圾回收) 2. 首先初始所有对象标记为白色,并确定根节点对象(这些对象是不会被删除), 标记它们为黑色(表示对象有效)。 3. 将有效对象引用的对象标记为灰色(表示对象可达,但它们所引用的对象还没检查), 检查完灰色对象引用的对象后,将灰色标记为黑色。 4. 重复直到不存在灰色节点为止。最后白色结点都是需要清除的对象。 ``` <span style="color:red;">3. 分代回收</span> ``` 1. 分代技术是一种典型的以空间换时间的技术,这也正是java里的关键技术。 这种思想简单点说就是:对象存在时间越长,越可能不是垃圾,应该越少去收集。 2. 这样的思想,可以减少标记-清除机制所带来的额外操作。 分代就是将回收对象分成数个代,每个代就是一个链表(集合), 代进行标记-清除的时间与代内对象 存活时间成正比例关系。 3. 从上面代码可以看出python里一共有三代, 每个代的threshold值表示该代最多容纳对象的个数。 默认情况下,当0代超过700,或1,2代超过10,垃圾回收机制将触发。 4. 0代触发将清理所有三代,1代触发会清理1,2代,2代触发后只会清理自己。 ``` <br/> # <span style="color:#619BE4">GIL(全局解释器锁)</span> ***** 全局解释器锁 <br/> ### 示例内容 <span style="color:red">1. 举例说明</span> ``` 内置的C实现的模块能保证不发生切换(解释器所有权切换只能发生在字节码之间) Python中list的实现那一连串的过程都可以认为是原子的,也就是线程安全的 ``` ![GIL](https://img.kancloud.cn/3c/dd/3cdddc0145704905f454a0962d8b6b5e_1168x656.png) <br/> # <span style="color:#619BE4">进度条</span> ***** 控制台进度条 <br/> ### 示例内容 <span style="color:red">1. 举例说明</span> ``` import time as t scale = 50 print("执行开始".center(scale // 2, "-")) start = t.perf_counter() for i in range(scale + 1): a = '*' * i b = '.' * (scale - i) c = (i / scale) * 100 dur = t.perf_counter() - start print("\r{:^3.0f}%[{}->{}]{:.2f}s".format(c, a, b, dur), end="") t.sleep(0.1) ``` <br/> # <span style="color:#619BE4">输出颜色</span> ***** 控制台输出颜色 <br/> ### 示例内容 <span style="color:red">1. 举例说明</span> ``` #格式:   设置颜色开始 :\033[显示方式;前景色;背景色m #说明: 前景色 背景色 颜色 --------------------------------------- 40 黑色 41 红色 42 绿色 43 黃色 44 蓝色 45 紫红色 46 青蓝色 47 白色 显示方式 意义 ------------------------- 终端默认设置 高亮显示 使用下划线 闪烁 反白显示 不可见 #例子: \033[1;31;40m <!--1-高亮显示 31-前景色红色 40-背景色黑色--> \033[0m <!--采用终端默认设置,即取消颜色设置--> ``` <span style="color:red">2. 移动位置</span> ``` \033[nA \\可以将光标上移n行 \033[nB \\可以将光标下移n行 ``` <br/> # <span style="color:#619BE4">禁用控制台</span> ***** 使用pythonw执行python脚本 <br/>