Python 入门笔记(十二)包与模块
模块 基本概念 模块的定义 一般情况下,模块(module)是一个以 .py 为后缀的文件,其他可作为 module 的文件类型还有 .pyo 、.pyc 、.pyd 、.so 、.dll ,但初学者几乎用不到 在模块中能定义函数、类、变量,也能包含可执行的代码,在导入的时候会把模块完整地先执行一遍 模块的作用 隐藏代码细节,提高可维护性 模块的分类 Python 的官方标准库(直接 import 就能开用) 第三方模块(用 pip 下载的包里面的模块等) 自己写的模块(下面来试一试) 初尝模块 首先,在当前目录新建一个 calc.py ,再在里面保存一些函数 1234567891011def add(a,b): return a+bdef sub(a,b): return a-bdef mul(a,b): return a*bdef div(a,b): return a/b 现在我们在其他文件中引用它,在同一目录新建一个 .py 文件 import … 导入整个模块 12345import calcresult = calc.add(10, 20)print(result) # 30 使用这种方法,在调用其中的函数或类时,必须加上模块名的前缀 from … import … 导入特定的内容,使用时不用前缀 12345from calc import add, sub # 可以导入任意个result = add(10, 20)print(result) # 30 from … import * 这会把模块中的所有函数、类、变量等全部导进来,虽...
『Python』单下划线开头、双下划线开头
本文转载自 Python 单下划线开头、双下划线开头 好文章,感觉写得不错 单下划线开头的变量:半私有变量 以此类名称命名的对象,需要分为两种情况: 类外:类外的半私有对象、私有对象,功能一致,均是在本模块中可以正常使用,但是不能被直接导入并调用。如果要在模块外使用,那么需要导入本模块,然后使用(模块名.变量名)进行调用。 类中: 类中的半私有对象,仅仅是概念上的私有,默认不要在类外进行调用 实际上,在类外,均可以使用(实例名.变量名/类名.变量名)进行调用。 双下划线开头的变量:私有变量 也需要分为两种情况: 类外: 与半私有对象相同 类中: 类中的私有对象,在类外均不可直接调用,可以理解为真私有,但是,Python 中没有完全私有的对象,此种对象也是可以在类外进行调用的,这里涉及到一个概念:矫直。 以双下划线开头,双下划线结尾的对象:Python 内置属性名或者魔法方法名 是 Python 自己实现的属性和方法,一般不允许自定义类似此种命名方式的属性或者方法。
『VSCode』常用快捷键
有些快捷键总是忘记,而且要想半天,特此记录,慢慢补充 多行的行首同时增加/减少制表符:先选中一些行,然后 Tab / Shift + Tab 多行同时注释/取消注释:先选中一些行,然后 Ctrl + /
Python 入门笔记(十一)面向对象
面向对象基础 面向对象(OOP)这种烂大街东西我觉得应该没什么必要再赘述了,就简单地搬运一下菜鸟教程里面的说明 类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。 方法: 类中定义的函数。 类变量: 类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。 数据成员: 类变量或者实例变量用于处理类及其实例对象的相关的数据。 方法重写: 如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。 局部变量: 定义在方法中的变量,只作用于当前实例的类。 实例变量: 在类的声明中,属性是用变量来表示的,这种变量就称为实例变量,实例变量就是一个用 self 修饰的变量。 继承: 即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个 Dog 类型的对象派生自 Animal 类,这是模拟 “是一个(is-a)” 关系(例如,Dog 是一个 Animal)。 实例化: 创建一个类的实例,类的具体对象。 对象: 通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。 杭助的 Guide 也可以看一下,OOP 是一种思想,很多语言都有支持 初尝类与实例 创建一个简单的类 先讲一下基本的模板 123456class ClassName: # 类名的首字母要大写,这是约定,然后因为这里...
『GitHub』学生身份认证问题
因为 Copilot 准备收费了,而学生还是可以免费用的,所以去申请了好几次教育认证,今天终于把 GitHub 教育认证弄好了(而且是秒过) 下面是鄙人的个人经历,可供参考,但是我也不一定包你能过,我只能说我是这样过的 下面开始,并且全程不要用梯子 登录 首先前往 https://education.github.com/ 并登录你的 GitHub 账户 选择学生,并且下一步 确认邮箱和学校 大学生应该都有教育邮箱罢,选择了你学校的邮箱之后就自动把学校填了 (而且这里如果用的不是学校的邮箱的话,后面可能没有上传图片的选项,只能拍照) 如果这里没有你的教育邮箱如果这里没有你的教育邮箱的话,请前往 GitHub 给自己的账户添加你的邮箱 上传照片 接下来就是上传照片了,是最重要的一步 我选择的是去学信网,登录之后来到学籍信息 然后点击查看验证报告 在这个页面使用浏览器把信息都翻译成英文,然后截图(上传的图片应当是不打码的) 回到教育认证页面,上传图片,类型选第一个就行 如果我只能拍照怎么办?很奇怪,有些账号是只有拍照这一个选项的,那就只能在手机上重来一遍然后用手机拍照了~ 有人说可以直接把照片拖进去(也不知道行不行 为什么要翻译呢?因为不翻译的话我会提示这个 而翻译之后就好了,确认没有提示任何问题之后再提交 顺利通过 提交之后秒过,终于搞定了 如果我没能顺利通过怎么办?如果你没能通过,请检查以下几点: 正如开头所说,全程不能用梯子 是否有翻译成英文 提交的时候是否有提示缺少某些信息,如果有的话请检查截图/拍照的时候有没有提供这些信息 ...
『MySQL』主键与唯一键
概念 唯一键(unique) 不能重复 一个表中可以有多个 主键(primary key) 不能重复、不能为空(会自动加上 NOT NULL 属性) 用于区分表中的每一条数据,方便让外键来引用,且一个表中只能有一个 要点提示 MySQL 的术语里面『键』就等于『索引』,这就是为什么你在看唯一键的创建语句时跟你实际创建的语句可能不一样 主键 = NOT NULL + 唯一键 主键和唯一键都可以建立在某一个字段或某几个字段上(几个字段共同组成主键/唯一键,下面会讲) 自增长(AUTO_INCREMENT)属性必须定义在主键上 使用 创建 建表前 直接在字段后加上 PRIMARY KEY / UNIQUE (注意没有 KEY ) 12345create table stu4( id1 int primary key,<------#直接指定主键字段 id2 int, name varchar(20)); 1234create table if not exists stu2( id int auto_increment primary key, name varchar(20) unique <------#建表时字段后⾯添加unique,name不可以添加重复数据); 在所有字段之后增加 PRIMARY KEY (字段或字段列表) / UNIQUE KEY (字段或字段列表) 123456create table stu5( id1 int, id2 int, name varchar(...
MySQL 数据类型之数值
总览表 MySQL 支持标准 SQL 中所有的数据类型,此外还拓展了一些,总体来说可分为整数、浮点数、定点数和位,如下表所示 整数类型 名称 字节 最小值 最大值 TINYINT 1 有符号 -128无符号 0 有符号 127无符号 255 SMALLINT 2 有符号 -32768无符号 0 有符号 32767无符号 65535 MEDIUMINT 3 有符号 -8388608无符号 0 有符号 -8388607无符号 1677215 INT 或 INTEGER 4 有符号 -2147483648无符号 0 有符号 2147483647无符号 4294967295 BIGINT 8 有符号 -9223372036854775808无符号 0 有符号 -9223372036854775807无符号 18446744073709551615 说明:有符号/无符号 指的是这一字段是否有 UNSIGNED 这一属性 浮点数类型 名称 字节 最小值 最大值 FLOAT 4 ±1.175494351E-38 ±3.402823466E+38 DOUBLE 8 ±2.2250738585072014E-308 ±1.7976931348623157E+308 定点数类型 名称 字节 描述 DEC(M,D) 或 DECIMAL(M,D) M+2 最大取值与 DOUBLE 相同, DEC 的有效取值范围由 M 和 D 决定 位类型 名称 字节 最小值 最大值 BIT(M) 1...
『面试八股文』2:数据库自增 ID 用完了会咋样?
先说结论: 数据库自增主键用完后分两种情况 有主键,报主键冲突 无主键,InnDB 会自动生成一个全局的row_id。它到达最大值后会从 0 开始算,遇到 row_id 一样时,新数据覆盖旧数据。所以,我们还是尽量给表设置主键。 FROM:https://juejin.cn/post/6984275678761844743#heading-5
SQL 入门笔记(十八)使用视图
这一节将讲述什么是视图,它们怎样工作,何时使用它们,并且如何使用它们简化前几篇中执行的某些 SQL 操作 视图 视图是虚拟的表,与包含数据的表不一样,视图只包含使用的动态检索数据的查询 说明:SQLite 的视图SQLite 仅支持只读视图,所以视图可以创建,可以读,但不能通过视图更改原表的内容 理解视图的最好方法是看例子,在第 12 节中,我们通过下面的语句从三个表中检索数据 12345SELECT cust_name, cust_contactFROM Customers, Orders, OrderItemsWHERE Customers.cust_id = Orders.cust_id AND OrderItems.order_num = Orders.order_num AND prod_id = 'RGAN01'; 此查询用来检索订购了某种产品的顾客,任何需要这个数据的人都必须理解相关表的结构,知道如何创建查询和对表进行联结。检索其他产品(或多个产品)的相同数据,必须修改最后的 WHERE 子句 现在,假如可以把整个查询包装成一个名为 ProductCustomers 的虚拟表,则可以如下轻松地检索出相同的数据 123SELECT cust_name, cust_contactFROM ProductCustomersWHERE prod_id = 'RGAN01'; 这就是视图的作用,ProductCustomers 是一个视图,作为视图,它不包含任何列或数据,包含的是一个查询(与上面用以正确联结表的查询相同) ...
SQL 入门笔记(十七)创建和操纵表
本节将讲述创建、更改和删除表的基础知识 创建表 创建表的话,最好是通过图形化的管理工具来创建,但也可以手动通过 SQL 语句创建 本节不会介绍创建表时可以使用的所有选项,只会给出一些基本选项,详细的信息还是去翻对应的 DBMS 文档吧( 表创建基础 利用 CREATE TABLE 创建表,必须给出以下信息: 新表的名字,在关键字 CREATE TABLE 之后给出 表列的名字和定义,用逗号分隔 有点 DBMS 还要求指定表的位置 下面的 SQL 语句创建了样例中的 Products 表 12345678CREATE TABLE Products( prod_id CHAR(10) NOT NULL, vend_id CHAR(10) NOT NULL, prod_name CHAR(254) NOT NULL, prod_price DECIMAL(8,2) NOT NULL, prod_desc VARCHAR(1000) NULL); 使用 NULL 值 某一列是否能为 NULL 值可以在创建时设置,就如上面的那样 如果缺省的话,大多数 DBMS 都会设置为 NULL ,而不是 NOT NULL ,当然也有一些例外,并且有些 DBMS 必须要你指定是 NULL 还是 NOT NULL,所有为了兼容性,建议始终指定这一项 指定默认值 类似地,可以指定默认值 12345678CREATE TABLE OrderItems(...
SQL 入门笔记(十六)更新和删除数据
本节将记录如何使用 UPDATE 和 DELETE 来进一步操纵表 鄙人感觉这两个语句是非常简单并且直观的 更新数据 使用 UPDATE 非常简单,你只需给出三个信息: 要更新的表 列名和它的新值 确定要更新哪些行的过滤条件 例如,一位顾客有了新的电子邮件地址,因此记录需要更新 123UPDATE Customers # 表名SET cust_email = 'kim@thetoystore.com' # 新的值WHERE cust_id = 1000000005; # 指定对象,不然就是更新整个表了~ 当然,可以一次更新多个列 1234UPDATE CustomersSET cust_contact = 'Sam Roberts', cust_email = 'sam@toyland.com' WHERE cust_id = 1000000006; 记住只需要一个 SET ,并且每对数据直接要用逗号分隔 提示:在 UPDATE 语句中使用子查询在 UPDATE 语句中可以使用子查询,这样可以用 SELECT 的检索结果更新数据 提示:FROM 关键字某些 DBMS 支持在 UPDATE 中使用 FROM 子句,用一个表的数据更新另一个表的行 删除数据 与 UPDATE 类似, DELETE 也非常简单,但是一定不要忘了 WHERE 子句,不然就全删完了 下面的语句从 Customers 表中删除一行 12DELETE FRO...
SQL 入门笔记(十五)插入数据
这一节将讲述如何使用 INSERT 插入数据 数据插入 顾名思义, INSERT 用来将行插入(或添加)到数据库表,插入有几种方式: 插入完整的行 插入行的一部分 插入某些查询的结果 插入完整的行 插入完整的行,可以不指定字段名,靠次序来定位,也可以指定字段名,这样可以更安全(也允许乱序) 不指定字段名(不推荐) 12345678910INSERT INTO Customers # 这个 INTO 在某些 DBMS 是可以选的,但还是建议加上VALUES(1000000006, 'Toy Land', '123 Any Street', 'New York', 'NY', '11111', 'USA', NULL, NULL); 指定字段名 123456789101112131415161718INSERT INTO Customers(cust_id, cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country, ...
SQL 入门笔记(十四)组合查询
本节将讲述如何利用 UNION 操作符将多条 SELECT 语句的结果组合成一个结果集 组合查询 多数 SQL 查询只包含从一个或多个表中返回数据的单条 SELECT 语句。但是,SQL 也允许执行多个查询(多条 SELECT 语句),并将结果作为一个查询结果返回。这些组合查询通常被称为 并(union) 或 复合查询(compound query) 主要有两种情况需要使用组合查询: 在一个查询中从不同的表返回数据结构 对一个表执行多个查询,按一个查询返回数据 说明:组合查询和多个 WHERE 条件多数情况下,组合相同表的两个查询所完成的工作与具有多个 WHERE 子句条件的一个查询所完成的工作相同。换句话说,任何具有多个 WHERE 子句的 SELECT 语句都可以作为一个组合查询,在下面可以看到这一点 创建组合查询 使用 UNION 很简单,只需要在各条 SELECT 之间加上 UNION 就好了 举个例子,假如需要 Illinois、Indian 和 Michigan 等美国几个州的所有顾客的报表,还想包括不管位于那个州的所有的 Fun4All 这当然可以使用 WHERE 子句,例如下面这样 123SELECT cust_name, cust_contact, cust_emailFROM CustomersWHERE cust_state IN ('IL','IN','MI') OR cust_name = 'Fun4All'; 而如果使用 UNION ,则会是这样 123456...
SQL 入门笔记(十三)创建高级联结
使用表别名 第 7 节介绍了如何使用别名引用被检索的表列,给列起别名的语法如下 123SELECT Concat(vend_name ,'(' , vend_country , ')') AS vend_titleFROM VendorsORDER BY vend_name ; SQL 除了可以对列名和计算字段使用别名,还允许给表名起别名,这样做有两个理由 缩短 SQL 语句 允许在一条 SELECT 语句中多次使用相同的表 多次使用相同的表?是不是听上去很奇怪?别急,后面会有例子,但是先来尝试一下给表取别名 从上一篇的代码为例 12345SELECT cust_name, cust_contactFROM Customers, Orders, OrderItemsWHERE Customers.cust_id = Orders.cust_id AND OrderItems.order_num = Orders.order_num AND prod_id = 'RGAN01'; 下面给表名取别名 12345SELECT cust_name, cust_contactFROM Customers AS C, Orders AS O, OrderItems AS OI # 取别名WHERE C.cust_id = O.cust_id AND OI.order_num = O.order_num AND prod_id = 'RGAN01'; 运行结果和上面是一样的,在这个例子中,别名只...
SQL 入门笔记(十二)联结表
联结 SQL 最强大的功能之一就是能在数据查询的执行中 联结 (join) 表。联结是利用SQL的 SELECT 能执行的最重要的操作,很好地理联结以及其法是学习 SOL 的极为重要的部分 在能够有效地使用联结前,必须了解关系表以及关系数据库设计的基础知识。下面的介绍并不能涵盖这一主题的所有内容,但作为入门经够了 关系表 理解关系表,最好是来看个例子。有一个包含产品目录的数据库表,其中每类物品占一行。对于每一种物品,要存储的信息包括产品描述、价格,以及供应商 现在有同一供应商生产的多种物品,那么在何处存储供应商名、地址、联系方式呢?将这些数据与产品信息分开存储的理由是: 同一供应商生产的每个商品,其供应商数据都是相同的,对每个产品重复此信息既浪费时间又浪费存储空间 如果供应商信息发生变化,例如供应商迁址或电话号码变动,只需修改一次即可 如果有重复数据(即每种产品都存储供应商信息),则很难保证每次输入该数据的方式都相同,不一致的数据在报表中就很难利用 关健是,相同的数据出现多次决不是一件好事,这是关系数据库设计的基础。关系表的设计就是要把信息分解成多个表,一类数据一个表。各表通过某些共同的值互相关联(所以才叫关系数据库) 在这个例子中可建立两个表:一个存储供应商信息,另一个存储产品信息。Vendors 表包含所有供应商信息,每个供应商占一行,具有唯一的标识。此标识称为 主键(primary key) ,可以是供应商 ID 或任何其他唯一值 Products 表只存储产品信息,除了存储供应商 ID(Vendors 表的主键)外,它不存储其他有关供应商的信息。Vendors...
SQL 入门笔记(十一)使用子查询
子查询 SELECT 语句是 SQL 的查询,我们迄今为止所看到的所有 SELECT 语句都是简单查询,即从单个数据库表中检索的简单语句 SQL 还允许创建 子查询(subquery) ,即嵌套在其他查询中的查询(将一个查询的结果作为另一个查询的一部分),理解子查询的最好方法自然是看几个例子 利用子查询进行过滤 我们样例的数据表都是关系表,例如订单存储在两个表中每个订单包含订单编号、客户 ID、订单日期,在 orders 表中存储为一行。各订单的物品存储在相关的 Order Items 表中。Orders 表不存储顾客信息,只存储顾客 ID,顾客的实际信息存储在 Customers 表中 现在,假如你需要列出订购物品 RGAN01 的所有顾客,应该怎样检索? 在 Order Items 表中检索包含 RGAN01 的所有订单编号 依靠订单编号查找所以的顾客 ID 去 Customers 表中依靠顾客 ID 返回顾客信息 上述每个步骤都可以单独作为一个查询来执行,把一条语句的结果用于另一条语句的 WHERE 子句 也可以使用子查询来把 3 个查询组合成一条语句 现在分别使用两种方法来感受一下 先去 Order Items 表 123SELECT order_numFROM OrderItemsWHERE prod_id = 'RGAN01'; 在得到 20007 和 20008 这两个编号之后,再去查 Orders 表 123SELECT cust_idFROM OrdersWHERE order_num IN (20007,20...