Python基础学习

记录一下自己的Python的学习历程。  

 

 

Python的IDLE shell是外壳的意思 即文本与程序交互的过程。

print函数 print('hello')字符串带引号 若为整型 则为print(5+3)      变量打印直接print(techer)

字符串之间直接可以用加号整合 print('water'+'lijian')  也可以对一个字符串进行乘法 ‘hello’*8    

注意Python内置函数返回的数据类型 例如input返回字符串类型 temp = input(‘输入:’)  num = (int) temp ..

 

变量及字符串

字符串拼接 mytecer = 'tech'   youtecher = 'er'   we = mytecher + youtecher   print(we)    输出为techer               

转义字符\   当打印有\ 的字符串时 要用转义字符

原始字符串:r     例如 str = r'C:noe\techer'; 自己会加上转义字符

 

 

 Python的条件分支

if True :

  (真执行语句)

else :

  (假执行语句)

 

 

Python循环

while True :

(while执行语句)

 

逻辑操作符

and   or    not

 

Pytnon引入外援即模块

例 引入random模块   import random

调用时即 random._    num=random._(调用函数)

 

Python的数据类型

整型  浮点型 字符串型 布尔值   e记法

e记法   2.5e-27   即2.5X e的-27次方    此时若赋值  变量值会变成一个浮点型 1.5e2 是150.0

字符串 整型 浮点型之间转换 int()  float()  str() 的内置函数

内置函数type()   返回值为输入参数的数据类型     isinstance()函数 isinstance(a,str) 若a即输入参数为str则返回值为TRUE

 

 

Python的操作符

+ - * /  %运算同C语言

Pyton3舍弃了地板除法 即 10/8=1.25  而不是转换为整型为1    如果想要得到整数 则应//除法 10//8=1  3.0//2=1.0  

**用于幂运算 3**2=9  

优先级 先算乘除后算加减 有括号先算括号里的  在-3**2=-9   3**-2=0.000001   可得右边的优先级高 -3**2=-(3*3)

优先级由高到低 幂运算 正负号 算数操作符 比较操作符 逻辑运算 

 

分支及循环

Python 的分支  if elif 用法同C语言中if else if  可以有效的避免else悬挂 及 提高程序运行速度

条件表达式(三元) 例 small = x if x<y else y   意思是如果x<y 则smal 为x否则为 y 

断言 assert  后面的条件不成立则程序会崩溃 抛出assertionerror异常   一般用于确定的程序检测某一条件为真。  例 arssert 3>4  则会异常

while循环  不再赘述

for循环  for 目标 in 表达式

               循环体

例 for i in lijian print(i,end=' ')  打印为 l i j i a n   end为空格隔开

range(start stop step )函数      range(2,9)  打印为从2到8   steP为步进 range(2,9,2)打印为2 4 6 8 

break 跳出当前循环体

contiue 跳出当前循环 执行下一次循环

      列表

其中包括了extend 等等的一些方法 如果需要则调用即可 。

定义为【】

列表的拷贝 tuple2 = tuple1[:]    复制一个列表

     元组 (带上枷锁的列表)

定义为()

元祖不能随意的插入,去除的操作 。 

定义元祖时, 是关键   temp1=(1)  type(temp )为整形 temp2=2,4,3   此时为元祖

元祖的拼接 tuple=('小脚丫',‘大脚丫’,‘岁月’,‘老婆’)   此时的拼接为tuple = tuple[:2]+('哈哈哈',)+tuple{2;} 新的元祖tuple生成后 老的tuple仍然存在 但是没有标签指向他 此时python会把老的tuple销毁掉       ()及, 不可缺少

删除元祖同于列表 del 例如del temp会删除元祖

元祖所用操作符 上面的增加 以及列表重复*8   逻辑 比较操作符等等

 

 

     字符串的很多奇葩方法

截取 string = ‘alexhahahaha’   str[;6]   即可截取

访问单个字符 同索引 string[5]

拼接字符串steing[;6] +('666')+string[6;]   字符串拼接  旧的字符串python会回收掉

capitalize() 把字符串的第一个字符改为大写
casefold() 把整个字符串的所有字符改为小写
center(width) 将字符串居中,并使用空格填充至长度 width 的新字符串
count(sub[, start[, end]]) 返回 sub 在字符串里边出现的次数,start 和 end 参数表示范围,可选。
encode(encoding='utf-8', errors='strict') 以 encoding 指定的编码格式对字符串进行编码。
endswith(sub[, start[, end]]) 检查字符串是否以 sub 子字符串结束,如果是返回 True,否则返回 False。start 和 end 参数表示范围,可选。
expandtabs([tabsize=8]) 把字符串中的 tab 符号(\t)转换为空格,如不指定参数,默认的空格数是 tabsize=8。
find(sub[, start[, end]]) 检测 sub 是否包含在字符串中,如果有则返回索引值,否则返回 -1,start 和 end 参数表示范围,可选。
index(sub[, start[, end]]) 跟 find 方法一样,不过如果 sub 不在 string 中会产生一个异常。
isalnum() 如果字符串至少有一个字符并且所有字符都是字母或数字则返回 True,否则返回 False。
isalpha() 如果字符串至少有一个字符并且所有字符都是字母则返回 True,否则返回 False。
isdecimal() 如果字符串只包含十进制数字则返回 True,否则返回 False。
isdigit() 如果字符串只包含数字则返回 True,否则返回 False。
islower() 如果字符串中至少包含一个区分大小写的字符,并且这些字符都是小写,则返回 True,否则返回 False。
isnumeric() 如果字符串中只包含数字字符,则返回 True,否则返回 False。
isspace() 如果字符串中只包含空格,则返回 True,否则返回 False。
istitle() 如果字符串是标题化(所有的单词都是以大写开始,其余字母均小写),则返回 True,否则返回 False。
isupper() 如果字符串中至少包含一个区分大小写的字符,并且这些字符都是大写,则返回 True,否则返回 False。
join(sub) 以字符串作为分隔符,插入到 sub 中所有的字符之间。
ljust(width) 返回一个左对齐的字符串,并使用空格填充至长度为 width 的新字符串。
lower() 转换字符串中所有大写字符为小写。
lstrip() 去掉字符串左边的所有空格
partition(sub) 找到子字符串 sub,把字符串分成一个 3 元组 (pre_sub, sub, fol_sub),如果字符串中不包含 sub 则返回 ('原字符串', '', '')
replace(old, new[, count]) 把字符串中的 old 子字符串替换成 new 子字符串,如果 count 指定,则替换不超过 count 次。
rfind(sub[, start[, end]]) 类似于 find() 方法,不过是从右边开始查找。
rindex(sub[, start[, end]]) 类似于 index() 方法,不过是从右边开始。
rjust(width) 返回一个右对齐的字符串,并使用空格填充至长度为 width 的新字符串。
rpartition(sub) 类似于 partition() 方法,不过是从右边开始查找。
rstrip() 删除字符串末尾的空格。
split(sep=None, maxsplit=-1) 不带参数默认是以空格为分隔符切片字符串,如果 maxsplit 参数有设置,则仅分隔 maxsplit 个子字符串,返回切片后的子字符串拼接的列表。
splitlines(([keepends])) 在输出结果里是否去掉换行符,默认为 False,不包含换行符;如果为 True,则保留换行符。。
startswith(prefix[, start[, end]]) 检查字符串是否以 prefix 开头,是则返回 True,否则返回 False。start 和 end 参数可以指定范围检查,可选。
strip([chars]) 删除字符串前边和后边所有的空格,chars 参数可以定制删除的字符,可选。
swapcase() 翻转字符串中的大小写。
title() 返回标题化(所有的单词都是以大写开始,其余字母均小写)的字符串。
translate(table) 根据 table 的规则(可以由 str.maketrans('a', 'b') 定制)转换字符串中的字符。
upper() 转换字符串中的所有小写字符为大写。
zfill(width) 返回长度为 width 的字符串,原字符串右对齐,前边用 0 填充。

次部分学自鱼C工作室论坛 ,  小甲鱼牛逼

 

字符串的格式化  str1= ‘{0} love {1}.{2} ’     {}中的是replacemen字段

str1.format('i','my','laopo') = 'i love my laopo'      这个是位置参数 分别放到0 1 2上

format方法的关键字参数   ‘{a} love {b}.{b} ’.format('a=i','b=my','c=laopo') = 'i love my laopo'  

一起使用  ‘{0} love {b}.{b} ’.format('i','b=my','c=laopo') = 'i love my laopo     注意 位置参数要在位置参数要在关键字参数之前 即0要在bc之前

‘’{0;.1f}{1}''.foramt(;27','GB')   ;表示格式化符号

%c
格式化字符及其 ASCII 码
%s
格式化字符串
%d
格式化整数
%o
格式化无符号八进制数
%x
格式化无符号十六进制数
%X
格式化无符号十六进制数(大写)
%f
格式化浮点数字,可指定小数点后的精度
%e
用科学计数法格式化浮点数
%E
作用同 %e,用科学计数法格式化浮点数
%g
根据值的大小决定使用 %f 或 %e
%G
作用同 %g,根据值的大小决定使用 %f 或者 %E


格式化操作符辅助命令

符号
说明
m.n
m 是显示的最小总宽度,n 是小数点后的位数
-
用于左对齐
+
在正数前面显示加号(+)
#
在八进制数前面显示 '0o',在十六进制数前面显示 '0x' 或 '0X'
0
显示的数字前面填充 '0' 取代空格


Python 的转义字符及其含义

符号
说明
\'
单引号
\"
双引号
\a
发出系统响铃声
\b
退格符
\n
换行符
\t
横向制表符(TAB)
\v
纵向制表符
\r
回车符
\f
换页符
\o
八进制数代表的字符
\x
十六进制数代表的字符
\0
表示一个空字符
\\
反斜杠


 转义的入口必须是元祖或者字典
 
 
      序列!!  元祖 字符串 列表
list方法 把输入的转换成列表形式输出    b = 'i love laopo'   b = list(b)   此时B变为【‘i,‘l’’......'o'】   入口不仅限于字符串 元祖同样可以
tuple 吧一个可迭代对象转换为元祖
str 吧参数对象转化为字符串
max方法 返回参数或者集合中最大的值       均可输入字符串 列表 元祖   但是列表之中只能同一种数据类型 列表中全是字符或者整形
min方法返回最小值  字符按照ASCII码返回
sum函数 输入参数相加 只能对整形来说
sorted 从小到大排列  列表作为输入
reserved 倒序排列 生成一个迭代器 但可以使用list str 方法转换成想要的对象
enumerate  生成一个列表 并加上索引值【(0,1),(1,26).....】
 
bzip    

>>> b = [4,5,6,7,8,0]
>>> a = [1,2,3,4,5,6,0,9,9,9]
>>> zip(a,b)
<zip object at 0x000001C3EAB32088>
>>> list(zip(a,b))
[(1, 4), (2, 5), (3, 6), (4, 7), (5, 8), (6, 0)]
产生这养的结果

 

    python的函数

(1)

>>> def myfirstfunction():
print('hahah')
print("为什么啊")

>>> myfirstfunction
<function myfirstfunction at 0x000001C3EABC4288>
>>> myfirstfunction()
hahah
为什么啊

上述为定义函数 以及调用函数和输出结果

定义一个输入参数几个的函数def myfirstfunction(name,time)  之间用,隔开即可

(2)

def mysecondfunction()

  '这个是一个函数文档'      #字符串形式出现 但是是函数文档

#注视注释

print('lalalal')

在调用该函数时 mysecondfunction._doc_   是函数的默认属性 可以看到函数文档

help函数同样可以看到函数文档

(3)def say(name,words)

        print(name+words)

调用时 say(words='haha')  也可以 python可以按照关键字赋值 不依靠于索引    所以可以不按顺寻写

(4)

def test(*xiao)

在不知道要用几个参数时 *可以输入更过多的参数 只有一个xiao 但是可以输入好几个

test(xiao,hu,ni)   

如果还有别的参数 则用关键字定义   def test(*xiao,exp)   则调用test(1,2,3,6,exp=8)   

 

 (5)

返回值

>>> temo =hello()
hello world
>>> print(temp)
Traceback (most recent call last):
File "<pyshell#4>", line 1, in <module>
print(temp)
NameError: name 'temp' is not defined
>>> print(temo)
None
>>> def hello():
return [1,3,5,6]

>>> temp = hello()
>>>
>>> temp
[1, 3, 5, 6]

python 的返回值可以是列表 元祖等   默认的返回值是NONE

(6)

作用域   

定义的局部变量不能再全局变量里面是用 同C语言

定义的全局变量在局部变量中使用 则

def shaonian():
old = 50
print('当前值是:',old)

old = 100
shaonian()
print('当前值是2:',old)

返回为

当前值是: 50
当前值是2: 100

在局部中使用时 Python创建同名的一个局部变量在函数中 只不过是存放的位置不同   并不改变全局变量的值

(7)

内嵌函数和闭包

count = 6
def test():
global count
count = 666
print(count)

test()
print(count)

如果想要在函数中修改局部变量 则需要global关键字修饰即可

内嵌函数

def tset1():
print("hahaha")
def tset2():
print('lalala')
tset2()

tset1()
tset2()

内嵌的函数只能在定义的范围中作用  而不能再全局调用

闭包

def fun1():
x = 5
def fun():
x*=5
return x

在这种情况下 相当于定义在了fun1 的作用域中 直接调用的话fun中没有定义变量

需要用nonlocal关键字修饰即可

(8)lmbda表达式

def add(x,y):

retun x+y    

转化成lmbda表达式为 lmbda x,y : x+y     调用为 g=  lmbda x,y : x+y   g(3,4)

 (9)    递归的概念 递归好于迭代

def caonima(n):
if n == 1 :
return 1
else :
return n*caonima(n-1)
result = caonima(n)

本函数为递归函数  一遍一遍的执行本身几位递归   从底部往上执行递归

递归有深度 默认为100 有函数可以对其更改

递归与迭代的区别   例如兔子的斐波那契数列

def test_1(number) :
if number <=0 :
print("错误!!!")
if number == 1 or number ==2 :
return  1

esle: return test_1(n-1)+test_1(n-2) 

为斐波那契数列的递归算法   而迭代则要麻烦很多

(10)   字典    字典没有排序顺徐 有自己的排序方式

序列通过索引值访问 

当使用数组时 

print('字典')
brind = ["李宁",'NIKE','彪马']
slogan = ['666','333','007']
print('李宁是:',slogan[brind.index('彪马')])     会输出李宁是007    但此时使用效率不高   所以应当使用字典

字典的创建于访问     ----------------------------------------------  字典的创建  dict = {'索引'(空格):'键值' }  大括号 中间用冒号隔开   类似于映射的形式   索引 keys 键值 values   items为项  即1‘one’ 对应的索引      

 dict1 = {'李宁是':'007','彪马是':'001'}

print('李宁是:',dict1['彪马是'])           

此时的索引和键值可以为任意的数据类型   dict2 = {'1':'one','2':'two'}   访问只需要访问健 即可     print(‘1:’,‘dict2[2]’)   

检查健 in not in   判断健   查看是否在字典中

(11)   集合  集合里面的元素唯一   set 用()定义

list1 = [0,1,2,3,5,9,9,9,6,5]

若想要换成里面元素唯一   定义一个新列表list2  然后for 循环 notin

若用集合则 temp=list(set(list1))即可

forzenset  :  不能动的集合  即集合不能更改

(12)文件!!!!!!!!!!!!  Python 的 输入 输出

r' 以只读方式打开文件(默认)
'w' 以写入的方式打开文件,会覆盖已存在的文件
'x' 如果文件已经存在,使用此模式打开将引发异常
'a' 以写入模式打开,如果文件存在,则在末尾追加写入
'b' 以二进制模式打开文件
't' 以文本模式打开(默认)
'+' 可读写模式(可添加到其他模式中使用)
'U' 通用换行符支持


    
文件对象方法

文件对象方法 执行操作
f.close() 关闭文件
f.read([size=-1]) 从文件读取size个字符,当未给定size或给定负值的时候,读取剩余的所有字符,然后作为字符串返回
f.readline([size=-1]) 从文件中读取并返回一行(包括行结束符),如果有size有定义则返回size个字符
f.write(str) 将字符串str写入文件
f.writelines(seq) 向文件写入字符串序列seq,seq应该是一个返回字符串的可迭代对象
f.seek(offset, from) 在文件中移动文件指针,从from(0代表文件起始位置,1代表当前位置,2代表文件末尾)偏移offset个字节
f.tell() 返回当前在文件中的位置
f.truncate([size=file.tell()]) 截取文件到size个字节,默认是截取到文件指针当前位置

 

 上述表格摘自  小甲鱼!!!!   感谢鱼C工作室

注意::::   如果用read()方法不能打开文件 则用UTF-8打开  即  open('D:\\Guanghan.txt','r',encoding='UTF-8')

例子: 

>>> d = open('D:\\Guanghan.txt','r',encoding='UTF-8')
>>> d.read()
'小甲鱼 :啦啦啦\n小王八 : 哈哈哈\n小金鱼 :嘿嘿嘿\n小青蛙 :嘎嘎嘎\n'

>>> d.close()
>>> g=open('D:\\Guanghan.txt','r',encoding='UTF-8')
>>> g.read(5)
'小甲鱼 :'
>>> g.tell()
13
>>> g.reek(0,0)

>>> list(g)
[]
>>> g.seek(0,0)
0
>>> list(g)
['小甲鱼 :啦啦啦\n', '小王八 : 哈哈哈\n', '小金鱼 :嘿嘿嘿\n', '小青蛙 :嘎嘎嘎\n']

>>> for each_line in g :
print(each_line)


小王八 : 哈哈哈

小金鱼 :嘿嘿嘿

小青蛙 :嘎嘎嘎

>>> g.close()
>>> h = open("D:\\Guanghan.txt",'w',encoding='UTF-8')
>>> h.write('我爱你')
3
>>> h.close()

注意 !!!  当写进去时,会把TXT之前的文件替换掉

(13)训练一手   依托于小甲鱼论坛的题目  这里来说对初学者不太友好 可以百度一下

f = open('record.txt')


boy = []
girl = []

if each_line in f :

if each_line[:6] != '=====' :
(role,line_spoken) = each_line(':',1) #元组中式2个被分割的字符串

if role == '小甲鱼' :
boy.append(line_spoken)

if role == '小客服' :
girl.append(line_spoken)

else :
file_boy_name = 'boy'+str(count)+'.txt'
file_girl_name = 'girl'+str(count)+'.txt'

boy_file = open(file_boy_name,'w') #打开文件并写入
girl_file = open(file_giel_name,'w')

boy_file.writelines(boy) #方法中有
girl_file.writelines(girl)

boy_file.colse()
girl_file.close()

boy = []
girl = []
count+=1


f.colse()

 

(14)模块  想学爬虫的这里比较重要 ~~~~~

import 模块名即可 调用模块

1.   OS模块  因为Python是跨平台语音 不同的系统的底层不同 所以当我调用OS模块时 他会自己调用正确的系统  直接使用即可  下面学习一下OS模块的内置函数

   

os模块中关于文件/目录常用的函数使用方法


函数名
使用方法
getcwd() 返回当前工作目录
chdir(path) 改变工作目录
listdir(path='.') 列举指定目录中的文件名('.'表示当前目录,'..'表示上一级目录)
mkdir(path) 创建单层目录,如该目录已存在抛出异常
makedirs(path) 递归创建多层目录,如该目录已存在抛出异常,注意:'E:\\a\\b'和'E:\\a\\c'并不会冲突
remove(path) 删除文件
rmdir(path) 删除单层目录,如该目录非空则抛出异常
removedirs(path) 递归删除目录,从子目录到父目录逐层尝试删除,遇到目录非空则抛出异常
rename(old, new) 将文件old重命名为new
system(command) 运行系统的shell命令
walk(top) 遍历top路径以下所有的子目录,返回一个三元组:(路径, [包含目录], [包含文件])【具体实现方案请看:第30讲课后作业^_^】
以下是支持路径操作中常用到的一些定义,支持所有平台
os.curdir 指代当前目录('.')
os.pardir 指代上一级目录('..')
os.sep 输出操作系统特定的路径分隔符(Win下为'\\',Linux下为'/')
os.linesep 当前平台使用的行终止符(Win下为'\r\n',Linux下为'\n')
os.name 指代当前使用的操作系统(包括:'posix',  'nt', 'mac', 'os2', 'ce', 'java')



os.path模块中关于路径常用的函数使用方法


函数名
使用方法
basename(path) 去掉目录路径,单独返回文件名
dirname(path) 去掉文件名,单独返回目录路径
join(path1[, path2[, ...]]) 将path1, path2各部分组合成一个路径名
split(path) 分割文件名与路径,返回(f_path, f_name)元组。如果完全使用目录,它也会将最后一个目录作为文件名分离,且不会判断文件或者目录是否存在
splitext(path) 分离文件名与扩展名,返回(f_name, f_extension)元组
getsize(file) 返回指定文件的尺寸,单位是字节
getatime(file) 返回指定文件最近的访问时间(浮点型秒数,可用time模块的gmtime()或localtime()函数换算)
getctime(file) 返回指定文件的创建时间(浮点型秒数,可用time模块的gmtime()或localtime()函数换算)
getmtime(file) 返回指定文件最新的修改时间(浮点型秒数,可用time模块的gmtime()或localtime()函数换算)
以下为函数返回 True 或 False
exists(path) 判断指定路径(目录或文件)是否存在
isabs(path) 判断指定路径是否为绝对路径
isdir(path) 判断指定路径是否存在且是一个目录
isfile(path) 判断指定路径是否存在且是一个文件
islink(path) 判断指定路径是否存在且是一个符号链接
ismount(path) 判断指定路径是否存在且是一个挂载点
samefile(path1, paht2) 判断path1和path2两个路径是否指向同一个文件


 转自  小甲鱼 鱼C论坛
 
(15)Amazing!!   转化为二进制字节流的  pickle 模块
  如果出现 EOFError: Ran out of input  错误  则是因为读取的文件为空而出现
dump  把我当前变量存到目标文件中   以二进制的文件形式保存
load  读取文件中的二进制数 并显示

>>> my_list3 = [1,2,'真的是为社么',['啦啦啦']]
>>> pickle_file = open('my_list.pkl','wb')
>>> pickle.dump(my_list3,pickle_file)
>>> pickle_file.close()
>>> pickle_file = open('my_list.pkl','rb')
>>> Y_list2 = pickle.load(pickle_file)
>>> print(Y_list2)
[1, 2, '真的是为社么', ['啦啦啦']]

 

(16) 标准异常及处理方式

 

AssertionError 断言语句(assert)失败
AttributeError 尝试访问未知的对象属性
EOFError 用户输入文件末尾标志EOF(Ctrl+d)
FloatingPointError 浮点计算错误
GeneratorExit generator.close()方法被调用的时候
ImportError 导入模块失败的时候
IndexError 索引超出序列的范围
KeyError 字典中查找一个不存在的关键字
KeyboardInterrupt 用户输入中断键(Ctrl+c)
MemoryError 内存溢出(可通过删除对象释放内存)
NameError 尝试访问一个不存在的变量
NotImplementedError 尚未实现的方法
OSError 操作系统产生的异常(例如打开一个不存在的文件)
OverflowError 数值运算超出最大限制
ReferenceError 弱引用(weak reference)试图访问一个已经被垃圾回收机制回收了的对象
RuntimeError 一般的运行时错误
StopIteration 迭代器没有更多的值
SyntaxError Python的语法错误
IndentationError 缩进错误
TabError Tab和空格混合使用
SystemError Python编译器系统错误
SystemExit Python编译器进程被关闭
TypeError 不同类型间的无效操作
UnboundLocalError 访问一个未初始化的本地变量(NameError的子类)
UnicodeError Unicode相关的错误(ValueError的子类)
UnicodeEncodeError Unicode编码时的错误(UnicodeError的子类)
UnicodeDecodeError Unicode解码时的错误(UnicodeError的子类)
UnicodeTranslateError Unicode转换时的错误(UnicodeError的子类)
ValueError 传入无效的参数
ZeroDivisionError 除数为零



以下是 Python 内置异常类的层次结构:

BaseException
+-- SystemExit
+-- KeyboardInterrupt
+-- GeneratorExit
+-- Exception
      +-- StopIteration
      +-- ArithmeticError
      |    +-- FloatingPointError
      |    +-- OverflowError
      |    +-- ZeroDivisionError
      +-- AssertionError
      +-- AttributeError
      +-- BufferError
      +-- EOFError
      +-- ImportError
      +-- LookupError
      |    +-- IndexError
      |    +-- KeyError
      +-- MemoryError
      +-- NameError
      |    +-- UnboundLocalError
      +-- OSError
      |    +-- BlockingIOError
      |    +-- ChildProcessError
      |    +-- ConnectionError
      |    |    +-- BrokenPipeError
      |    |    +-- ConnectionAbortedError
      |    |    +-- ConnectionRefusedError
      |    |    +-- ConnectionResetError
      |    +-- FileExistsError
      |    +-- FileNotFoundError
      |    +-- InterruptedError
      |    +-- IsADirectoryError
      |    +-- NotADirectoryError
      |    +-- PermissionError
      |    +-- ProcessLookupError
      |    +-- TimeoutError
      +-- ReferenceError
      +-- RuntimeError
      |    +-- NotImplementedError
      +-- SyntaxError
      |    +-- IndentationError
      |         +-- TabError
      +-- SystemError
      +-- TypeError
      +-- ValueError
      |    +-- UnicodeError
      |         +-- UnicodeDecodeError
      |         +-- UnicodeEncodeError
      |         +-- UnicodeTranslateError
      +-- Warning
           +-- DeprecationWarning
           +-- PendingDeprecationWarning
           +-- RuntimeWarning
           +-- SyntaxWarning
           +-- UserWarning
           +-- FutureWarning
           +-- ImportWarning
           +-- UnicodeWarning
           +-- BytesWarning
           +-- ResourceWarning

 转自小甲鱼论坛  异常总结部分

(17)检测异常的方法 try语句

try : 

      检测范围

expect ecpection as reason:

     出现异常

finally:

    肯定会执行的语句

例子 

try :
f = open ('为什么我没有一个文件','wb')
print(f.write('我存在了'))
sum = '1'+ 1
f.close()
except (OSError,TypeError) :       或者 expect OSerror as reson    :     expect IOerror  as reson  :     这里用于多级判断  也可以使用括号

print('啊啦啦啦')

finally :

f.close()

当检测的一个错误时,剩下的try部分会不再执行 ,所以可能剩下的部分代码会保存不到  所以finally用于肯定执行的操作

else 语句同样可以和 try语句一起使用

with 语句    f = open ('alla.txt')     最后肯定要f.close()

当使用with时   with f= open('lalal.txt')    wuth自己会关注这个文件  当不再使用他时  with会自己关闭这个文件

(18)  图形编程  GUI

 嵌入式无所畏惧

(19) 对象     封装 继承 多态

封装 :     def 函数的封装等

继承  :  list1 = [0,1,2,3]    list是个列表 此时可以调用list 的很多方法 实质上list也是一个对象 继承了list 的这个类

              首先介绍类和对象    class Template :                   #类的名字的第一个必须为大写字母

                                                        test1 = '肤白'              #属性

                                                        test2 = '貌美'

                                                        test3 = '大长腿'

                                                        test4 = 2

                                                        def example1 (self):      #方法  

                                                                print('我爱')

                                                        def example2 (self):    

                                                                print('我爱你')              

之后 tt = Template()     调用tt.example1()    则显示为我爱

用类定义一个列表 定义好类的好处是可以批量生产

                                   class  Template1 (list)  :

                                                pass    #意思为空

test2 = Template1()     实例化之后继承list这个类  则此时list2相当于list类的一个对象  同时可以电泳list的内置函数       这称为继承  list为父类 list2为子类

若同时test3 = Template1()      test4 = Template1()    test3.xx=''   test4.xx = ''     此时两个不同的对象均会输出同一个值 这个称为多态

 

   关于Python中 %s及%的用法有 https://www.cnblogs.com/wh-ff-ly520/p/9390855.html   参考这个博客即可这里不再赘述

class Ball:
def setName(self,name) :
self.name = name
def kick(self) :  print('我是%s,不要打我' %self.name)

实例化的时候 a = Ball()   a.setName('球A')     a.kick()  输出为我是球A不要打我  这里的self 是把a这个元素作用到()中 由ython完成 就是说self有了  我们在类的定义时 self写进第一个参数 这个时默认要求

 

在创建实例化的时候 会自动调用 __init()__(self)方法   可以通过写入参数,改变对象的初始化操作 举个例子和上面做杜比

class Balll():
def __init__(self,name) :
self.name = name
def kick(self) :
print('我是%s,该死的,不要踢我'%self.name)

通过更改这个__init()__()的方法,达到改变初始化的目的 

调用方式为 a = Balll('球A')  再调用kick方法时 a.kick()  此时直接输出结果

 

 

公有和私有

公有的属性可以通过。去访问    私有及属性前面加上2个下划线

>> class BUG :
name = '小狐狸'


>>> a = BUG()
>>> a.name
'小狐狸'
>>> class BUG :
__name = '打狐狸'


>>> b = BUG()
>>> b.__name()  这样就不可以进行对属性的访问

或者在内部返回属性的值   即为

class BUG:
__name = '小狐狸'
def setName(self) :
return self.__name


>>> c = BUG()
>>> c.setName()
'小狐狸'
 其实 Python在对变量私有化的情况下 是对属性进行了   _类名__属性名  的操作 也可以通过 c._BUG__name 去访问

 

继承

定义 class 类名(父类名)

>>> class Ha(Heng) :
print('ahhaha')


ahhaha
>>> class Heng :
def hello(self) :
print('哈哈哈')


>>> class Ha(Heng) :
pass

>>> p = Heng()
>>> p.hello()
哈哈哈
>>> c = Ha()
>>> c.hello()
哈哈哈

继承Heng这个父类 此时Ha为子类

如过子类中存在和父类相同的方法 子类调用时会覆盖掉父类的方法   但不会影响父类本身

如 

class Ha(Heng) :
def hello(self):
print('我是岁月')


>>> c = Ha()
>>> c.hello()
我是岁月

多继承在这里不再赘述

 

拾遗

                             类定义

                            类对象

                         实例对象

 关系为从下至上 如果上面定义改变 已更改的实例对象不会受到影响 但是未更改的实例对象及类对象会受到影响 类对象是 直接操作定义下的对象

 

与对象和类相关的库函数 这里不再赘述

 

构造与析构

__init()__方法在前面已经介绍过 这里不再赘述

其实Python在定义一个新的类的时候,第一个调用的并不是__init()__方法 而是new方法   

new方法是new一个类 最后的返回是一个实例化的对象

例如我要把一个字符串输入后就返回大写 则

class Caps (str):
def __new__(cla,string) :
string = string.upper()
return str.__new__(cla,string)


>>> b = Caps('I love LIjian')
>>> b
'I LOVE LIJIAN'

__del__()  方法 内部自己完成

 

 

 

 

 

 

                                                                 

                                     

                                                       

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 
 
 
 
 
 
 
 

 

 

 

 

 

 

 

 

 

 

  

 

posted @ 2020-04-02 16:16  QianruS  阅读(354)  评论(0编辑  收藏  举报