前言
快考试了,写来复习用,如果对大家有帮助更好。
一、Python基础知识
1.基本数据类型
整数类型(int):分为正整数、0、负整数
浮点数类型(float):就是包含小数点的数
复数类型(complex):实部+虚部 j
布尔类型(bool):True和False
字符串类型(str)
列表(list):用方括号括起来,中间用逗号分开
元组(tuple):用圆括号括起来,中间用逗号分开
字典(dict):用大括号括起来,键和值用冒号分开,元素之间用逗号分开
集合(set):元素由不可变数据类型组成,且不重复
二、 控制语句
1.pass语句的作用
pass是一个空语句,不做任何事情,一般只做占用位语句,是为了保持程序结构的完整性。
a = 5
if a == 5:
pass # 没想好
else:
print('ok')
三、 常用数据结构
1. 数据类型与数据结构
基本数据类型是构建数据结构的基础,而数据结构提供了更高级的数据组织和操作方式,以满足不同的编程需要。
python中常见的数据结构有:
序列:如字符串、列表、元组
映射:如字典
集合(set)
以上三种是主要的三类容器
2.序列
2.1 列表的创建与访问
# 方法一
a = [1, 2, 3, 4]
# 方法二:常用来将其他序列转换为列表
a = list() #创建了一个空列表,等价于 a = []
# 从左往右访问,第一个元素的序号是0
a = ['train', 'bus', 'car', 'ship']
print(a[0])
# 输出:train
# 从右往左访问,第一个元素的序号是-1
a = ['train', 'bus', 'car', 'ship']
print(a[-1])
# 输出:ship
2.2 元组的创建与访问
# 方法一
a = (1, 2, 3, 4)
a = ('bike',)
# 方法二:常用来将其他序列转换为元组
a = tuple() #创建了一个空元组,等价于 a = ()
注意:
1.与列表不同,元组是不可更改的
2.当元组只有一个元素时,该元素后面的逗号不能省略
# 从左往右访问,第一个元素的序号是0
a = ('train', 'bus', 'car', 'ship')
print(a[0])
# 输出:train
# 从右往左访问,第一个元素的序号是-1
a = ('train', 'bus', 'car', 'ship')
print(a[-1])
# 输出:ship
注意:
1.元组的访问与列表相同
2.索引后面是方括号哦,不要看元组是用圆括号创建,索引就使用圆括号
a = ('train', 'bus', 'car', 'ship')
print(a(-1))
# 改用圆括号
#报错了
Traceback (most recent call last):
File "D:\Projects\Pycharm projects\pythonProject\main.py", line 2, in <module>
print(a(-1))
TypeError: 'tuple' object is not callable
3.映射(字典)
3.1 字典的创建
#方法一
a = {'a':1, 'b':2, 'c':3, 'd':4}
#方法二
a = dict(a=1, b=2, c=3, d=4)
#方法三:使用zip函数将两个序列打包成位置一对一的元组
a = ['a', 'b', 'c', 'd']
b = [1, 2, 3, 4]
c = dict(zip(a,b))
注意:
1.由于列表是可变的,所以不能作为字典的键
2.字典的键是不可以重复的,值可以重复
3.2 字典值的查找
a = {'a':1, 'b':2, 'c':3, 'd':4}
# 方法一
print(a['b'])
# 输出:2
# 方法二
print(a.get('b'))
# 输出:2
3.3 字典与序列的转换
a = {'a':1, 'b':2, 'c':3, 'd':4}
# 字典转换为列表
A = list(a.keys()) #将键转换为列表
B = list(a.values()) #将值转换为列表
# 字典转换为元组
A = tuple(a.keys()) #将键转换为元组
B = tuple(a.values()) #将值转换为元组
4.集合
4.1 集合的创建
# 方法一
a = {1, 2, 3, 4}
# 方法二:此方法常用来将序列类型的数据转换为集合类型
a = set([1, 2, 3, 4])
注意:
1.空集合只能用set()来创建,因为{}表示的是空字典
2.集合的元素是不重复的,若创建集合时有相同的元素,python会自动剔除
4.2 集合的运算
4.3 集合的方法
四、可迭代对象
可迭代对象不是一种数据类型,也不是一种数据结构,它是一种协议,即实现了__iter__()
方法的对象。在Python中,如果一个对象实现了__iter__()
方法,且该方法返回一个迭代器对象(实现了__next__()
方法),那么这个对象就是可迭代对象。
五、 字符串与正则表达式
1. 运算优先级
2. 字符串编码
python3使用UTF-8编码,无论是英文还是汉字都按一个字符来处理
python3中也可以使用中文来做标识符
3. 格式化字符串
六、 函数的设计
1.函数的定义
def sayHello(): #函数定义
print("Hello World!") #函数体
#主程序
sayHello() #函数调用
2.函数的调用
上例中函数调用只能打印一个定义好的语句,怎么让他打印出自定义语句呢?
def sayHello(s): #函数定义
print(s) #函数体
#主程序
sayHello("Hello!") #函数调用
sayHello("How are you?")
'''
程序运行结果:
Hello!
How are you?
'''
代码中s只是一个“占位”的作用,并没有实际的值,需要等待函数调用时传给他实际的值。
s在函数中被称为形参,例子中的Hellow!就是所谓的实参。
3.函数的返回
有的函数的作用可能是计算一个值,这时候可能需要将计算的值返回给主函数,使用return语句实现。
def 阶乘计算(n): # 函数定义
s = 1
for i in range(1, n+1):
s *= i
return s
# 主程序
i = 6
k = 阶乘计算(i) # 需要阶乘计算函数的计算结果
print(str(i)+"!=", k)
注意:
1.为了看的清楚这里我用中文为函数命名
2.执行return语句 意味着函数体调用结束,无论之后函数体还有没有语句
七、 文件操作
1.打开文件
# 假如在d盘根目录下存在一个名为'test.txt'的文件,可以通过以下语句打开它:
file = open(r'd:\test.txt')
file = open('d:\\test.txt') # 转义\防止\t有转义字符的意义
file = open('d:/test.txt')
2.关闭文件
#方法一
file.close()
#方法二:使用with语句打开文件可以自动关闭
with open("example.txt") as file:
3.文件的读写操作
f=open('d:\\test.txt','w')
f.write('123\n')
#输出:4
f.write('abc')
#输出:3
f.close()
这段代码的含义是:
-
使用
open()
函数打开位于d:\test.txt
路径下的文本文件,并以写入模式('w')打开它。文件对象被赋值给变量f
。 -
调用
f.write()
方法向文件中写入内容。第一个调用f.write('123\n')
将字符串'123'
和一个换行符写入文件,并返回写入的字符数,即4。第二个调用f.write('abc')
将字符串'abc'
写入文件并返回写入的字符数,即3。 -
最后,使用
f.close()
方法关闭文件。
八、类与对象
1.类与对象的关系
比如定义一个“鸟类”,鹦鹉就是“鸟类”的一个对象,海鸥也是“鸟类”的一个对象。类是静态的,它们的属性在程序执行前就被定义好了,对象是动态的,他们在程序执行时可以被创建和删除。
2.类的属性
class Bird:
有羽毛 = True
繁衍方式 = '蛋生' #类的属性
def fly(self): #类的方法
print('飞行')
2.1 类的属性
类的属性有两种:类属性和实例属性(对象属性),类属性是全类所共有,比如上例定义的鸟类里的‘有羽毛’和‘繁衍方式’
实例属性是在__init__()中定义的,定义时以self为前缀,且只能通过对象名来反访问。
1.类属性只能通过类对象修改,不能通过实例对象修改
2.如果通过实例对象修改类属性,表示的是创建了一个实例属性
2.2 修改和增加类属性
通过“类名.属性名”
class Bird:
有羽毛 = True
繁衍方式 = '蛋生'
def fly(self):
print('飞行')
Bird.有羽毛 = '不一定' #修改类属性
Bird.叫声 = '叽叽喳喳' #添加类属性
2.3 属性的访问权限
分为共有属性,保护属性(单下划线访问),私有属性(双下划线访问)
私有属性只有类本身可以访问
class Person:
def __init__(self,n,w): # 定义实例属性的方法
self.name=n
self.__weight=w # 定义私有属性以千克为单位的体重weight
pa=Person("Lily",50)
print("姓名为",pa.name,",体重为",pa__weight,"千克")
运行结果:私有属性不能访问
Traceback (most recent call last):
File "D:\Projects\Pycharm projects\pythonProject\main.py", line 9, in <module>
print("姓名为",pa.name,",体重为",pa.__weight,"千克")
AttributeError: 'Person' object has no attribute '__weight'
但在python中,可以使用“对象名._类名__私有属性名”直接访问私有属性
class Person:
def __init__(self,n,w): # 定义实例属性的方法
self.name=n
self.__weight=w # 定义私有属性以千克为单位的体重weight
pa=Person("Lily",50)
print("姓名为",pa.name,",体重为",pa._Person__weight,"千克") #访问私有成员
运行结果:
姓名为 Lily ,体重为 50 千克
3.类的实例方法及访问权限
分为公有方法、保护方法(以单下划线开头)、私有方法(以双下划线开头)
1.私有方法只能在类的内部调用
class MyClass:
def public(self):
print("这是公有方法")
self.__private() # 私有方法只能在类的内部被调用
def __private(self):
print("这是私有方法")
a = MyClass()
a.public()
这是公有方法
这是私有方法
2.在类的外部调用私有方法会报错
class MyClass:
def public(self):
print("这是公有方法")
def __private(self):
print("这是私有方法")
a = MyClass()
a.public()
a.__private() # 在外部调用私有方法
Traceback (most recent call last):
File "D:\Projects\Pycharm projects\pythonProject\main.py", line 9, in <module>
a.__private() # 在外部调用私有方法
AttributeError: 'MyClass' object has no attribute '__private'
这是公有方法