python
文章平均质量分 86
入狱计划进度50%
不去想 他们拥有美丽的太阳
我看见 每天的夕阳也会有变化
展开
-
043 视图,触发器,事务,存储过程,内置函数,流程控制,索引理论
目录:一 视图二 触发器三 事务(这里需要掌握,其他为了解)四 存储过程五 内置函数六 流程控制七 索引理论(日后再去扩展)一 视图什么是视图视图就是通过查询得到一张虚拟表,然后保存下来,下次可以直接使用为什么要用如果要频繁的操作一张虚拟表(拼表组成的),你就可以制作成视图,后续直接操作如何操作# 固定语法create view 视图名 as 虚拟表的查询sql语句# 具体操作create view teacher2course asselect * from teacher IN原创 2020-12-18 18:11:26 · 181 阅读 · 0 评论 -
042 navicat和pymysql
目录:一 navicat可视化界面操作数据库1.1 Navicat软件下载与安装二 数据库查询练习(多表操作)三 python 如何操作MySQL(pymysql模块)四 sql注入五 pymysql模块的增删改查一 navicat可视化界面操作数据库1.1 Navicat软件下载与安装链接:????navicat下载安装与激活教程注意点:下载Navicat之后不要打开,要不然激活的时候会报错,如以打开请卸载后并删除安装时产生的数据再重装。首先要打开注册机"""一开始学习python的时候 下原创 2020-12-18 14:37:58 · 289 阅读 · 0 评论 -
041 where,group by,having,distinct,order by,limit以及正则的终极奥义
前期准备的表# 创建表create table emp( id int not null unique auto_increment, name varchar(20) not null, sex enum('male','female') not null default 'male', age int(3) unsigned not null default 28, hire_date date not null, post varchar(50), post_comment varc原创 2020-12-17 10:44:35 · 456 阅读 · 0 评论 -
040 约束条件与表相关
目录:一 约束条件二 表与表之间建立关系(约束)三 修改表的完整语法大全四 复制表五 作业布置(如何判断表关系及如何建立表关系)一 约束条件"""zerofillunsignednot null见上一章内容"""default默认值# 补充知识点 插入数据的时候可以指定字段create table t1( id int, name char(16));insert into t1(name,id) values('jaja',1);create table t2( id原创 2020-12-16 08:43:03 · 108 阅读 · 0 评论 -
039 存储引擎,严格模式,mysql的基本数据类型
目录:一 存储引擎二 严格模式三 mysql基本数据类型3.1 整型3.2 浮点型3.3 字符类型3.4 时间类型3.5 枚举与集合类型一 存储引擎卧槽,引擎,一听高大上,那是吗?存储引擎日常生活中文件格式有很多种,并且针对不同的文件格式会有对应不同存储方式和处理机制(txt,pdf,word,mp4…)针对不同的数据应该有对应的不同的处理机制来存储存储引擎就是不同的处理机制MySQL主要存储引擎:1 innodb是MySQL5.5版本及之后默认的存储引擎存储数据更加的安全2 myis原创 2020-12-16 08:10:16 · 119 阅读 · 0 评论 -
038 库,表,数据的增删改查
“”“基本sql语句”""我们所有靠薪水吃饭的人的卑微,辛辛苦苦一个月,只是为了一条sql语句(将自己的账户的钱的那个数据修改一下)丨丨丨丨丨PS:大部分程序的业务逻辑其实就是增删改查...原创 2020-12-15 08:27:57 · 124 阅读 · 0 评论 -
037 数据库简介与mysql的安装
目录:一 数据库二 mysql安装一 数据库数据库本质其实就是一款基于网络通信的应用程序关系型数据库:MySQL , oracle , db2 , access , sql server非关系型数据库:redis , mongodb , memcache关系型:1 数据之间彼此有关系或者约束2 存储数据的形式通常是以表格存储,每个字段还能有存储类型的限制,比如姓名那一栏只能存字符串型非关系型:存储数据通常都是以k, v 键值对形式重要概念库 ————》 文件夹表 —原创 2020-12-15 08:10:03 · 80 阅读 · 0 评论 -
036 python IO多路复用,异步IO
目录:一 IO多路复用二 异步IO一 IO多路复用"""""""""IO多路复用当监管的对象只有一个的时候,其实io多路复用连阻塞io都比不上,但是io多路复用可以一次性监管很多个对象监管机制是操作系统本身就有的, 如果你想要用该监管机制(select),需要你导入对应的select模块监管机制其实有很多select机制 windows linux都有poll机制 只在linux有 poll和select都可以监管多个对象,但是poll监管的数量更多 上述两原创 2020-12-14 08:17:48 · 171 阅读 · 0 评论 -
035 python线程q,进程、线程池,协程
目录:一 线程q二 进程池与线程池三 协程一 线程q"""同一个进程下多个线程数据是共享的"""# 1 队列q 先进先出# import queue# q = queue.Queue(5)# q.put("111")# q.get()# q.empty()# q.full()# q.get_nowait()# q.get(timeout=3)# 2 后进先出qimport queueq = queue.LifoQueue(5)q.put("a")q.put("b")q原创 2020-12-14 08:17:34 · 76 阅读 · 0 评论 -
034 python死锁,递归锁,信号量,Event事件
目录:一 死锁二 递归锁三 信号量四 Event事件一 死锁"""了解当你知道锁的使用抢锁时必须要释放锁,也容易产生死锁现象单例模式-----?"""# from threading import Thread, Lock# import time# # 类只要多次加括号,产生的肯定是不同的对象# # 如果想要实现多次加括号产生相同的对象,就需要用到 单例模式# mutexA = Lock()# mutexB = Lock()### class MyThread(Thread原创 2020-12-14 08:17:16 · 83 阅读 · 0 评论 -
033 python多进程与多线程
目录:一 多进程二 多线程一 多进程"""python并发编程之多进程""""""串行:并行:指两个或两个以上事件或活动在同一时刻发生。在多道程序环境下,并行性使多个程序同一时刻可在不同CPU上同时执行。并发:并发当有多个线程在操作时,如果系统只有一个CPU,则它根本不可能真正同时进行一个以上的线程,它只能把CPU运行时间划分成若干个时间段, 再将时间 段分配给各个线程执行,在一个时间段的线程代码运行时,其它线程处于挂起状。 简而言之,看起来像同时运行的描述原创 2020-12-14 08:16:34 · 105 阅读 · 0 评论 -
032 python并发编程之背景知识
"""python并发编程之背景知识""""""进程: 即正在执行的一个过程,进程是对正在运行程序的一个抽象什么是操作系统: 操作系统就是一个协调、管理和控制计算机硬件资源和软件资源的控制程序。为什么要有操作系统: 程序员无法把所有的硬件操作细节都了解到,管理这些硬件并且加以优化使用是非常繁琐的工作,这个繁琐的工作就是操作系统来干的, 有了他,程序员就从这些繁琐的工作中解脱了出来,只需要考虑自己的应用软件的编写就可以了,应用软件直接使用操作系统提供的功能来间接使用原创 2020-12-14 08:16:16 · 105 阅读 · 1 评论 -
031 python之网络编程
目录:一 客户端、服务端架构二 OSI七层三 socket层四 socket是什么五 套接字发展史及分类六 套接字工作流程七 基于TCP的套接字八 基于UDP的套接字九 粘包现象十 什么是粘包十一 解决粘包的low比处理方法十二 解决粘包的终极奥义十三 认证客户端的链接合法性十四 socketserver实现并发十五 作业一 客户端、服务端架构1.硬件C/S架构(打印机)2.软件C/S架构互联网中处处是C/S架构如黄色网站是服务端,你的浏览器是客户端(B/S架构也是C/S架构的一种)腾讯作为服务原创 2020-12-14 08:16:00 · 231 阅读 · 0 评论 -
030 异常处理
目录:一 什么是异常二 异常处理三 何时使用异常处理一 什么是异常异常是程序发生错误的信号。程序一旦出现错误,便会产生一个异常,若程序中没有处理它,就会抛出该异常,程序的运行也随之终止。而错误分成两种,一种是语法上的错误SyntaxError,这种错误应该在程序运行前就修改正确>>> if File "<stdin>", line 1 if ^SyntaxError: invalid syntax另一类就是逻辑错误,常见的逻辑错误 如#原创 2020-12-14 08:15:46 · 90 阅读 · 0 评论 -
029 元类
先看个图,你也许会直接叉掉这个页面好了这章到此结束!目录:原创 2020-12-14 08:15:32 · 90 阅读 · 0 评论 -
028 反射、内置方法
目录:一 反射二 内置方法一 反射python是动态语言,而反射(reflection)机制被视为动态语言的关键。反射机制指的是在程序的运行状态中对于任意一个类,都可以知道这个类的所有属性和方法;对于任意一个对象,都能够调用他的任意方法和属性。这种动态获取程序信息以及动态调用对象的功能称为反射机制。在python中实现反射非常简单,在程序运行过程中,如果我们获取一个不知道存有何种属性的对象,若想操作其内部属性,可以先通过内置函数dir来获取任意一个类或者对象的属性列表,列表中全为字符串格式&原创 2020-12-14 08:14:52 · 65 阅读 · 0 评论 -
027 绑定方法classmethod与非绑定方法staticmethod
""" 类中定义的函数分为两大类:绑定方法和非绑定方法 其中绑定方法又分为绑定到对象的对象方法和绑定到类的类方法。 在类中正常定义的函数默认是绑定到对象的,而为某个函数加上装饰器@classmethod后,该函数就绑定到了类。""""""绑定方法:将调用者本身当作第一个参数自动传入 绑定给对象的方法:调用者是对象,自动传入的是对象 绑定给类的方法:调用者是类,自动传入的是类 。 应用场景:提供一种新的造对象的方法。配置是来自配置文件或者其他地方非绑定方原创 2020-12-14 08:14:30 · 75 阅读 · 0 评论 -
026 多态性与鸭子类型,嘎嘎嘎
多态与多态性多态指的是一类事物有多种形态,比如动物有多种形态:猫、狗、猪class Animal: #同一类事物:动物 def talk(self): passclass Cat(Animal): #动物的形态之一:猫 def talk(self): print('喵喵喵')class Dog(Animal): #动物的形态之二:狗 def talk(self): print('汪汪汪')class Pig(Animal):原创 2020-12-12 13:22:37 · 102 阅读 · 0 评论 -
025 python继承与派生
目录:一 继承介绍二 继承与抽象三 属性查找四 继承的实现原理4.1 菱形问题4.2 继承原理4.3 深度优先与广度优先4.4 python Mixins机制五 派生与方法重用六 组合一 继承介绍继承是一种创建新类的方式,在Python中,新建的类可以继承一个或多个父类,新建的类可称为子类或派生类,父类又可称为基类或超类class ParentClass1: #定义父类 passclass ParentClass2: #定义父类 passclass SubClass1(Pare原创 2020-12-12 12:38:04 · 148 阅读 · 0 评论 -
024 封装
目录:一 引入二 隐藏属性三 开放接口3.1 隐藏数据接口3.2 隐藏函数接口四 property一 引入面向对象编程有三大特性:封装、继承、多态,其中最重要的一个特性就是封装。封装指的就是把数据与功能都整合到一起,听起来是不是很熟悉,没错,我们之前所说的”整合“二字其实就是封装的通俗说法。除此之外,针对封装到对象或者类中的属性,我们还可以严格控制对它们的访问,分两步实现:隐藏与开放接口 二 隐藏属性Python的Class机制采用双下划线开头的方式将属性隐藏起来(设置成私原创 2020-12-12 12:17:52 · 97 阅读 · 0 评论 -
023 python的面向对象编程
对象?对象?所有的漂亮女生都是我对象 哈哈哈哈,很喜欢egon说过的一句话,“你问别个什么是面向对象,他告诉你什么一切皆对象啊,万物皆对象啊,那这个逼TM的就不懂面向对象,好吧,我承认我有点激动,可,,,那又怎么滴。。。”目录:一 对象的概念二 类与对象三 面向对象编程3.1 类的定义与实例化3.2 属性访问3.2.1 类属性与对象属性3.2.2 属性查找顺序与绑定方法3.2.3 小结一 对象的概念”面向对象“的核心是“对象”二字,而对象的精...原创 2020-12-12 11:17:48 · 91 阅读 · 0 评论 -
022 软件开发目录规范
标题有了这个规范你才能从杂牌军变成正规军为了提高程序的可读性与可维护性,我们应该为软件设计良好的目录结构,这与规范的编码风格同等重要。软件的目录规范并无硬性标准,只要清晰可读即可,假设你的软件名为foo,笔者推荐目录结构如下Foo/|-- core/| |-- core.py||-- api/| |-- api.py||-- db/| |-- db_handle.py||-- lib/| |-- common.py||-- conf/| |-- setti原创 2020-12-12 10:51:44 · 79 阅读 · 0 评论 -
021 包
目录:一 包的介绍二 包的使用2.1 导入包与__init__.py2.2 绝对导入与相对导入2.3 from 包 import *一 包的介绍随着模块数目的增多,把所有模块不加区分地放到一起也是极不合理的,于是Python为我们提供了一种把模块组织到一起的方法,即创建一个包。包就是一个含有__init__.py文件的文件夹,文件夹内可以组织子模块或子包,例如pool/ #顶级包├── __init__.py ├── futures #子包原创 2020-12-12 10:47:30 · 110 阅读 · 0 评论 -
020 import 模块
目录:一 模块介绍二 模块的使用2.1 import语句2.2 from-import语句2.3 其他导入语法(as)2.4 循环导入问题2.5 搜索模块的路径与优先级2.6 区分py文件的两种用途2.7 编写一个规范的模块一 模块介绍在Python中,一个py文件就是一个模块,文件名为xxx.py模块名则是xxx,导入模块可以引用模块中已经写好的功能。如果把开发程序比喻成制造一台电脑,编写模块就像是在制造电脑的零部件,准备好零部件后,剩下的工作就是按照逻辑把它们组装到一起。将程序模块化会使得程序的组原创 2020-12-12 10:39:24 · 130 阅读 · 1 评论 -
019 面向过程与匿名函数 map reduce filter
目录:一 编程范式二 面向过程三 函数式3.1 匿名函数与lambda3.2 map reduce filter一 编程范式 很多初学者在了解了一门编程语言的基本语法和使用之后,面对一个’开发需求‘时仍然会觉得无从下手、没有思路/套路,本节主题“编程范式”正是为了解决该问题,那到底什么是编程范式呢?编程范式指的就是编程的套路,打个比方,如果把编程的过程比喻为练习武功,那编程范式指的就是武林中的各种流派,而在编程的世界里常见的流派有:面向过程、函数式、面向对象等,本节我们主要介绍前两者。 在正式介原创 2020-12-12 09:53:00 · 100 阅读 · 0 评论 -
018 函数递归
目录:一 函数递归调用介绍二 回溯与递推一 函数递归调用介绍函数不仅可以嵌套定义,还可以嵌套调用,即在调用一个函数的过程中,函数内部又调用另一个函数,而函数的递归调用指的是在调用一个函数的过程中又直接或间接地调用该函数本身例如在调用f1的过程中,又调用f1,这就是直接调用函数f1本身def f1(): print('from f1') f1()f1()在调用f1的过程中,又调用f2,而在调用f2的过程中又调用f1,这就是间接调用函数f1本身def f1(): pri原创 2020-12-12 09:44:16 · 77 阅读 · 0 评论 -
017 生成器与yield的步步分析,看不懂,你吃翔
目录:一 生成器与yield二 yield表达式应用三 三元表达式,列表生成式,生成器表达式3.1 三元表达式3.2 列表生成式3.3 生成器表达式一 生成器与yield若函数体包含yield关键字,再调用函数的时候,并不会执行函数体代码,得到的返回值即 生成器表达式def test(start, stop, step=1): print("start...") while start < stop: yield start start += st原创 2020-12-12 09:32:25 · 146 阅读 · 2 评论 -
016 迭代器
目录:一 迭代器介绍1.1 可迭代对象1.2 迭代器对象二 for循环原理三 迭代器的优缺点3.1 优点3.2 缺点一 迭代器介绍迭代器即用来迭代取值的工具,而迭代是重复反馈过程的活动,其目的通常是为了逼近所需的目标或结果,每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值,单纯的循环重复并不是迭代这只是循环while True: msg = input('>>: ').strip() print(msg)下述while循环才是一个迭代原创 2020-12-11 17:49:25 · 81 阅读 · 0 评论 -
015 python装饰器,感谢egon,莫慌,一个例子读懂装饰器,看不懂你打死我
目录:一 装饰器介绍二 无参装饰器三 有参装饰器一 装饰器介绍什么是装饰器器指的是工具,可以定义成函数装饰指的是为其他事物添加额外的东西合在一起的解释:装饰器指的是定义一个函数,该函数是用来为其他函数添加额外的功能为何要用装饰器觉得很牛逼,让别人看不懂原则开放封闭原则开放:指的是对拓展功能是开放的封闭:指的是对修改源代码是封闭的装饰器就是在不修改被装饰器装饰的对象源代码和调用方式的前提下,给被装饰对象添加新的功能 二 无参装饰器# 需求:为函数添加原创 2020-12-11 16:46:14 · 127 阅读 · 0 评论 -
014 函数对象和闭包
目录:一 函数对象1.1 函数可以被引用1.2 函数可以作为容器类型的元素1.3 函数可以作为参数传入另一个函数1.4 函数的返回值可以是一个函数二 闭包函数2.1 闭与包2.2 闭包的用途一 函数对象函数对象指的是函数可以被当做’数据’来处理,具体可以分为四个方面的使用1.1 函数可以被引用>>> def add(x,y):... return x+y... >>> func=add>>> func(1,2)31.2 函数原创 2020-12-11 16:16:48 · 95 阅读 · 0 评论 -
013 名称空间与作用域
目录:一 名称空间1.1 内建名称空间1.2 全局名称空间1.3 局部名称空间二 作用域2.1 全局作用域和局部作用域2.2 作用域和名字查找的优先级一 名称空间名称空间即存放名字与对象映射/绑定关系的地方。对于x=3,Python会申请内存空间存放对象3,然后将名字x与3的绑定关系存放于名称空间中,del x表示清除该绑定关系。1.1 内建名称空间伴随python解释器的启动/关闭而产生/回收,因而是第一个被加载的名称空间,用来存放一些内置的名字,比如内建函数名>>> max原创 2020-12-11 15:25:47 · 71 阅读 · 0 评论 -
012 函数的参数
目录:一 形参与实参介绍二 形参与实参的具体使用2.1 位置参数2.2 关键字参数2.3 默认参数2.4 可变长度的参数(*与**的用法)2.4.1 可变长度的位置参数2.4.2 可变长度的关键字参数2.5 命名关键字参数2.6 组合使用一 形参与实参介绍函数的参数分为形式参数和实际参数,简称形参和实参:形参即在定义函数时,括号内声明的参数。形参本质就是一个变量名,用来接收外部传来的值。实参即在调用函数时,括号内传入的值,值可以是常量、变量、表达式或三者的组合:#1:实参是常量res=my_mi原创 2020-12-11 15:13:57 · 120 阅读 · 0 评论 -
011函数的基本使用
目录:一 引入二 定义函数三 调用函数与函数返回值一 引入 基于前一部分的学习,我们已经能开发一些功能简单的小程序了,但随着程序功能的增多,代码量随之增大,此时仍不加区分地把所有功能的实现代码放到一起,将会使得程序的组织结构不清晰,可读性变差,且程序中需要频繁使用同一功能时,只能重复编写该功能的实现代码,日积月累,程序将变得冗长,并且当某一功能需要修改时,又不得不找出所有定义及使用这段功能的地方修改之,管理维护的难度极大,好吧,装了半天逼,到底该如何解决提出的这些问题呢?我们完全可以从现实生活中找到原创 2020-12-11 14:50:50 · 88 阅读 · 0 评论 -
010 python文件处理
颠覆你的认知:首先要明白,硬盘上的数据的修改,压根就没有在中间插入数据的操作,修改的实质是重新覆盖目录:一 引入二 文件操作的基本流程2.1 基本流程2.2 资源回收与with上下文管理2.3 指定操作文本文件的字符编码三 文件的操作模式3.1 控制文件读写操作的模式3.1.1 案例一:r 模式的使用3.1.2 案例二:w 模式的使用3.1.3 案例三:a 模式的使用3.1.4 案例四:+ 模式的使用(了解)3.2 控制文件读写内容的模式3.2.1 案例一:t 模式的使用3.2.2 案例二: b 模式的原创 2020-12-11 14:29:17 · 77 阅读 · 0 评论 -
009 字符编码
目录:一 引入二 知识储备2.1 三大核心部件2.2 文本编辑器读取文件内容的流程2.3 python解释器执行文件的流程2.4 总结三 字符编码介绍3.1 什么是字符编码3.2 字符编码的发展史(了解)3.2.1 阶段一:一家独大3.2.2 阶段二:诸侯割据3.2.3 阶段三: 分久必合3.3 编码与解码3.4 utf-8的由来四 字符编码的应用4.1 文本编辑器notepad++存取文本文件4.2 python解释器执行文件的前两个阶段4.3 python解释器执行文件的第三个阶段4.4 字符串enco原创 2020-12-11 12:10:13 · 243 阅读 · 0 评论 -
008python语法 整型,浮点型,字符串,列表,元组,字典,集合
目录:一 引子二 数字类型int,float2.1 定义2.2 类型转换2.3 使用三 字符串3.1 定义3.2 类型转换3.3 使用3.3.1 优先掌握的操作3.3.2 需要掌握的操作3.3.3 了解操作四 列表定义类型转换使用优先掌握的操作了解操作五 元组作用定义方法类型转换使用六 字典定义类型转换使用优先掌握的操作了解操作七 集合作用定义类型转换使用关系运算去重其他操作练习八 可变类型与不可变类型九 数据类型总结一 引子数据类型是用来记录事物状态的,而事物的状态是不断变化的(如:一个人年龄的增长(原创 2020-12-11 11:00:11 · 429 阅读 · 0 评论 -
007python语法 流程控制if while for
目录:一 引入二 分支结构2.1 什么是分支结构2.2 为什么要有分支结构2.3 如何使用分支结构2.3.1 if语法2.3.2 if应用三 循环结构3.1 什么是循环结构3.2 为什么要有循环结构3.3 如何使用循环结构3.3.1 while循环语法3.3.2 while循环应用3.3.3 for 循环语法3.3.4 for 循环应用一 引入流程控制即控制流程,具体指控制程序的执行流程,而程序的执行流程分为三种结构:顺序结构(之前我们写的代码都是顺序结构)、分支结构(用到if判断)、循环结构(用到wh原创 2020-12-09 19:03:59 · 92 阅读 · 0 评论 -
006python语法:用户交互,运算符
目录一 程序与用户交互1.1 什么是与用户交互?1.2 为什么要与用户交互?1.3 如何与用户交互1.3.1 输入input1.3.2 输出print1.3.3 格式化输出1.3.3.1 什么是格式化输出1.3.3.2 为什么要格式化输出1.3.3.3 如何格式化输出二 基本运算符2.1 算术运算符2.2 比较运算符2.3 赋值运算符2.3.1 增量赋值2.3.2 链式赋值2.3.3 交叉赋值2.3.4 解压赋值2.4 逻辑运算符2.4.1 连续多个and2.4.2 连续多个or2.4.5 优先级not&g原创 2020-12-09 14:57:56 · 92 阅读 · 0 评论 -
005python语法:垃圾回收机制
目录:一 引入二 什么是垃圾回收机制三 为什么要用垃圾回收机制四 理解GC原理需要储备的知识4.1 堆区与栈区4.2 直接引用与间接引用五 垃圾回收机制原理分析5.1 引用计数5.2 引用计数问题的解决方案5.2.1 问题1:循环引用5.2.2 解决方案:标记清除5.2.3 问题2:效率问题5.2.4 解决方案:分代回收一 引入 解释器在执行到定义变量的语法时,会申请内存空间来存放变量的值,而内存的容量是有限的,这就涉及到变量值所占用内存空间的回收问题,当一个变量值没有用了(简称垃圾)就应该将其占用的原创 2020-12-09 14:27:06 · 85 阅读 · 0 评论 -
004python语法:基本的数据类型
目录一 引子二 数字类型2.1 int整型2.1.1 作用2.1.2 定义2.2 float浮点型2.2.1 作用2.2.2 定义2.3 数字类型的使用三 字符串类型str3.1 作用3.2 定义3.3 使用四 列表list4.1 作用4.2 定义4.3 使用五 字典 dict5.1 作用5.2 定义5.3 使用六 布尔bool6.1 作用6.2 定义6.3 使用一 引子我们学习变量是为了让计算机能够像人一样去记忆事物的某种状态,而变量的值就是用来存储事物状态的,很明显事物的状态分成不同种类的(比如人的原创 2020-12-09 14:02:33 · 72 阅读 · 0 评论