python基础知识整理接上篇。
11 集合
1 集合具有唯一的作用,不能重复。
2 集合是无需的。
num={1,2,3,4,5,5,5,5,5,5,5}
输出num:{1,2,3,4,5}
Set1 = set([1,2,3,4,5])
11.1 增加删除
Set1.add() 集合增加
Set1.remove() 集合删除
11.2 定义不可变集合
frozen:冰冻的
Set1=frozenset([1,2,3,4,5])
定义之后不能使用添加删除等操作否则报错
12 文件
打开模式 执行操作
‘r’ 以只读方式打开文件(默认)
‘w’ 以写入的方式打开文件,会覆盖已存在的文件
‘×’ 如果文件已经存在,使用此模式打开将引发异常
‘a’ 以写入模式打开,如果文件存在,则在末尾追加写入
‘b’ 以二进制模式打开文件
‘t’ 以文本模式打开(默认)
‘+’ 可读写模式(可添加到其他模式中使用)
‘u’ 通用换行符支持
12.1 文件对象方法
12.1.1 打开文件
open(文件路径)
f=open(“E:\7.python\day1\know.txt”)
12.1.2 读取文件
print(f.read())
f.read(num)读取num个字符
12.1.3 返回当前文件中的位置
f.tell() 获取总字节 一个中文等于2字节
12.1.4 seek(offset,from)
f.seek(45,1)
在文件中移动文件指针,从from ( 0代表文件起始位置,1代表当前位署2代表文件末尾)偏移offset个字节
12.1.5 readline()
以写入模式打开,如果文件存在,则在末尾追加写入
12.1.6 write()
生成一个文本text内容
f=open("E:\\test.txt",'w')
print(f.write('You jume,I jump!'))
f.close()
12.1.7 readline() readlines()
f.readline() 只读取一行
f.readlines 将txt的内容转为列表
分割文件案例
将英文,中文分隔开成2个文件,china1.txt,english1.txt。
每段的分界线为======······ 分界线下面为china2.txt,english2.txt
Know.txt内容为:
f=open("know.txt")
china=[]
english=[]
count=1
#分割封装
def splitMsg(i):
# 文件分割 left为 ‘:’ 左边的内容 同理右边
(left, right) = i.split(":")
if left == 'you':
china.append(right)
if left == 'i':
english.append(right)
# 封装保存的文件
def splitFile(strName,fileName):
# 保存的文件名字
Name=open( strName + str(count) + '.txt', 'w')
Name.writelines(fileName)
Name.close()
for i in f:
# 切片取前6位
if i[:6] != "======":
splitMsg(i)
else:
splitFile('english',english)
splitFile('china', china)
# 保存文件后清空列表
china=[]
english=[]
count+=1
13.模块
Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。模块可以被别的程序引入,以使用该模块中的函数等功能,使用import引入。
os模块中关于文件/目录常用的函数使用方法
os.system使用方法:(关机)
os.system(‘shutdown -s -t 0’)
os.path模块
gettatime getctime getmtime
使用方法: (单独返回函数的文件名字)
os.path.basename(“moudle.py”)
pickle模块 本地储存
使用pickle模块可以存放一些数据到指定目录,只要不删除,他将会永久存在 。
存放
import pickle
myMsg={
'name':'jack',
'age':'22',
'say':'i love you,rose.'
}
pickFlie = open("mymsg.pkl",'wb')
pickle.dump(myMsg,pickFlie)
pickFlie.close()
读取
import pickle
pickFile = open('mymsg.pkl','rb')
mymsg=pickle.load(pickFile)
print(mymsg)
14.异常处理
14.1几种常见的错误类型
1.AssertionError 断言语句(assssert)失败
例如:
list=[]
assert len(list)>1
2.AttrebuteError尝试访问未知对象的属性 没有这个属性
例如:
Arr={}
print(Arr.name)
3.IndexError 索引超出序列范围
例如:
list=[1,2,3]
print(list[3])
4.KeyError字典中查找一个不存在的关键词
dicts={
'name':'Lisa',
'age':28
}
print(dicts['say'])
4.NameError 尝试访问一个不存在的变量
例如:
Print(notUndefined)
5.IndentationError 缩进错误
缩进不够4字符,就会报错,建议缩进的时候使用TAB键
6.OSErroe 操作系统产生异常(例如打开一个不存在的文件)
7.TypeError 类型错误
例如:
print(1+’1’)
8.ZeroDivisionError 除数为0
print(5/0)
更多错误访问 https://fishc.com.cn/thread-45814-1-1.html 查看
14.2异常处理方法
14.2.1 解决一:try-except语句
try:
检测范围
except Exception[as reason]:
出现异常(Exception)后的处理代码
例如:
try:
f = open('这是文件啊.txt')
print(f.read())
f.close()
except OSError as reason:
print("文件出错了 错误原因"+str(reason))
处理多个异常的方法
1.第一写法:写多个export进行处理
try:
sum=1+'1'
f = open('这是文件啊.txt')
print(f.read())
f.close()
except OSError as reason:
print("文件出错了 错误原因"+str(reason))
except TypeError as reason:
print("文件出错了 错误原因"+str(reason))
2.第二个写法:在()中把错误错误类型写进来
try:
sum=1+'1'
f = open('这是文件啊.txt')
print(f.read())
f.close()
except (OSError,TypeError) as reason:
print("文件出错了 错误原因"+str(reason))
14.2.1 解决二:try-finally语句
try:
检测范围
except Exception[as reason] :
出现异常(Exception)后的处理代码
finally:
无论如何都会被执行的代码
try:
f = open('这是文件啊.txt','w')
f.write('这是一个TXT文件')
sum = 1 + '1'
f.close()
except TypeError as reason:
print("文件出错了 错误原因"+str(reason))
finally:
print("不管你报不报错,我继续执行")
15 丰富的else语句以及简洁的with语句
15.1 else语句
else语句不仅仅可以与if连用 还可以与try-excpet语句,while语句等连用
例如:
15.1.1 try-except语句中使用
try:
int('abc')
except ValueError as reason:
print('出错啦: ' + str(reason))
else:
print( '没有任何异常! ')
15.1.2 while语句中使用
a=input("输入一个数子")
while int(a)>5:
print("数字大于5")
else:
print('数字小于等于5')
15.2 with语句
一般情况下,我们走着这么做处理:
f=open('这是文件啊.txt')
print(f.read())
f.close()
这样错它存在两个问题:
- 如果在读写时出现异常而忘了异常处理。
- 忘了关闭文件句柄
with后面接的对象返回的结果赋值给f。此例当中open函数返回的文件对象赋值给了f;with会自已获取上下文件的异常信息。
使用with有更优雅的写法:
with open('test.txt') as f:
print(f.read())
16 图形界面入门编程EasyGui
16.1安装方法:
1.直接安装 pip install easygui
安装完后可以使用 pip list 查看是否安装成功
2.到官方安装:http://easygui.sourceforge.net
下载easygui-0.97.zip,解压到任意地方
找到easygui.py,拷贝进电脑Python安装目录下的Lib\site-packages文件夹下
打开IDLE,import easygui,回车,如果没报错,那就是成功了。
16.2 使用方法与部分基本操作。
引入方法,那种都行。
1.from easygui import *
2.import easygui
easygui.msgbox("Hello World!")
3.import easygui as g
g.msgbox('Hello World!')
16.2.1 msgbox(message,title,button,image)
会出现一个弹出框,提供一个ok按钮,
会出现一个选择框,第一个参数为输出的内容message。
第二个为标题title,
第三个为选择的按钮button,默认为ok
第四个为图片image
import easygui as g
g.msgbox('你想做什么','选择框',('玩游戏','敲代码'),'./loge.png')
16.2.2 ccbox(message,title,button,image) ynbox(message,title,button,image)
两个用法一样,都会出现一个选择框。内容同上
g.ccbox('你想做什么','选择框',('玩游戏','敲代码'),'./loge.png')
16.2.3 buttombox(message,title,button,image)
可以自己定义一组按钮
g.buttonbox('你喜欢那个水果?','选择',('火龙果','山竹','荔枝'))
16.2.4 indexbox(message,title,button,image)
与按钮类似,返回的是下标,从0开始,第一个按钮返回下标0,第二个按钮返回1,以此类推。
16.2.5 boolbox(message,title,button,image)
按钮默认为True和false,点击true返回1,否则返回0
16.2.6 boolbox(message,title,choices)
提供了一个可选择的列表,使用序列(元祖或列表)作为选项,这些选项显示前会按照不区分大小写的方法排好序。
choicessList = ["火龙果", "山竹", "荔枝", "霸王果"]
g.choicebox('你喜欢吃那个水果','吃水果',choices=choicessList)
16.2.7 multchoicebox(message,title,choices)
与boolbox类似,也是提供一个可选择的列表,支持选择多个选项。
16.2.8 enterbox(message,title,default,strip,image)
为用户提供一个最简单的输入框,返回值为用户输入的字符串。
default为默认说的话。
strip为是否保留首尾空格值为True/false
16.2.9 interbox(message,title,default,lowerbound,upperbound,image)
提供一个简单的输入框,只能输入范围内的数值,否则会重新输入。
lowerbound参数设置最小值,upperbound参数设置最大值
16.2.10 mulenterbox(message,title,fields,values)
为用户提供多个简单的输入框。取消操作返回None
g.multenterbox("msg",'title',['反馈内容','你的名字','你的qq'],['你好我不反馈','liability','admin'])
16.2.11 passwordbox(message,title,default,image)
passwordbox() 跟 enterbox() 样式一样,不同的是用户输入的内容用"*"显示出来。
16.2.12 passwordbox(message,title,default,image)
显示一个密码框,内容显示为’***’
16.2.13 multpasswordbox(message,title,fields,values)
内容为输入框,最后一个输入框为密码。
g.multpasswordbox("msg",'title',['qq','密码'],['admin','liability'])
16.2.14 textbox(message,title,text,codebox)
函数默认会以比例字体(参数 codebox=1 设置为等宽字体)来显示文本内容(会自动换行哦),这个函数适合用于显示一般的书面文字。 text 参数(第三个参数)可以是字符串类型,列表类型,或者元祖类型。
17 对象
Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的。
17.1 面向对象编程
17.1.1创建类
使用 class 语句来创建一个新类,class 之后为类的名称并以冒号结尾: self相当于this指向
class BigBox:
def fn1(self,name):
self.name=name
def say(self):
print('我是',self.name,',我喜欢唱歌')
a=BigBox()
a.fn1("鲤鱼ovo~")
a.say()
17.1.2 python的魔法方法 init(self)
定义类的时候,若是添加__init__方法,那么在创建类的实例的时候,实例会自动调用这个方法,一般用来对实例的属性进行初使化。
class BigBox:
def __init__(self,name):
self.name=name
def say(self):
print('我是',self.name,',我喜欢唱歌')
b=BigBox('拉萨pvq~')
b.say()
17.1.3 公有私有
共有:可以公开使用,既可以在类内部访问,也可以在类外部访问。
私有:只能在类内部使用,在Python中定义私有变量只需要在变量在Python中定义私有变量只需要在变量”__“两个下划线那么这个函数或变量就会为私有的了。
直接访问内部名字就会报错例如:
class Person:
__name='拉斐obb_',
def getName(self):
return print(self.__name)
p=Person()
print(p.__name)
但也可以通过特殊的方法进行访问,即"对象名._类名+私有成员"
print(p._Person__name)
17.2 继承
语法:
class DerivedClassName ( BaseClassName) :
DerivedClassName:子类
BaseClassName:基类、父类或超类
例子:
class parent:
def say(self):
return print("一山更比一上高")
father = parent()
class child(parent):
pass
son = child()
son.say()
输出:一山更比一上高
如果子类中定义与父类同名的方法或属性,则会自动覆盖父类对应的方法或属性,但不会修改父级的方法。
class parent:
def say(self):
return print("一山更比一上高")
father = parent()
class child(parent):
def say(self):
return print("一树更比一树绿")
son = child()
son.say()
father.say()
多重继承:
class DerivedClassName (Base1,Base2,NBase3) :
与上述继承用法一样,不过可以继承多个方法。
17.3 组合
对象的组合又叫嵌套或建模,是通过不同类之间的对象相互赋值完成的.
例如:
class changeX:
def __init__(self,x):
self.x = x+1
class changeY:
def __init__(self,y):
self.y = y+1
class Change:
def __init__(self,x,y):
self.cx=changeX(x)
self.cy=changeY(y)
def print_num(self):
print(f'x的位置是{self.cx.x},y的位置是{self.cy.y}')
Change=Change(1,10)
Change.print_num()
17.4 对象相关的一些BIF(Built-in Functions(内置函数))
17.4.1 issubclass(class, classinfo)
1.class,一个类被认为是其自身的子类
2.classinfo可以是类对象组成的元祖,只要class与其中任何一个候选类的子类,则返回True
例如:
class A:
pass
class B(A):
pass
print(issubclass(B,A))
返回:
17.4.2.isinstance(object, classinfo)
如果第二个参数不是类或者由类对象组成的元祖,会抛出一个TypeError异常
17.4.3 hasattr(object, name)
检测object是否拥有name这个属性或者方法,如果有就返回True否则返回false
17.4.4 getattr(object, name[, default])
获得object的name的属性值,如果存在打印出来,如果不存在,打印出默认值,默认值可以更改。
class A:
age:18
print(getattr(A,"name",'属性不存在···'))
17.4.5 setattr(object, name, values)
给对象的属性赋值,若属性不存在,先创建再赋值。
class A:
age:18
setattr(A,"name",'鲤鱼obb~')
print(getattr(A,'name'))
17.4.6 delattr(object, name)
delattr 函数用于删除属性,有就删除没有就抛出异常。
17.4.7 property( fget=None, fset=None, fdel=None,doc=None)
property() 函数的作用是在新式类中返回属性值。
fget:获取属性值的函数
fset:设置属性值的函数
fdel:删除属性值函数
doc :属性描述信息
class C:
def __init__(self,x=10):
self._x = x
def getx(self):
return self._x
def setx(self, value):
self._x = value
def delx(self):
del self._x
x = property(getx, setx, delx)
c=C()
c.setx(20)
print(c.getx())# 输出:20
c.delx() #删除x