1.(1)在类中创建方法时打下小括号,就会自动添加上一个self,示例:
(def run(self):)。但是会鼠标光标会跳转到self的后面和小括号的前面 ,一般
要把小括号和冒号直接打上比较快(2)创建构造方法时会鼠标光标会直接跳转到冒号后面
2.stu=Student()跟stu1=Student()的内存地址不同,相当于二者不是同一个对象
3.Student.doc就可以直接显示Studentdoc,然后再Student.doc.print就会直接显示print(Student.doc)
4.文档字符串可以直接用一个引号就行
5.有时候可能没显示颜色差别(紫色),可能是编辑器的问题(卡住了),但不会影响最后的结果
6.必须先定义对象才能使用类的方法
7.
stu=Student(1,2,3) Student.run(stu) stu.run() 结果显示的效果一样
8.另辟蹊径得到属性值,在代码界面会报深黄色,但结果不会真的报错
print(bank._Bank__money)
1.多层继承的使用中,调用方法会出现原有结果和一个None
2.self在不同的代码环境下有不同的含义
3.获取属性值总共有两种方法:(1)使用类获取类属性(2)使用对象获取类属性
4.创建类的绑定方法用@classmethod时设置方法时会自动显示出cls
5.更改类的属性(1)用类的绑定方法(2)对类的属性赋值0
6.继承时可能子类没有参数而需要传参(父类中有需要传参的部分)
7.无需传参就不用添加形参
def __init__(self): self.money=250
要用到传参就要添加形参
def __init__(self,money): self.money=money
1.左侧的蓝色图标可以点开(方法重写)
2.在cmd操作中,默认有print()
示例: 只写>>>stu=Student('石头')
>>>stu
结果还是会显示:石头
1.super()使用在父类与子类关系中,而不是在上下行方法中
2.在pycharm中的代码块中显示引号,但可以打相同的引号来“跳过”它
3.对象(self)可以起到一个存储赋值的一个效果
4.用pop删除列表是删除具体哪一个下标的数据(按下标来删除)
5.*args结果是元组类型的,而**kwargs结果是字典类型的
6.在类中写方法或属性基本都要在其前面添上self
7.for i in a:中的i的遍历是根据下标来遍历,所以有可能改变遍历对象的内容,从而跳过其中的某些数据
8.不能在循环某个1列表或者某个元组...的时候,去操作列表中的元素
9.”{:.2f}“.format(数据)用来保留两位小数
10.列表中的pop是按下标来的而字典中的pop是按键来的
11.隐藏属性是可以被调用的,但是不能被修改直接修改
12.初始化属性虽然是在方法里面写的,但是在该类中的其他方法中都可以调用
13.
类中__init__在类没有实例化对象的前提下 , 该方法不会执行 # False,会进行预执行
1.提取压缩就是解压的意思
2.cmd操作还有分为普通操作和管理员操作
3.MySQL的密码设置成了root
4.要先启动MySQL然后输入密码才不会报错
5.添加指定字段的数据时,其他字段会自动显示(Null)
6.字段的新增中增加到第一个字段需要将表先关闭然后再重启,不能只是刷新(刷新是对于里面的数据的刷新,而关闭重启是对于表结构的刷新)。但是刷新会将新增的字段先显示在所有字段的末尾
1.MySQL的各种语法是可以组合起来使用的
2.MySQL的可视化软件Navicat需要先打开网络不然会无法打开其中的文件
3.要用鼠标左键点击表然后刷新才有效不然点击其他地方再刷新无法显示其界面
4.在MySQL中执行修改操作可以使用set
1.使用alt是框选这一列开始的数据
2.更方便地添加一些数据的方式:将原有的语句先删除前面写的内容,再按正常的方式添加,然后返回原有的数据
1.在MySQL中char()小括号中表示占据多少个字符串,而不是多少位数
2.在MySQL中的多表查询的左右连接是指将字段拼接在一起,然后下面的行数以左/右表为主
3.在MySQL中的多表查询的内连接是指将两个字段中有关联的数据返回
4.创建函数时填写的返回值如果是语句需要用括号包裹
5.SQL是一种语言规范,用于定义、操作和控制关系型数据库中的数据,而MySQL是一个具体的数据库软件产品
1.在MySQL中一个等号也就是"等号"
2.有写auto_increment但自己再写了数据,不会报错
3.修改表数据的语法中要注意修改多个值时,中间用逗号连接,而不是and或者空格,不然得不到要的结果
4.排序时,是按前面的字段为主,后面的字段为次要的
1.在使用MySQL时必须指明是哪一个表
2.在MySQL中的排序,用逗号隔开的部分排序的顺序可以不同
3.如果要查询某个部分的部分内容,可以使用分组(group by)
4.排序时后面的升序和降序语句不需要小括号
1.更改多个数据时更改的数据之间用逗号隔开而不是用and
2.在MySQL中的语句,只有一句时没写分号也可以被运行
3.MySQL中的降序是指显示框中上面数据大,下面数据小,升序则是上面数据小,下面数据大(升序指的就是从小到大,降序指的就是从大到小)示例:select * from sanguo order by attack desc,defense desc;
4.数量可以使用count
5.取别名as和以省略
6.当数据在什么范围之间可以使用between and,但是如果边界范围没有涉及到,那么就要正常写出来
7.如果使用的变量不能是多个数据可以使用 not in(1,2,3)
8.在MySQL中没有or
9.如果要查询以什么开头的数据可以使用like '_%'
10.在同一个语句中,如果前面有分组语句,后面的语句会收到分组语句的影响,示例:
11.在MySQL中排序语句要放置在条件语句之后,示例:select attack from sanguo where country='魏' order by attack desc limit 1,不然会报错
12.在MyQSL中条件语句也要放置在分组语句之前
和group by 搭配的一般是having
年薪跟月薪的用的英语单词可能不一样
表和视图的显示界面差不多,只是显示的图标不同,可以将视图当做一个普通表一样来操作
在pycharm中写MySQL语句会变成深黄色来提醒这是MySQL语句
17.在MySQL中双引号和单引号的作用不同,而在pycharm中却相同
18.在python中写MySQL语句都要加上三对引号包裹
19.在pycharm中使用快捷键shift+ctrl+F10运行的是当前页面的代码,而点击界面上方的启动代码按键,运行的是“选择”后的代码
20.创建的游标对象小括号内部不能有代码
21.可以先在MySQL将数据结构先创建好,然后再通过pycharm来执行接下来的操作
22.socket是pycharm自带的一种模块(需要导入)
23.有时候代码为深黄色也是可以运行的
24.要通过网络发给其他电脑的数据要及得转码
1.需要关闭连接的就是那些接收信息的函数和前面定义的变量
2.在pycharm中的左边点上小红点,(1)调试→只有这几行代码可以运行(2)让代码运行到这里
3.python中的Process模块的P要大写
4.在python中,如果要用小括号表示元组,且只有一个数据时,逗号要加在数据的后面
1.不要求一遍就会,只是多看一遍能更加熟悉
2.直接打出main然后点击tab键就可以显示一整行主进程
1.range()从0开始
2.后缀为md的文件就是typora的笔记文件
3.微信发送文件是有字数限制的
1.在MySQL中的int()小括号中写的数据指的是位数,char()小括号中写的数据指的是字符长度
2.创建表时在table后要写上表名,不然会报错
3.要用insert插入数据时要跟上into
4.where子句写在查询、修改、删除语句后面
5.in(20,30)指的是20或30中的一个,而不是在20到30之间
between 20 and 30指的是数据在20到30之间
6.alter是用来修改表的结构(增加字段等等),用于增加时,后面用的是add
7.修改、增加字段时都要在后面添加上字段的数据类型
8.在更改字段位置时属于改变表的结构,所以要先将其关闭然后才能显示其修改后的结构
9.修改字段具体的数据类型时后面要加上modify column
10.删除语句一般用drop,删除字段后面还要加上column
11.表数据清空只是将数据清空,字段名还是会保留
12.创建表时,如果写了非空约束,在没添加数据之前可以是空
13.添加数据时不管是否添加数据是多个还是一个都是写values(都要写s)
14.defatult后面写的数据不能写括号
1.分页中limit后面是起点和返回条数
2.表中的字段可以用句号符来点出,示例:s.score
3.添加链级删除用cascade
4.一对多表示的不是一个表对应多个表,而是一个表中的一条记录对应另一个表中的多条记录
5.数据类型如果是整形可以不写数据的位数
6.外键约束中的外键字段名需要小括号
1.笛卡尔积反应:笛卡尔积是一种连接操作,它将两个或多个表中的所有可能的组合组成一个结果集(相当于报错的过程)(多表查询)
2.内连接和左右连接都是将两个表连接在一起只是连接的东西有些不一样
3.使用多对多查询就是将左右连接多次使用
4.外键格式:
foreign key(外键字段名) references 主表名(字段名)
创建函数格式:
dlimiter $$ create function 函数名(参数名,数据类型) returns 返回类型 begin return 返回值;(注意要加分号) end $$ delimiter ;
5.调用函数用select语句
6.调用函数时,使用变量需要将@也带上
7.创建存储过程和函数时,创建语句的那句不需要分号
8.调用存储过程时需要用call然后要在过程名称后加上小括号
9.存储过程也是从函数中找
10.在MySQL中into是赋值,out指的是返回值
1.写触发器时要带上for each row
2.使用哪个表名需要使用关系语句on/from
3.comment是用于添加注释,也不需要小括号包裹
4.在触发器中定义变量可以使用declare 示例:declare num int;
5.在MySQL中写触发器或者定义函数在begin之后和end之前的数据可以不用空格
6.new 能够获取到insert、update新的数据 old 能够获取到update、delete的旧数据
示例:update class set stu_num=num+1 where cls_num=new.cls_num;
1.index后面加的是索引名而不是字段名
2.索引要从设计表中查看
3.连接MySQL和Python的范例:
import pymysql # 连接地址 host = 'localhost' # 用户名 username = 'root' # 密码(自己设置的密码) password = 'root' # 连接的数据库名称 db_name = '812day06' # 创建表的SQL语句 create_table_sql = ''' create table fun( id int primary key auto_increment, name char(5) unique, age int(3) ); ''' # 新增数据的SQL语句 insert_table_sql = ''' insert into fun(name, age) values("{name}", "{age}") ''' # 查询数据的SQL语句 select_table_sql = ''' select * from fun ''' # 1.建立MySQL连接 conn = pymysql.connect(host=host, user=username, password=password, db=db_name) # 2.创建游标对象(执行SQL语句) cursor = conn.cursor() # 执行SQL语句 print('-------新建表--------') cursor.execute(create_table_sql) # 在对表进行修改操作的时候需要手动提交 conn.commit() print('-------添加数据------') cursor.execute(insert_table_sql.format(name='石头', age=19)) cursor.execute(insert_table_sql.format(name='尊尼获加', age=23)) cursor.execute(insert_table_sql.format(name='麦子', age=13)) cursor.execute(insert_table_sql.format(name='莫西', age=25)) # 在对表进行修改操作的时候需要手动提交 conn.commit() print('-------查询数据--------') cursor.execute(select_table_sql) # 将查询结果获取 results = cursor.fetchall() # 将查询结果循环输出 print(f'id name age') for row in results: print(row[0], row[1], row[2], sep='\t') # 3.关闭连接 conn.close()
1.在网络编程中,写发送数据和接收数据的时候如果还没有将其转换编码就会先变深黄色
2.datetime.datetime.now()是获取当前时间
3.在网络编程中,使用udp可以不用关闭连接
4.socket是套接字
5.接口地址是电脑上有的,而端口号(1024-65535)是自己设置的,要服务端先运行,客户端再运行
1.在更改阻塞时,如果只更该其中一个会出现报错:BlockingIOError: [WinError 10035] 无法立即完成一个非阻止性套接字操作。
2.
accept 有两个返回值1.客户端socket对象(客户端发送的消息): 2.客户端的地址,能够知道是哪一个客户端发送的消息
当程序出现第一个BlockingIOError异常
就代表当前没有客户端连接服务器,会去处理已经连接上的客户端发送的数据
1.io总共有两种(1)非阻塞的io模型(2)io多路复用
2.io多路复用中是errlist中间有两个r
3.io多路复用中的select模块的作用:判断当前的socket对象是不是服务端socket对象,如果是,就去等待客户端连接,如果不是,就回去接收客户端发送的数据
4.在pycharm中要将数据转换成字节类型'',示例recv_data=b''
5.tk是一个独立的图形界面开发工具集,而tkinter是Python的标准GUI库,它是对tk的封装,二者不是同一个东西
1.tk模块和tkinter内包含的Tk不同
2.label的l也需要大写
3.pack和unpack可以用于web传输数据,相当于decode和encode
4.pack和unpack后面都要加上小括号,不然会报错
5.更改窗口颜色,字体颜色不会改变
6.tk中的时间是以毫秒计算的,1000毫秒=1秒
7.word文档中的字体大小,如果是中文字的话,中文数字越小,字体越大;如果是数字的话,数字越大,字体越大,pycharm中的字体大小也是一样
8.电脑会自己寻找定义的变量
9.struct.pack('i',a)这个i是要像字典一样取值
10.在Label中可以写padx,pady
1.进程执行的任务函数一般都要添上参数
2.如果写多个进程需要多次启动,才能显示结果
1.可以在元组的小括号内进行数据运算
2.后缀是json的文件不是python文件,而是一种存储数据的文件
3.在后缀为json的文件中存储的数据单引号和双引号有区分
4.锁需要导入才能使用,获取锁时需要将锁当做参数放置于定义函数的小括号中,而且锁也是由multiprocessing来导入的,在进程的语法中也需要传入锁
1,queue的q表示队列时需要大写,如果是用来排除异常则需要小写
2.empty首字母需要大写
3.put_nowait()小括号中必须有参数(数字),这个参数任意写就行,get_nowait()小括号中不能有参数
4.队列消息不是线程的内容而是进程的内容
5.Process(target=函数,args=(任务参数,))
6.导入进程:from multiprocessing import Process
导入线程:from threading import Thread
7.可以将函数当做参数传入
8.
(1)普通锁: l1=Lock() l2=Lock() (2)递归锁: l1和l2其实是同一把锁,将同一个锁对象赋给两个变量 l1=l2=RLock()
1.定时器模块要从threading来导入,也需要启动才能使用
2.进程和线程以及Event一般都是在主进程中创建对象,然后再在前面创建的函数中直接使用
3.join的作用:(1)让并行变成串行(2)让主进程等待子进程结束
4.(1)可以使用time来使程序暂停(2)gevent来使程序暂停(都是使用sleep)
5.将带有图片的python文件打包成exe文件以后,就可以直接使用图片,不需要将图片也跟着打包
1.with open(f'{file_path}{name}.json','w',encoding='utf-8') as f:
name指的是用文件名来代替整个文件
2.做ATM项目的时候,牵一而发动全身
3.break要跟循环连用不然会报错
4.形参和实参在每一个模块中是一一对应的,但在不同的模块中,可以不写成同一个单词
1.如果用pycharm只打开一个文件,用from导入不能在前面加上该文件文件名,不然会报错
2.在说明文档中写入的是整个流程的逻辑而不是细节方面的东西
3.在用json模块存储数据的时候
以json文件的保存方式保存文件、用户名为用户名.json,把用户数据的名字取出来作为文件名
示例:
name=user_info['user_name']#把用户名取出来 with open(fr'{file_path}\{name}.json','w',encoding='utf-8') as f: json.dump(user_info,f)#写入数据到文件
用json来取出数据示例:
user_data=json.load(f)
4.位置padx,pady是多少显示的结果和原先设置的大小成正比
5.command=root.quit是使程序退出的
6.尽量不要使用中文来命名文件