python学习(基本语法)
python学习
1.字面量
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EsKS1U02-1683297152819)(C:\Users\31628\AppData\Roaming\Typora\typora-user-images\image-20230407152923300.png)]
直接在程序中写的数据或者print()的数据都算字面量
1.1字符串
字符串可以用 " " ,’ ', “”" “”"(多行字符串)来表示
如果在字符串本身中含有引号,则可以用另一个引号作为字符串内容,或者用转义符 \
例:
name = "'我是wyz'"
name = "\"我是吴彦祖\""
name = '"我是wyz"'
字符串拼接用+号,也可以用占位符%s,%d等
print("我的名字是:%s,我的年龄是:%d" %(name,age))
用占位符时数值可以控制精度比如%5.2f表示宽度为5,保留两位小数的浮点数类型数据
也可以通过语法: f"内容{变量}" 对字符串进行快速格式化
print(f"我是{name},我今年{age}岁")
2.注释
2.1单行注释
以#开头,规范是#号和注释内容以一个空格隔开
# 字面量
13.14
235
"hello world"
2.2多行注释
"""
"""
3.变量
通过变量存储数据
注意:print()语句中输出多个内容用逗号隔开
name = "wyz"
print("我的名字是:",name)
通过type()可以查看变量的数据类型
类型转换方式:
int(x) #将数据转化为int类型
float(x) # 转换成浮点类型
str(x) #转换成字符串类型
4.标识符
变量名,方法名,类名,统一叫做标识符
标识符命名规范:
只允许出现英文,中文(不推荐),数字,下划线(_),数字不能作为开头,区分大小写,不可使用关键字
5.运算符
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9SQtNBIp-1683297152821)(C:\Users\31628\AppData\Roaming\Typora\typora-user-images\image-20230407161742439.png)]
6.数据输入
input()
也可以在input()中直接写提示内容
name = input("你的名字是")
print("我知道了,你的名字是: %s" %(name))
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iVjkK5Cu-1683297152821)(C:\Users\31628\AppData\Roaming\Typora\typora-user-images\image-20230407165156249.png)]
7.if else语句
age = input("你多大了")
if age >= 18:
print("我比18岁大")
else:
print("我比18岁小")
注意:条件满足的 执行内容前一定要缩进4空格
python通过缩进来表示层次关系
7.1if elif else 语句
age = int(input("你多大了"))
if age >= 18:
print("我比18岁大")
elif age >= 10:
print("我比18岁小,但我比10岁大")
else:
print("我比10岁还小")
8.循环
8.1while语句
i = int(input("开始时间"))
while i >= 1:
print(f"倒计时{i}")
i-=1
8.2 for循环语句
for 临时变量 in 待处理数据集
循环满足条件是执行的代码
例
name = "woshinidie"
#将name的内容挨个取出赋予临时变量x
for x in name:
print(x)
运行结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CDkUuujN-1683297152822)(C:\Users\31628\AppData\Roaming\Typora\typora-user-images\image-20230407180116181.png)]
注意:
for循环无法定义循环条件,只能被动取出数据处理
循环内的语句要有空格缩进
8.3range语句(类似java的for循环)
在for循环中:
for 临时变量 in 待处理数据集
循环满足条件是执行的代码
待处理数据集要个来说称之为:程序类型8
序列类型指,其内容可以一个个一次取出来的一种类型,包括:
- 字符串
- 列表
- 元组
- 等
range语法:
语法1:
range(num)
获取一个从0开始,到num结束(不含num)
如range(5)取得的数据是:[0,1,2,3,4]
语法2:
range(num1,num2)
获取一个从num1开始,到num2结束的数字(不含num2本身)
如range(5,10)取得的数据是:[5,6,7,8,9]
语法3:
range(num1,num2,step)
获得一个从num1开始,到num2结束的数字序列(不含num2本身)
数字之间的步长,以step为准( step默认为1)
如,range(5,10,2)取得的数据是:[5,7,9]
8.4continue和break
continue 仅结束本次循环,进入下一循环
break 直接跳出循环,执行循环之后的语句
9.函数
9.1格式
# 定义函数
def 函数名(传入参数):
函数体
return 返回值
# 调用函数
函数名(参数)
形参可以是任意多个
如果不写return时,也会有返回值,返回的是None(也就是默认的返回值)
返回值可以有多个,通过逗号隔开,且返回值类型也可以不相同
类型是NoneType
在if判断中,None等同于False
可以用于声明无初始值的变量
name = None
9.2全局变量和局部变量
仅在方法体中生效的变量称为局部变量
在所有地方都生效的称为全局变量
通过global可以将局部变量变为全局变量
def test():
global num
num = 500
print(f"test:{num}")
9.3 传参方式
传参方式可以有多种
- 位置参数:通过位置的一一对应传参
- 关键字参数:通过键值对的方式传参(位置传参和键值对传参可以混用,但是位置传参必须写在键值对传参的前面)
- 缺省参数:即给参数设定默认值,在调用函数的时候如果不传入值,则传入默认值,默认值得参数必须卸载最后面
- 不定长参数:即传入的参数数量不受限制
#缺省参数
def test1(name, gender, age = 18):
print(f"姓名为:{name},年龄为:{age},性别为:{gender}")
test1("wyz","男")
#不定长参数
#位置不定藏参数
def test2(*args):
print(args)
test2("wyz","zxl","mht")
# 关键字不定长参数
def test2(*args):
print(args)
test2("wyz","zxl","mht")
def test2(**kwargs):
print(f"kwargs的类型是:{type(kwargs)},内容是:{kwargs}")
test2(name="wyz", age=18, gender="男")
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LiRJcVhJ-1683297152823)(C:\Users\31628\AppData\Roaming\Typora\typora-user-images\image-20230408154149530.png)]
9.4函数作为参数传递
函数可以作为参数进行传递
def function_compute(compute,x,y):
result = compute(x,y)
print(result)
def compute(x,y):
return x + y
function_compute(compute,1,2)
这一块不是很懂,标记一下之后再进行学习
9.5lambda匿名函数
通过lambda关键字可以定义匿名函数(无名称),匿名函数只可临时使用一次
格式:
lambda 传入参数: 函数体
#注意:函数体只能写一行代码
def function_compute(compute):
result = compute(1, 2)
print(result)
function_compute(lambda x, y: x + y)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j1xBwGYL-1683297152824)(C:\Users\31628\AppData\Roaming\Typora\typora-user-images\image-20230408161636290.png)]
y
10.数据容器
可以存储多个元素的python数据类型
list(列表),tuple(元组),str(字符串),set(集合),dict(字典)
10.1列表
格式:
# 字面量
[元素1,元素2,元素3...]
# 定义变量
变量名 = [元素1,元素2,元素3...]
# 定义空列表
变量名 = []
变量名 = list()
元素可重复,有序
列表是可以嵌套的
List = [[1,2,3],[4,5,6]]
注意:在取嵌套列表中的元素时如下操作
#取出list第二个元素的第一个元素
list = [[1,2,3],[4,5,6]]
print(list[1][0])
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DjYZjRDS-1683297152824)(C:\Users\31628\AppData\Roaming\Typora\typora-user-images\image-20230408013754813.png)]
在一个list中可以放不同类型的元素
List = [1,2,"wyz",True]
常用方法
查询
查找指定元素的下标
列表.index(元素)
若找不到则会报ValueError
插入
在指定下标位置插入指定的元素值
列表.insert(下标,元素值)
将指定元素追加到列表的尾部
列表.append(元素值)
将其他数据容器的内容取出依次追加到列表尾部
列表.extend(其他数据容器)
删除
删除指定下标的元素
语法1:
del 列表[下标]
语法2:
列表.pop(下标)
删除某元素在列表中的第一个匹配项
列表.remove(元素值)
清空
清空列表
列表.clear()
修改
修改指定位置元素的值
列表[下标] = 值
统计元素个数
统计某元素在列表中的数量
列表.count(元素值)
得到列表中元素的数量
len(列表)
list的遍历
for循环或者while循环
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qqBYuSgs-1683297152826)(C:\Users\31628\AppData\Roaming\Typora\typora-user-images\image-20230408020426375.png)]
# 当我们想一次访问列表中的多个元素时,可以使用切片
# 切片操作对列表同样是适用的,语法是 列表名[m:n],访问的元素从索引 m 开始到索引 n 结束,不包括 n。
10.2元组
元组一旦定义完成,就不可修改
格式:
# 字面量
(元素1,元素2,元素3...)
# 定义变量
变量名 = (元素1,元素2,元素3...)
# 定义空元组
变量名 = ()
变量名 = tuple()
元组中的元素可以使不同数据类型
元素可重复,有序
元组可嵌套
常用方法
# 查找某个元素
index(元素值)
# 统计某个元素在当前元组出现个数
count()
# 元组长度
len(元组)
元组是无法修改的,但是元组内的list是可以修改的
t1 = (1,2,[3,4,5])
print(t1)
t1[2][0] = "python"
print(t1)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Gm1oqWTx-1683297152826)(C:\Users\31628\AppData\Roaming\Typora\typora-user-images\image-20230408105959999.png#pic_left)]
10.3字符串
字符串是字符的容器
可以通过下标取特定位置的字符
元素可重复,有序
不可修改
常用方法
# 查找给定字符的第一个匹配项下标
字符串.index(字符串)
# 将字符串内的全部字符串1,替换为字符串2,不会修改原字符串,而是得到一个新的
字符串.replace(字符串1,字符串2)
# 按照给定字符串,对字符串进行分隔不会修改原字符串,而是得到一个新的列表
字符串.split(字符串)
# 移除首尾的空格和换行符或指定字符串
字符串.strip()
字符串.strip(字符串)
# 统计字符串内某字符串的出现次数
字符串.count(字符串)
# 字符串长度
len(字符串)
10.4数据容器(序列)的切片
序列指内容连续,有序,可使用下标索引的一类数据容器
列表,元组,字符串都可视为序列
切片指从原序列中取出一个子序列
切片语法:
序列[起始下标:结束下标:步长]
#起始下标和结束下标都可留空,留空试做截取到结尾或从头开始
#截取到结束下标(不含结束下标元素)
10.5set集合
元素不可重复,且无序
格式:
# 字面量
{元素1,元素2,元素3...}
# 定义变量
变量名 = {元素1,元素2,元素3...}
# 定义空集合
变量名 = set()
常用操作
#添加新元素
集合.add(元素值)
#移除元素
集合.remove(元素值)
# 从集合中随机取出一个元素并移除
集合.pop()
#清空
集合.pclear()
#取出集合1和集合2的差集(集合1有而集合2没有的 )
集合1.difference(集合2)
#在集合1中,删除集合2中存在的元素集合1被修改,集合2不变
集合1.difference_update(集合2)
#得到1个新集合,内含2个集合的全部元素原有的2个集合内容不变
集合1.union(集合2)
#返回集合长度
len(集合)
遍历
# 集合的遍历只能用for循环
set1 = {1,2,3,4,5,True,"wyz"}
for i in set1:
print(i)
10.6字典
本质是键值对
格式
# 字面量
{
key: value,
key: value
...
}
# 定义变量
变量名 = {
key: value,
key: value
...
}
# 定义空集合
变量名 = {}
变量名 = dict()
key不可重复
通过key取到相应的value
dict1 = {
"student1" : "wyz",
"student2" : "wlh",
"student3" : "cxk"
}
print(dict1["student1"])
print(dict1["student2"])
字典可以嵌套数据
dict2 = {
"wyz":{
"语文": 70,
"数学": 80,
"英语": 90
},
"cxk": {
"语文": 90,
"数学": 85,
"英语": 70
}
}
print(dict2["wyz"]["语文"])
运行结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tAfZqn9C-1683297152827)(C:\Users\31628\AppData\Roaming\Typora\typora-user-images\image-20230408140925052.png)]
常用方法
# 若已存在则修改,不存在则新增
字典名[key] = value
#获取指定的key的value,同时字典被修改,指定的key的数据被删除
字典名.pop(key)
#清空
字典名.clear()
#获取字典的全部key,可用于for循环遍历字典
字典.keys()
#字典长度
len(字典)
10.7总结
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ENfwZylw-1683297152828)(C:\Users\31628\AppData\Roaming\Typora\typora-user-images\image-20230408143536077.png)]
10.8数据容器的通用操作
#容器长度
len(容器)
#容器最大的元素
max(容器)
#容器最小的元素
min(容器)
#通用排序 reverse表示是否进行翻转,即reverse = False是从小到大,reverse = TRUE的时候就是从大到小
sorted(容器,reverse=True)
排序的结果是一个列表对象
注意,字典排序的是key,value会被舍弃
dict3 = {
"key1" : 5,
"key2" : 8,
"key3" : 10,
"key4" : 1,
"key5" : 4
}
print(f"字典的排序结果为:{sorted(dict3,reverse=False)}")
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LsJTEUzG-1683297152829)(C:\Users\31628\AppData\Roaming\Typora\typora-user-images\image-20230408145851252.png)]
容器之间的相互转换
类似于数据类型的转换
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VwuBh9Ay-1683297152829)(C:\Users\31628\AppData\Roaming\Typora\typora-user-images\image-20230408145943712.png)]
需要注意的是,字典转换成其他的容器时只会保留key,value会被舍弃
字符串的大小比较
字符串的比较是基于ASCII码值的比较
比较时是按位比较
11文件
11.1文件读取
打开文件
open(name,mode,encoding)
#name:是要打开目标文件名的字符串(可以包含路径)
#mode: 设置打开文件的模式:只读,写入,追加等
#encoding:编码
f = open( "E:\学习路线.txt","r",encoding="utf-8")
print(f.read())
#注意如果这上下两行代码都执行的话,后面的print(lines)的内容会为空
#这是因为,上一个f.read()读取完后,会自动在读取完的地方坐上标记(指针),下次读取的时候会以标记处为开始读取。
#读取文件的全部行,封装到列表中
lines = f.read
lines = f.readlines()
print(lines)
关闭文件
f.close()
with open语法
##通过在with open的语句块中对文件进行操作
#可以在操作完成后自动关闭close文件,避免遗忘掉close方法
with open("E:\学习路线.txt","r",encoding="utf-8") as file:
print(file.readlines())
11.2文件写入
#打开文件
f = open("D:\学习路线.txt","w")
#文件写入,没有目标文件则创建,存在会将其清空再写入
f.write("hello world")
#内容刷新
f.flush()
#直接调用write,内容并未真正写入文件,而是会积攒在缓冲区中当,调用flush的时候,内容才真正写入文件
文件追加写入
#a模式
f = open("D:\学习路线.txt","a")
#文件写入,不存在会创建,存在了会在文件最后追加写入
f.write("hello world")
#内容刷新
f.flush()
12.异常
12.1异常捕获
捕获常规异常
try:
可能发生错误的代码
except:
如果出现异常执行的代码
捕获指定异常
#捕获指定异常
try:
print(name)
except NameError as e:
print("name变量名称未定义错误")
#捕获多个指定异常
try:
print(name)
except NameError as e:
print("name变量名称未定义错误")
#如果尝试执行的代码的异常类型和要捕获的异常类型不一致。则无法捕获异常
#一般try下方只放一行尝试执行的代码
#捕获所有异常
try:
1/0
except Exception as e:
print("抛出异常")
异常else
else表示如果没有异常要执行的代码
try:
print("我被执行了")
except Exception as e:
print("抛出异常")
else:
print("没有异常,Oyeah")
finally
无论是否有异常都要执行的代码
try:
print("我被执行了")
except Exception as e:
print("抛出异常")
else:
print("没有异常,Oyeah")
finally:
print("无论如果我都要被执行")
12.2异常的传递
def func1():
print("function1 start")
num = 1/0
print("function1 end")
def func2():
print("function2 start")
func1()
print("function2 end")
def func3():
try:
func2()
except Exception as e:
print("抛出异常")
print(e)
func3()
运行结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eqrsi1Pb-1683297152830)(C:\Users\31628\AppData\Roaming\Typora\typora-user-images\image-20230408185527706.png)]
13.模块
13.1导入模块
格式如下:
[from 模块名] import [模块| 类| 变量 | 函数 | *] as [别名]
#例
from 模块 import 功能名 as 别名
自定义模块
#自定义模块中要对定义得函数进行测试时,只在当前文件中调用该函数,其他导入的文件内不符合该条件,则不执行test函数调用
if __name__ == "__main__":
测试代码
all
如果一个模块文件中有"all"变量,当使用"from xxx import *"导入时,只能导入这个列表中的元素
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J1rawd57-1683297152831)(C:\Users\31628\AppData\Roaming\Typora\typora-user-images\image-20230408192224888.png)]
13.2python包
通过包来管理多个模块
一个包中有多个模块文件
但包的本质也是模块
在python包中包含了一个"init.py"文件,即表示该文件夹可用于包含多个模块文件
导包
#方式一
import 包名.模块名.目标
#方式二
#在__init__.py文件中添加"__all__" = []控制允许导入额模块列表
导入第三方包
在cmd中安装第三方包
方式一:
pip install 包名
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 包名称 #快速安装
方式二:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nahvPPyP-1683297152831)(C:\Users\31628\AppData\Roaming\Typora\typora-user-images\image-20230408213538817.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ul0ttBDp-1683297152832)(C:\Users\31628\AppData\Roaming\Typora\typora-user-images\image-20230408213557240.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Uyrj6CyU-1683297152833)(C:\Users\31628\AppData\Roaming\Typora\typora-user-images\image-20230408213804635.png)]
14.pyecharts
14.1json
json是一种轻量级的数据交互格式。可以按照json指定的格式去组织和封住数据
json本质上是一个带有特定格式的字符串
为了让不同的语言都能够相互通用的互相传数据,json就是一种不错的中专数据格式
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e0bjS5vv-1683297152833)(C:\Users\31628\AppData\Roaming\Typora\typora-user-images\image-20230408224640171.png)]
格式:
#可以是这样的,对应的是字典
{
"name":"admin",
"age":18
}
#也可以是这样的,对应的是列表
[
{
"name":"admin",
"age":18
},
{
"name":"zxy",
"age":20
},
{
"name":"wyz",
"age":9
}
]
python数据和json数据的相互转化
#导入json模块
import json
#准备符合格式json格式要求的python数据
data = [{"name": "老王", "age": 16}, {"name": "张三" , "age": 20}]
# 通过json.dumps(data)方法把python数据转化为json数据
data = json.dumps(data,ensuer_ascii=False)
#如果数据中有中文,则需要带ensure_ascii = False,没有则可以不带
# 通过json.loads(data)方法把json数据转化为python数据
data = json.loads(data)
对象
基础格式
#定义一个类
class Student:
#成员变量
name = None
gender = None
age = None
#成员方法
def say_hello(self):
print(f"hello,{self.name}")
#构造方法
def __init__(self,name,gender,age):
self.name = name
self.gender = gender
self.age = age
#创建对象 如果不写构造方法,python会自动生成一个空参构造方法
stu1 = Student()
#赋值
stu1.name = "wyz"
stu1.gender = "男"
stu2 = Student("张三","男",18)
定义成员方法
#格式
def 方法名(self,形参1,形参2,...):
方法体
#其中的self是定义成员方法时必须写的,用于表示对象自身,
#当使用类对象调用方法是,self会自动被python传入
#要在方法内部访问其成员变量,必须使用self
魔术方法(类内置的方法)
常用的魔术方法
class Student:
def __init__(self, name, age):
self.name = name
self.age = age
# __str__ 字符串方法,类同toString()
def __str (self):
return f"Student类对象,name :{self.name}, age :{self.age}"
# __lt__ 比较方法 大于,小于都可以实现
def __lt__(self,other):
return self.age < other.age
# __le__ 小于等于或大于等于比较方法
def __le__(self,other):
return self.age <= other.age
# __eq__ 相等比较方法
def __eq__(self,other):
return self.age == other.age
私有成员
类对象无法直接使用,但可以被类中其他的成员使用
class Student:
#私有成员变量
__变量名
#私有成员方法
__方法名
继承
python中一个子类可以有多个父类(多继承)
#class 子类(父类1,父类2,....)
#多重继承时如果有同名的变量,默认以继承顺序(从左到右)为优先级,即先继承的保留,后继承的被覆盖
#父类
class Person:
name = None
age = None
def say(self):
print(f"我是:{self.name}")
#子类
class Student(Person):
student_id = None
#pass关键字是占位语句,表示无内容,保证定义得完整性
class Teacher(Person): #含有抽象方法的类称为抽象类
pass #如果方法提是空的(pass)称之为抽象方法
如果方法提是空的(pass)称之为抽象方法
含有抽象方法的类称为抽象类
复写
即重写方法或成员变量
#父类
class Person:
name = "wjl"
age = 18
def say(self):
print(f"我是人类:{self.name}")
#子类
class Student(Person):
#复写成员变量
name = "wsc"
#复写成员方法
def say(self):
print(f"我是学生:{self.name}")
#调用父类成员
#父类名.成员 或 super().成员
class Teacher(Person):
def say_hi(self):
#不用再传入self
super().say()
print(f"我还是老师{self.name}")
teacher1.name = "wyl"
teacher1.say_hi()
类型注解
在代码中涉及数据交互的地方提供数据类型的注解(显式说明)
可以帮助开发者自身对变量类型进行注释
同时帮助IDE对代码进行类型推断,协助进行代码提示
语法格式:
#格式:变量名:类型
#基础数据类型注解
var_1 : int = 10
var_2 : float = 2.5
var_3 : bool = True
var_4 : str = "wyz"
#数据容器注解
my_list: list = [1,2,3]
my_tuple: tuple = (1,2,3)
my_set: set = {1,2,3}
my_dict: dict = {"itheima" : 666}
my_str: str = "itheima"
#详细注解
my_list2 : list[str,int,bool] = ["wyz",18,True]
...
#类对象注解
class Student:
pass
stu: student1 = Student()
也可以在注释中进行类型注解
var_1 = 10 # type : int
var_2 = 2.5 # type : float
my_list = [1,2,3] #type : list
my_tuple = (1,2,3) #type : tuple
var_3 = func() #type : Student 返回值类型
不过,一般是在无法直接看出变量类型之时,才会添加变量的类型注解
# 一般是在无法直接看出变量类型之时,才会添加变量的类型注解
var_1: int = random.randint(1,10)
var_2: dict = json.1oads(data)
var_3: student = func()
同时,注解写错了也不会影响运行,但是最好是写正确
函数和方法类型注解
#形参类型注解
def 函数名(形参名:类型,形参名:类型,...):
pass
#返回值类型注解
def func(data:list) -> list:
return data
Union类型
my_list2 : list[str,int,bool] = ["wyz",18,True]
#如果内容比较分散,则不太好描述
my_list3 : list = ["wyz",21,"zxy",18]
#此时可以使用Union类型
#Union[类型,类型]
#使用前要先导包
from typing import Union
my_list4 : list[Union[int,str]] = ["wyz",21,"zxy",18]
多态
略
#不用再传入self
super().say()
print(f"我还是老师{self.name}")
teacher1.name = “wyl”
teacher1.say_hi()
#### 类型注解
在代码中涉及数据交互的地方提供数据类型的注解(显式说明)
可以帮助开发者自身对变量类型进行注释
同时帮助IDE对代码进行类型推断,协助进行代码提示
语法格式:
```python
#格式:变量名:类型
#基础数据类型注解
var_1 : int = 10
var_2 : float = 2.5
var_3 : bool = True
var_4 : str = "wyz"
#数据容器注解
my_list: list = [1,2,3]
my_tuple: tuple = (1,2,3)
my_set: set = {1,2,3}
my_dict: dict = {"itheima" : 666}
my_str: str = "itheima"
#详细注解
my_list2 : list[str,int,bool] = ["wyz",18,True]
...
#类对象注解
class Student:
pass
stu: student1 = Student()
也可以在注释中进行类型注解
var_1 = 10 # type : int
var_2 = 2.5 # type : float
my_list = [1,2,3] #type : list
my_tuple = (1,2,3) #type : tuple
var_3 = func() #type : Student 返回值类型
不过,一般是在无法直接看出变量类型之时,才会添加变量的类型注解
# 一般是在无法直接看出变量类型之时,才会添加变量的类型注解
var_1: int = random.randint(1,10)
var_2: dict = json.1oads(data)
var_3: student = func()
同时,注解写错了也不会影响运行,但是最好是写正确
函数和方法类型注解
#形参类型注解
def 函数名(形参名:类型,形参名:类型,...):
pass
#返回值类型注解
def func(data:list) -> list:
return data
Union类型
my_list2 : list[str,int,bool] = ["wyz",18,True]
#如果内容比较分散,则不太好描述
my_list3 : list = ["wyz",21,"zxy",18]
#此时可以使用Union类型
#Union[类型,类型]
#使用前要先导包
from typing import Union
my_list4 : list[Union[int,str]] = ["wyz",21,"zxy",18]
多态
略