C++
- 任意一个类,最多有一个析构函数、一个拷贝构造函数
- 基类的构造函数、析构函数都不会被子类继承
- 友元函数不是类的成员
- C++类中默认是private类型,要声明其他类型就要加关键字
- 面向对象程序设计的三大特征:封装、继承、多态
- 引入友元函数破坏了封装性
const char*p="ok"
,这里的p是指向字符串常量的指针而不是指向字符串的常量指针- 自身类对象不能成为自身类的成员
- 类的实例化是创建对象
- 数据封装就是将一组数据和与这组数据有关的操作组装在一起,形成一个实体,这个实体也就是类
- 一个函数功能不太复杂,但要求频繁调用,则应把它定义为内联函数,用
inline
关键字 - const加到非静态成员函数后面,表示这个成员函数中隐含的this指针是const指针,只允许读不允许通过this指针进行写入。加到非成员函数和静态成员函数后面则会产生编译错误。
- 采用重载函数的目的在于使用方便,提高可读性
- 静态数据成员要在类体外进行声明初始化
- 实现运行时的多态采用虚函数
- 如果类A被声明为类B的友元,则A中的成员函数可以访问B中的所有成员
- C++中不能重载的运算符有::、 ?: 、. 、sizeof
- 定义析构函数时要注意无形参也不可重载
- 作用域运算符
::
的功能是指出作用域的范围 - 对象数组的元素可以是不同类的对象
python
- ## 基础语法复习
不可变数据类型:数字、字符串、元组
可变数据类型:列表、字典、集合
元组中包含0个或1个元素的特殊语法规则
tup1=()
#空元组
tup2=(1,)
# 一个元素,需要在元素后添加逗号
集合的操作 set()
函数。集合a、b,差集: a-b
并集 :a|b
交集: a&b
对称差:a^b
优先级为 NOT AND OR
字符串常用函数
s="abcd"
s.upper() #全部的字母字符大写 多加个is则是判断是否全大写 s.isupper()
s.lower() #全部的字母字符小写 s.islower()
s.swapcase() #将字母字符大写变小写,小写变大写
s.split(x,y) #将字符串进行切割,默认是按空格切割,返回列表。输入参数则按所给参数进行切割,y代表切后截取多少个值
s.splitline() #将字符串按行进行切割,与上面同样的操作
s.find(str) #获取str在s中出现的索引,不存在则返回-1
s.isalpha() #判断是否全为字母
s.isdigit() #判断是否全是数字
s.isalnum() #判断是否全为数字和字母
-
## 字典的操作
d={} d.get(key) #返回指定键的值 d.items() #以列表返回一个视图对象 d.update(dict2) #把字典2的键值对更新到字典d中 d.keys() #返回一个键的视图对象 d.values() #返回值的视图对象 d.pop(key) #删除字典key和对应的
字典元素排序
-
## 列表函数复习
列表可以使用+操作符进行拼接
l=[] l.append() #列表尾增加一个元素 del l[2] #删除列表的3号元素 l.count() #统计某元素在列表出现的次数 l.extend(seq) #在列表尾添加另一个序列的多个元素 l.index() #从列表中找出第一个匹配项的索引 l.insert(index,obj) #将对象插入到指定索引的位置 l.pop(index=-1) #移除列表中的一个元素,默认最后一个,然后将值返回 l.reverse() #反向列表中的元素 l.sort(key=None,reverse=False) #对列表元素进行排序,key是规则,reverse是默认升序 l.clear() #清空列表 l.copy() #复制列表
-
## 函数和类的复习
python 的函数参数的传递:
- 不可变类型:类似C++的值传递,如整数、字符串、元组等,只是传递了值,不会影响本身的对象。如果在函数内部修改也不会对外界产生影响,而是新生成了一个对象
- 可变类型:类似C++的引用传递,如列表、字典、集合等,则是真正将自身传过去了,修改后外部也会产生变化。
类的复习:
- 类初始化
def __init__(self)
构造函数 - 类成员函数中的self代表类的实例,而非类
- 类的私有成员就是在命名前加
__
- 调用父类构造函数时用
父类类名.__init__(self.....)
- 覆写父类的方法 直接将方法名写一样即可
- 调用被重写的父类方法
super(子类名,对象).方法()
-
## 文件操作,txt和excl等文件
-
xlwt
1.创建一个工作簿
xl=xlwt.Workbook(encoding="utf-8")
2.创建一个sheet对象,第二个参数是指单元格是否允许被重置,默认为
false
sheet=xl.add_sheet("***",cell_overwrite_ok=True)
3.存储数据
sheet.write(i,j,data)
第一个i代表行,j代表列,data代表参数,第四个参数是格式。行列都是从0起4.保存数据
xl.save("文件路径.xls")
-
xlrd
1.打开一个xls或者xlsx文件获取Book对象
book=xlrd.open_workbook("文件路径和名字")
2.获取Book对象中的所有sheet名称
sheet=book.sheets()
以列表的形式返回3.对Sheet对象进行操作
sheet.nrows
获取此sheet对象的有效行数 -
txt
1.打开一个文件,可以是读取也可以是写入
fp=open("路径","w或者r")
2.写入
fp.write(str)
3.操作完毕后要保存
fp.close()
-
csv
-
读csv文件
import csv csv_reader=csv.reader(open(文件路径,encoding="utf-8")) #读csv文件的reader()方法,将把每一行作为列表子元素返回
-
写csv文件
import csv list=[1,2,3,4] out=open(文件路径.csv,'w',newline='') #打开一个csv文件 csv_writer=csv.writer(out,dialect='excel') #再用csv的writer方法操作 csv_writer.writerow(list) #再输入 out.close() #保存输入,关闭
-
-
-
## 数据库的操作流程
SQLite的基本操作
1.创建表 create table 表名 ( 列名 1 数据类型 字段属性, ......... ); 2.向表中插入数据 insert into 表名(列名1,列名2,.......) values(值1,值2,.....); 3.修改表中的数据 update 表名 set 列名1=值1,...... WHERE 条件表达式; 4.删除数据 delete from 表名 where 删除条件; 5.查询数据 select 列名1,列名2,.....列名n from 表名 where 查询条件;
使用python 对SQLite数据库操作
1.导入模块 2.建立数据库连接 con=sqlite3.connect(数据库名) 3.创建游标对象 cur=con.cursor() 4.编写SQL语句 5.调用execute()方法执行SQL语句 cur.execute(sql,data) #执行单条SQL语句 cur.executemany(sql,data) #执行多条sql语句 6.获取游标查询的结果 cur.fetchone() #获取下一条记录 cur.fetchmany(n) #获取n条记录 cur.fetchall() #获取所有记录 7.数据库的提交和回滚 con.commit() #保存操作 con.rollback() #回滚到上次保存的状态 8.关闭对象 cur.close() #关闭游标 con.close() #关闭连接
-
## 数据分析的操作流程
-
numpy库用法
主要的多维数组:ndarray
import numpy as np 生成ndarray对象 1 data=np.array(列表对象/元组对象) 创建特殊数组 arr=np.zeros(行,列) #生成多少行列的全零数组 还有np.ones()全是1,np.eye()对角线是1其余0
-
Pandas库用法
- Series对象的建立
import pandas as pd list=[1,2,3] series_list=pd.Series(list) #没有给指定索引则默认从0开始 series_list=pd.Series(list,index=['a','b','c']) #指定了索引则按索引来 用字典来生成的话索引就直接是字典的键了,而内容则是字典键对应的值
- DataFrame对象的建立
import pandas as pd 1.用字典建立 d={"name":['tom','cat','lucy'],"age":[12,13,15],"id":['0001','0002','0003']} df1=pd.DataFrame(d) #将会以字典d的键为列索引,默认行索引为0,1,2.... 常用操作 dataframe对象.get('列索引') #返回一个Series对象 可以转成列表对象
-
Matplotlib库的用法
一般使用 matplotlib库中的 pyplot
import matplotlib.pyplot as plt plt.figure(figsize=(num1,num2)) #设置分析的图的大小num1*num2大 plt.plot(x,y,label="") #折线统计图 x,y轴,label是图例 plt.bar(x,y,label="") #柱形统计图 x,y轴,laber是图例 plt.xlabel() #x轴的标签 plt.ylabel() #y轴的标签 plt.legend(loc=str) #显示图例,loc=决定显示在哪个地方,str是字符串,可以是str='upper right' plt.title() #统计图的标题 plt.show() #开始显示图 plt.close() #关闭图
-
## GUI的基本流程
使用 Tkinter库进行
import tkinter as tk win=tk.Tk() #建立一个窗口 win.title("示例") #将窗口标题改为内容 建立标签组件 lab=tk.Label(win,text="标签组件要显示的内容") #设立一个标签组件 lab.grid(row=2,column=0,pady=5,sticky='e') #显示在第3行第1列,靠右显示 建立文本框组件 ent=tk.Entry(win,textvariable='待设置的变量的内容') #建立文本框组件 获取输入内容,也可以显示变量内容 ent.grid(row=2,column=0,pady=5,sticky='e') #显示在第3行第1列,靠右显示 建立按键组件 but=tk.Button(win,text="设置想在按键上显示的内容",width=10,command=待执行的函数名) but.grid(row=2,column=0,pady=5,sticky='w') #在3行1列显示 ,居中显示 消息框组件 import tkinter.messagebox as messagebox #导入对应组件 messagebox.showinfo(title='提示',message="显示的内容") #弹出一个提示消息框 messagebox.showwarning(title='警告',message="显示的内容") #弹出一个警告消息框 messagebox.showerror(title='错误',message="显示的内容") #弹出一个错误消息框 建立窗体变量 e=tk.StringVar() #建立一个叫e的窗体变量 e.get() #可以获取Entry组件框里的内容 e.set(str) #将str内容设置给e,并且通过文本框里的textvariable能改变文本框的内容 win.mainloop() #显示窗体