python学习(基本语法)

本文介绍了Python的基础知识,包括字面量、注释、变量、标识符、运算符、数据输入、条件语句、循环、函数、数据容器(如列表、元组、字符串、集合、字典)的使用,以及文件操作、异常处理、模块导入和JSON。还涉及到函数参数、匿名函数(lambda)、类型注解和多态的概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 传参方式

传参方式可以有多种

  1. 位置参数:通过位置的一一对应传参
  2. 关键字参数:通过键值对的方式传参(位置传参和键值对传参可以混用,但是位置传参必须写在键值对传参的前面)
  3. 缺省参数:即给参数设定默认值,在调用函数的时候如果不传入值,则传入默认值,默认值得参数必须卸载最后面
  4. 不定长参数:即传入的参数数量不受限制
#缺省参数
 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 = [123]
my_tuple: tuple = (123)
my_set: set = {123}
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 = [123]		#type : list
my_tuple = (123)		#type : tuple

var_3 = func()		#type : Student  返回值类型

不过,一般是在无法直接看出变量类型之时,才会添加变量的类型注解

# 一般是在无法直接看出变量类型之时,才会添加变量的类型注解
var_1: int = random.randint(110)
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 = [123]		#type : list
my_tuple = (123)		#type : tuple

var_3 = func()		#type : Student  返回值类型

不过,一般是在无法直接看出变量类型之时,才会添加变量的类型注解

# 一般是在无法直接看出变量类型之时,才会添加变量的类型注解
var_1: int = random.randint(110)
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]
多态

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值