python 知识点总结

第一张

1)变量
内存空间的表达式
命名要遵守规则
赋值使用 = 
2)类型转换
str()将其他类型转成字符窜
int() 将其他类型转成整数
float()将其他类型转成浮点数
3)数据类型
整数类型 int
浮点数类型 float
布尔类型 True/False
字符窜类型 str
4)注释
单行注释 #
多行注释 ''' 或者 """
中文编码声明 #coding:utf-8

第二章

1)程序的三种组织结构
顺序结构
选择结构
循环结构
2)选择结构
单分支结构
双分支结构
多分支结构
嵌套if
条件表达式
3)对象布尔值
False
	False
	数值0
	None
	空字符窜
	空列表、空元祖、空字典、空集合
True

第三章

1)内置函数range
	生成整数数列 
	起始值默认为0
	步长默认为1
2)循环结构
	while	
		用于次数不固定的循环
		初始条件不成立一次都不执行
	for-in
		用于遍历可迭代对象

3)break continue else
	break
		退出当前循环结构
	continue
		结束当前循环进入下一次循环
	else
		if..else
		while..else
		for..else
4)嵌套循环
	外层循环执行一次内层循环执行完整一轮
	while与for-in 互相嵌套

示例:
#乘法口诀表
for i in range(1,10):
    for j in range(1,i+1):
        print(i,'*',j,'=',i*j,end='\t')
    print()

#while 循环 1-100 偶数和
sum=0
a=1
while a<=100:
    if a%2==0:
        sum+=a
    a+=1
print(sum)

#for 循环1-100偶数和
zong=0
for i in range(1,101):
    if i%2==0:
        zong+=i
print(zong)    

第四章

1)列表
	创建
		使用中括号
		内置函数list()
		列表生成式
	查询
		查询元素索引
		获取单个元素
		获取多个元素
		in/not in
	增删改
		增
			append()
			extend()
			insert()
			切片
		删
			remove()
			pop()
			clear()
			del
			切片
		改
			索引
			切片
	排序
		方法sort()
		内置函数sorted()

  2)字典
  	字典的创建
  		使用{}花括号
  		内置函数dict()
  		字典生成式
  	常用操作
  		获取value
  			字典名[key]
  			字典名.get(key)
  		删除key-value对
  			del 字典名[key]
  		修改/新增
  			字典名[key]=value
  		in/not in 

3)元祖
	创建元组
		使用()小括号
		内置函数tuple()
	元组的遍历
		for--in
	不可变序列

4)集合
	创建集合
		使用{}花括号
		内置函数set()
		集合生成式
	集合的遍历
		for--in
	新增
		add()
		update()
	删除
		remove()
		discard()
		pop()
		clear()		
	可变序列


5)
 数控结构     是否可变  是否重复       是否有序  定义符号
 列表(list)   可变      可重复          有序     []
 元组(tuple)  不可变    可重复          有序     ()
 字典(dict)   可变      key 不可重复    无序     {key:value}
                       value 可重复
 集合(set)    可变      不可重复        无序     {}

第五章

字符窜
	字符窜的驻留
		驻留的几种情况
		驻留的优点
		强制驻留的方法
	常用方法
		查询的方法
			index(),rindex()
			find(),rfind()
		大小写转换
			upper(),lower()
		内容对其
			center()
		字符窜的劈分
			split()
		字符窜判断
			isdecimal()
		字符窜的替换
			replace()
		字符窜的合并
			join()
		字符窜的比较
			>,<,>=,<=,==,!=
		字符窜编码
			%,format()

第六章

函数:

函数的定义与调用
	函数使用def 定义
	函数定义的形参
		* 定义个数可变的位置形参
		** 定义个数可变的关键字形参
		定义默认值参数
	函数调用的实参
		位置实参
		关键字实参
	函数可以多返回值

变量的作用域
	局部变量
	全局变量
递归函数
	函数本身调用本身
	递归的组成部分
		调用条件
		终止条件	

 重要知识点示例:
1)个数可变的位置参数
结果为一个元祖
 def fun(*args):
    print(args)
fun(1,2)
fun(1,2,3,4,5)

结果:
(1, 2)
(1,2,3,4,5)

2)个数可变的关键字形参
结果为一个字典

def fun1(**args):
    print(args)
fun1(a=10)
fun1(a=10,b=20,c=30)
结果:
{'a': 10}
{'a': 10, 'b': 20, 'c': 30}

3)在一个函数定义过程中,既有个数可变的关键字形参,也有个数可变的位置形参,要求,个数可变的位置形参,放在个数可变的关键字形参之前。   
def fun1(*args1,**args2):
    print(args1,args2)

fun1(1,2,3,a=10,b=20,c=30)

(1, 2, 3) {'a': 10, 'b': 20, 'c': 30}

4)函数内部定义的变量,局部变量,局部变量使用global声明,这个变量实际上就变成了全局变量
def func5():
    global age
    age=20
    print(age)

func5()
print(age)

第七章

Bug常见类型
	粗心导致的语法错误
		自查宝典
	知识点不熟悉
		连练练
	思路不清
		print()语句
		使用 # 注释
	被动掉坑
		try...except
异常处理机制
	try...except
	try...except...except
	try...except...else
	try...except...else...finally
	traceback模块打印异常信息


1)try except 处理示例:
try:
    a = int(input('请输入第一个整数')) #可能出现异常的代码
    b = int(input('请输入第二个整数'))
    result = a / b
except BaseException as e: #将异常起了一个别名为 e
    print('出错了',e)
else: #else 与 except 二者执行其中一个,如果遇到异常则执行异常,如果是正常就执行else内容
    print('计算结果为:',result)
finally:    #无论是否异常,总会被执行的代码
    print('感谢使用')

请输入第一个整数:a
出错了 invalid literal for int() with base 10: 'a'
感谢使用


第二种情况,输入正常,则执行else 内容
请输入第一个整数:10
请输入第二个整数:2
计算结果为: 5.0
感谢使用

第八章

编程思想
	面向过程:具体
	面向对象:宏观
类对象
	类属性
	类方法
	实例方法
	静态方法
实例对象
	类名(),创建实例对象c
	动态绑定属性
	动态绑定方法

类对象拥有:
类
id
type
valuve

1)
类的组成
	类属性:直接写在类里面方法之外的变量,称为类属性,访问类属性,print(Student.native_place)
	实例方法:在类之外定义的称为函数,在类之内定义的称为方法 ,必须创建类的对象才能调用该方法,stu1=Student('张三',20)  stu1.eat() 即对象名.eat()调用
	类方法:@classmethod ,使用类名直接访问的方法, print(Student.cm())
	静态方法:@staticmethod,使用类名直接访问的方法,print(Student.sm())

注意:
	一个Student 类可以创建N多个Student类的实例对象,每个实体对象的属性值不同(即实例属性不同)

示例:
class Student: #Student 为类的名称(类名)由一个或多个单词组成,每个单词的首字母大写,其余小写
    native_pace='邯郸' #直接写在类里面的变量,称为类属性

    def __init__(self,name,age): #初始化方法
        self.name=name #self.name 称为实例属性,进行了一个赋值的操作,将局部变量的name 的值赋给实例属性
        self.age=age

    #实例方法,在类之内定义的称为方法必须有self
    def eat(self):
        print('学生在吃饭')

    #静态方法
    @staticmethod
    def method():
        print('我使用了staticmethod 进行修饰,所以我是静态方法')

    #类方法,必须有 cls
    @classmethod
    def cm(cls):
        print('我是类方法,因为我使用了 classmethod 进行修饰')

#在类之外定义的称为函数,在类之内定义的称为方法
def drink():
    print('喝水')

#创建Student 类的对象,即类的对象的创建又称为类的实例化
stu1=Student('张三',20)
stu1.eat()

#调用实例属性
print(stu1.age)
print(stu1.name)

print('xxxxxxxxxxxxxxxxxxxxxx')
Student.eat(stu1)  #stu1.eat() 与Student.eat(stu1)  功能相同,都是调用Student 中的eat 方法;
                   #类名.方法名(类的对象) --> 类的对象实际上就是方法定义处的 self

#
即类的对象的创建又称为类的实例化

2)动态绑定实例属性,必须在创建实例对象之后进行绑定
stu5=Student('倩倩',18)
stu6=Student('果果',19)
stu6.gender='女'
print(stu5.name,stu5.age)
print(stu6.name,stu6.age,stu6.gender)

3)动态绑定实例方法,必须在创建实例对象之后进行绑定,当绑定在实例对象之后就叫做方法了
def show():
    print('定义在类之外的,称为函数')
stu5.show=show
stu5.show()

第九章

面向对象的三大特征
	封装
	继承
		多继承
		方法重写
	多态
		动态语言
			关注对象的行为
		静态语言
			继承
			方法重写
			父类引用指向子类对象
object
	所有类的父类
	__new__()创建对象
	__init__()初始化对象
	__str__()对象的描述


1.封装
2.继承
3.方法重写
4.object 类
5.多态
6.特殊方法和特殊属性

1)封装
将实例属性和实例方法包装到类对象中,在方法内部对属性进行操作,在类对象的外部调用
class Car:
    def __init__(self,brand):
        self.brand=brand
    def Start(self):
        print(self.brand,'is start')

car=Car('宋Pro')
car.Start()
print(car.brand)
结果:
宋Pro is start
宋Pro

#不希望在外部被直接调用实例属性
class Student:
    def __init__(self,name,age):
        self.name=name
        self.__age=age

    def show(self):
        print(self.name,self.__age)

stu1=Student('李明',20) 
stu1.show()
print('----------------------------------------------')
print(stu1.name)
# print(dir(stu1))
print(stu1._Student__age) #可以在外部直接调用变量
# print(stu1.__age)


李明 20
----------------------------------------------
李明
20


1.1)封装-私有属性与私有方法,不希望外部直接调用使用,而是用于内部调用使用

class Phone(object):
    __current_voltage = 0
    def __keep_single_core(self):
        print("让CPU 以单核模式运行")
    def call_by_5g(self):
        if self.__current_voltage >= 1:
            print("5g通话已开启")
        else:
            self.__keep_single_core()
            print("电量不足,开启单核模式运行了")

phone = Phone()
phone.call_by_5g()

#输出结果
让CPU 以单核模式运行
电量不足,开启单核模式运行了

2)继承与多继承
默认继承 object类

class Person(object): #Person 继承object 类,不写默认是object
    def __init__(self,name,age):
        self.name=name
        self.age=age
    def info(self):
        print(self.name,self.age)

class Student(Person): #继承Person类
    def __init__(self,name,age,stu_nomber): #自身初始化函数,其中name,age必须与父类相同,stu_nomber 是自身独有的属性
        super().__init__(name,age) #继承父类 Person
        self.stu_nomber=stu_nomber 

class Teacher(Person):
    def __init__(self,name,age,teachofyer):
        super().__init__(name,age)
        self.teachofyer=teachofyer

stu1=Student('zhangsan',21,10001)
teacher1=Teacher('lisi',32,13)

stu1.info()
teacher1.info()

结果:
zhangsan 21
lisi 32

3)方法重写
如果子类对继承自父类的某个属性或方法不满意,可以在子类中对其(方法体)进行重新编写
子类重写后的方法中可以通过super().xxx()调用父类中被重写的方法,例如super().info() 
    def info(self):  #info 方法重写
        super().info() #调用父类方法
        print(self.teachofyer)


示例如下:
class Person(object): #Person 继承object 类,不写默认是object
    def __init__(self,name,age):
        self.name=name
        self.age=age
    def info(self):
        print(self.name,self.age)

class Student(Person): #继承Person类
    def __init__(self,name,age,stu_nomber): #自身初始化函数,其中name,age必须与父类相同,stu_nomber 是自身独有的属性
        super().__init__(name,age) #继承父类 Person
        self.stu_nomber=stu_nomber
    def info(self): #info 方法重写
        super().info()  #调用父类方法
        print(self.stu_nomber)

class Teacher(Person):
    def __init__(self,name,age,teachofyer):
        super().__init__(name,age)
        self.teachofyer=teachofyer
    def info(self):  #info 方法重写
        super().info() #调用父类方法
        print(self.teachofyer)

stu1=Student('zhangsan',21,10001)
teacher1=Teacher('lisi',32,13)

stu1.info()
print('---------------------------------')
teacher1.info()

结果:
zhangsan 21
10001
---------------------------------
lisi 32
13


#方法重写示例2:
class Car(object): #定义的类名,默认继承object 类
    def __init__(self,type,number): #类初始化方法,包含self.自身的属性
        self.type=type #类实例属性
        self.number=number
    def start(self): #类方法
        print('我是父类---Start----------------')
    def stop(self): #类方法
        print('我是父类---Stop---------------')

class TaxiCar(Car):  #继承Car 类
    def __init__(self,type,number,company): #类实例的初始化方法,新增加 company 属性
        super().__init__(type,number) #调用父类方法,就是免去了前面两个类实例属性的赋值
        self.company=company #新类实例的属性赋值
    def start(self): #类方法进行重写
        super().start() #类方法调用父类,先输出父类内容
        print('我是%s的,我的车牌号码是 %s,您要去哪里?' %(self.company,self.number)) #方法重写内容
    def stop(self): #类方法进行重写
        print('目的地到了,请您付费下车,欢迎再次乘坐') #直接重写,不调用父类


if __name__ == '__main__':
    taxicar=TaxiCar('上汽大众','京A88888','长城出租车公司')  #给类传参
    taxicar.start()
    taxicar.stop()


输出内容:
我是父类---Start----------------
我是长城出租车公司的,我的车牌号码是 京A88888,您要去哪里?
目的地到了,请您付费下车,欢迎再次乘坐


第十章

模块与包
模块
	避免函数名/变量名重名
	自定义模块
		一个.py文件称为一个模块
	第三方模块
		安装:pip install 模块名
		使用:from ..import 模块名
包
	避免模块名重名
	包含__init__.py 文件

第十一章

编码格式
	内存为unicode
	.py文件为utf-8
文件操作
	写
		writelines()
		write()
	读
		read()
		readline()
		readlines()
	打开模式
		只读r
		只写w
		追加a
		二进制是b
目录操作
	os模块
	os.path



读写模式
	1)文件读 r,文件指针在文件的开头
	file=open('a.txt','r',encoding='utf-8')
	print(file.readlines()) #readlines 输出是列表
	file.close()

	结果:
	['中国\n', '美丽']


	2)文件写 w   以只写模式打开文件,如果文件不存在则创建,如果文件存在,则覆盖原有内容,文件指针在文件的开头
	file=open('b.txt','w',encoding='utf-8')
	file.write('Python22')
	file.close()

	3)文件追加 a ,以追加模式打开文件,如果文件不存在则创建,文件指针在文件开头,如果文件存在,则在文件末尾追加内容,文件指针在文件末尾
	file=open('b.txt','a',encoding='utf-8')
	file.write('Python33')
	file.close()

	b.txt 结果:
	Python22Python33Python33

	4)以二进制方式打开文件,不能单独使用,需要与其他模式一起使用,rb,或者 wb
	src_file=open('liang.jpg','rb')
	target_file=open('copyliang.jpg','wb')

	target_file.write(src_file.read())

	target_file.close()
	src_file.close()

	5)以读写方式打开文件,不能单独使用,需要与其他模式一起使用,a+

文件对象的常用方法
	1)read([size]) 从文件中读取size 个字节或字符的内容返回,若省略[size],则读取到文件末尾,即一次读取文件所有内容
	file=open('a.txt','r',encoding='utf-8')
	print(file.read())
	file.close()

	结果:
	中国
	美丽

	file=open('a.txt','r',encoding='utf-8')
	print(file.read(2))
	file.close()
	结果:
	中国

	2)readline(),从文本文件中读取一行内容
	file=open('a.txt','r',encoding='utf-8')
	print(file.readline())
	file.close()
	结果:
	中国
	3)readlines(),把文本文件中每一行都作为独立的字符串对象,并将这些对象放入列表返回
	file=open('a.txt','r',encoding='utf-8')
	print(file.readlines())
	file.close()

	结果:
	['中国\n', '美丽']
	
	4)write(str) 将字符串str 内容写入文件
	file=open('c.txt','a',encoding='utf-8')
	file.write('hello')
	file.close()

	c.txt 结果:
	hello

	5)writelines(s_list) 将字符串列表 s_list 写入文本文件,不添加换行符
	file=open('c.txt','a',encoding='utf-8')
	lst=['a','b','c']
	file.writelines(lst)
	file.close()

	c.txt 结果:
	helloabc

	6)seek(offset[,whence]) 把文件指针移动到新的位置,offset 表示相对于whence 的位置:
	  offset:为正往结束方向移动,为负往开始方向移动
	  whence 不同的值代表不同含义:
	  0:从文件头开始计算(默认值)
	  1:从当前位置开始计算
	  2:从文件末尾开始计算

	  注释:一个中文两个字节
	a.txt内容:
	pythongojava


	file=open('a.txt','r',encoding='utf-8')
	file.seek(2)
	print(file.read())
	print(file.tell())
	file.close()

	结果:
	thongojava
	12

	7)tell() 返回文件指针的当前位置
	print(file.tell())
	8)flush()把缓冲区的内容写入文件,但不关闭文件

	9)close() 把缓冲区的内容写入文件,同时关闭文件,释放文件对象相关资源

	file=open('d.txt','a',encoding='utf-8')
	file.write('hello')
	file.flush()
	file.write('world')
	file.close()

	d.txt结果: 
	helloworld

	如果将flush与 close 调换位置,则报错:
	file=open('e.txt','a',encoding='utf-8')

	file.write('hello')
	file.close()

	file.write('world')
	file.flush()

	报错:
	ValueError: I/O operation on closed file.




with 语句(上下文管理器)
- with 语句可以自动管理上下文资源,不论什么原因跳出with 块,都能确保文件正确的关闭,一次来打到释放资源的目的
	with open('liang.jpg','rb') as src_file:
	    with open('liangliang.jpg','wb') as target_file:
	        target_file.write(src_file.read())


	旧代码:
	src_file=open('liang.jpg','rb')
	target_file=open('copyliang.jpg','wb')

	target_file.write(src_file.read())

	target_file.close()
	src_file.close()



OS 模块操作目录相关函数

os.system('calc.exe') 调用系统计算机
getcmd() 返回当前的工作目录  
listdir(path) 返回指定路径下的文件和目录信息 print(os.listdir('../0330'))
mkdir(path,[,mode]) 创建目录 os.mkdir('aaa')
makedirs(path1/path2/...[,mode])创建多级目录  os.makedirs('A/b/C')
rmdir(path)删除目录  os.rmdir('aaa')
removedirs(path1/path2.....) 删除多级目录  os.removedirs('A/b/C')
chdir(path) 将path 设置为当前工作目录 

OS.path 模块操作目录相关函数
obspath(path)  用于获取文件或目录的绝对路径
exists(path) 用于判断文件或目录是否存在,如果存在返回True,否则返回False
join(path,name) 将目录与目录或者文件名拼接起来
splitext() 分离文件名和扩展名
basename(path) 从一个目录中提取文件名
dirname(path) 从一个路径中提取文件路径,不包括文件名
isdir(path) 用于判断是否为路径
import os.path
print(os.path.abspath('demon10.py'))
print(os.path.exists('demon04.py'),os.path.exists('demon044.py'))
print(os.path.join('E:\\Python','demon10.py'))
print(os.path.split('E:\\Django\\python\\a.py'))
print(os.path.splitext('demon10.py'))
print(os.path.basename('E:\\Django\\python\\a.py'))
print(os.path.dirname('E:\\Django\\python\\a.py'))

示例:
1.#获取指定目录下的所有 py 文件
import os
path=os.getcwd()
lst=os.listdir(path)

for file in lst:
    if file.endswith('.py'): #获取以 .py 结尾的文件
        print(file)


2.循环遍历嵌套目录下所有文件
import os
path=os.getcwd()
lst_files=os.walk(path)
for mydirpath,mydirname,myfilename in lst_files:
    # print(mydirpath)
    # print(mydirname)
    # print(myfilename)
    # for dir in mydirname:
    #     print(os.path.join(mydirpath,dir))

    for file in myfilename:
        print(os.path.join(mydirpath,file))
    print('------------------------------------')


日常问题处理

重点关注:
一、列表、字符串、文本文件存入修改操作
1) 列表中存放字典,列表可以直接append 添加字典内容,student_list列表中的每一项都是字典
student_list=[]
student={'id':id,'name':name,'english':english,'python':python,'java':java}
student_list.append(student)
结果如下:[{'id': '1010', 'name': 'jh', 'english': 21, 'python': 21, 'java': 23}, {'id': '1011', 'name': 'jk', 'english': 23, 'python': 43, 'java': 223}]

2) 文本txt 文件存放列表中的字典内容,需要先将列表中的每一个字典转换为字符串存放,否则会报错: TypeError: write() argument must be str, not dict,如下:
stu_txt=open(filename,'a',encoding='utf-8')
for item in student_list:
	stu_txt.write(str(item)+'\n') 
stu_txt.close()


3) 删除文本中的某一行,student_old 列表中的每一项字典都是字符串类型,操作需要将字符串类型转化为字典
student_id=input('请输入要删除的学生id:')
with open(filename,'r',encoding='utf-8') as file:
student_old=file.readlines()


student_old 列表内容如下,可以查看到文本里面存放的是字符串类型
["{'id': '1003', 'name': 'kubn', 'english': 123, 'python': 45, 'java': 67}\n", "{'id': '1004', 'name': 'bhs', 'english': 3, 'python': 4, 'java': 6}\n"]

d={}
with open(filename,'w',encoding='utf-8') as wfile:
  for item in student_old:
	d=dict(eval(item)) #将字符串转换为字典
	if d['id']!=student_id:
		wfile.write(str(d)+'\n') #存放时候再将字典转换为字符串进行存放



二、格式化输出
                #定义标题显示格式
                format_title='{:^6}\t{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:^8}\t'
                print(format_title.format('ID','姓名','英语成绩','Python 成绩','Java成绩','总成绩'))
                #定义内容的显示格式
                format_data='{:^6}\t{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:^8}\t'
                for item in student_new:
                    print(format_data.format(item.get('id'),
                                            item.get('name'),
                                            item.get('english'),
                                            item.get('python'),
                                            item.get('java'),
                                            item.get('总成绩')
                                             ))

输出结果:
  ID  	     姓名     	  英语成绩  	Python 成绩 	  Java成绩  	  总成绩   	
 101  	    xin     	   21   	    22    	    23    	   66  


三、匿名函数用作数据排序展示,(reverse=True 降序,reverse=False 升序)
student_new=[{'id': '103', 'name': 'ki', 'english': 11, 'python': 11, 'java': 11, '总成绩': 33}, {'id': '101', 'name': 'xin', 'english': 21, 'python': 22, 'java': 23, '总成绩': 66}]
student_new.sort(key=lambda x: int(x['java']), reverse=True)



posted @ 2022-03-31 16:47  lixinliang  阅读(279)  评论(0编辑  收藏  举报