python 第二章——数据类型详解

news2024/9/21 14:30:42

文章目录

  • 前言
  • 一、什么是数据类型
    • 1.变量
    • 2.注释
  • 二、数字
  • 三、字符串
  • 四、布尔
  • 五、列表
  • 六、元组
  • 七、集合
  • 八、字典
  • 总结


前言

本系列教程目录,可点击这里查看:Python教程目录

学习一门编程语言,第一件事就应该是熟练掌握这门编程语言的基本数据类型,因为之后,你将会随处遇到它们。

前文中我们用到了python中的一个最基本的打印函数print,它的作用就是将一个字符串或者其它对象,打印到屏幕的

用法很简单,本章在介绍数据类型的时候会大量用到它,可以先简单熟悉一下它的用法

虽然用起来很简单,但它也有很多的细节,我会在后面对它进行详细的介绍

一、什么是数据类型

所谓数据类型,也就是数据的类型,简单来说,就是python可以表示哪些类型的数据。

比如数字类型,可以用来操作数字、布尔类型,用来表示真假、列表类型,用来存放一组关联的元素等等

当然,上面这介绍的只是表象,不同的数据类型,真正的本质在于所占用的内存大小不同。

你可以在windows电脑的任务管理器中看到本机电脑的内存:
在这里插入图片描述
你电脑上所有的程序,包括我们马上要学习的python语言,最终都是存放在你的电脑内存中执行的。

而各种数据类型的所占用的内存大小并不一样,一般我们会尽量选择占用内存较小的数据类型来满足我们的实际需求

不过由于python这门语言的特性,实际上并不用太顾及这个,因为它本身就是为大众开发的一门语言,这里提到内存,主要还是为了让你对你写的每行代码,有更直接的感触

内存大小可以通过函数sys.getsizeof来获取

要使用这个函数,需要你导入一个模块:

import sys

比如下面这样:

import sys

a=10 #一个数字类型的变量
size=sys.getsizeof(a) #获取这个变量的大小
print(size) #打印出大小

这段简短的代码主要涉及到了变量函数模块注释的使用

1.变量

模块函数的内容会在后面再介绍,而变量,也就是上面这段代码中的a,简而言之,就是存放各种数据类型的一个地方,并且之后你还可以随意修改它里面的值

当然变量名你可以随意写,不一定非要是a,但要注意以下几点:

  • 变量名只能包含字母、数字和下划线。变量名可以以字母或下划线开头,但不能以数字开头。
  • 变量名不能包含空格,但可以使用下划线来分隔单词。
  • 不要将 Python 关键字和函数名用作变量名。
  • 变量名应简洁而又具有描述性。
  • 变量名区分大小写。

看着有点多?实际上大部分时候你只需要记住上面第一条就行了,也就是说变量名只能用字母数字下划线组成,空格也不行,至于其它的,当你以后遇到一些坑,自然而然就知道了

这是事实,有些坑,不自己走一遍,是不会长记性的

本质上来说,变量名就代表了一块内存,当你操作上面代码中的a时,实际上就是在操作一块内存

比如你可以用函数id来获取它的地址:

a=10 #一个数字类型的变量
addr=id(a) #获取a变量的地址
print(addr) #打印地址

2.注释

至于注释,就简单了,就像上面这段代码这样,#符号后面跟着的就是注释

写注释与不写注释有什么区别吗?对于python的解释器而言并没有什么区别,因为它根本不会管你的

注释的作用,是给我们程序员看的,就比如上面那段代码,如果我不写后面的注释,你能知道我在干嘛吗?

这就是注释的作用,养成写注释是一个很好的习惯

即使是自己写的代码,只要过个几个月,你自己可能都不知道当初自己写的是个什么东西

正如你说见,单行注释,只需要在前面写上一个#号即可

但有时候我们会有写多行注释的需求(比如后面章节我们将要提到的模块与函数,注释的内容一般一行写不下)

当然,你仍然可以继续用#号,就像下面这样:

#第一行注释
#第二行注释
#第三行注释
#第四行注释

但这样明显很不方便,比如如果我现在需要复制注释里面的内容,就很麻烦,需要一行一行的复制(如果多行一起复制,会有前面的#号)

所以这时候我们就可以使用多行注释的语法,就像下面这样:

'''
第一行注释
第二行注释
第三行注释
第四行注释
'''

任何在三个单引号之间的,都为注释内容,解释器不会管你的,这样就很方便我们写多行注释了

二、数字

如果你读过高中(或者初中?)应该知道数字大抵可以分为三种类型:整数小数以及复数

python中默认就存在这三种数据类型,你可以很方便的表示它们:

a=10 #整数
b=3.14259 #小数
c=10+20j #复数

在pycharm这款IDE中,只要你将你的鼠标悬浮在变量名称上面,就会自动弹出一个框,给你解释这个变量名是什么类型的:
在这里插入图片描述
比如这里我悬浮在c上,就会弹出上面的框

其中上面的main代表它所处的文件

而下面的c:complex=10+20j,这里的:前面是我们的变量名,而后面,就是这个变量的类型,这里为complex,即复数的意思

如果你看a和b,就会发现整数、小数的类型分别为:intfloat

其中int是整数integer单词的缩写,而float意思是浮动,因为在计算机中我们一般称小数为浮点数

有数字肯定就会有运算,加减乘除这些最基本的运算都是有的:

a=10 #整数
a1=a+a 
a2=a-10

b=3.14259 #小数
b1=b*b
b2=b/10

c=10+20j #复数
c1=c+c

加为+,减为-,乘为*,除为/

当然,python中的运算符并不仅仅只有这一点,这块内容我们在后面专门聊一聊

你可以直接用print函数打印它们来获取运算的结果:

a=10 #整数
a1=a+a
print(a1)

b=3.14259 #小数
b1=b*b
print(b1)

c=10+20j #复数
c1=c+c
print(c1)

三、字符串

任何一门编程语言中,最常见的一个类型便是字符串了,因为它可以表示任意字符,并且操作它。

比如你写的任何报告、作文、小说,本质上都是字符串,只要将其全部读取到python中,就可以对它们进行非常方便的操作

创建一个字符串变量很简单,只需要写一个变量名,让它等于一个字符串即可:

s='str1'
s1="str2"

字符串可以用上面两种方式表示:’‘""

即:单引号、双引号均可,不过一般习惯上,我们可以更喜欢用单引号

当你鼠标悬浮在变量上,就可以看到它的类型了:
在这里插入图片描述
可以看到,字符串的类型为str,即单词string的缩写

python中,有大量可以操作字符串的函数,但这里为了节约篇幅,以及考虑到我们还没有讲解到函数,所以会留在后面的章节对其进行详解

四、布尔

布尔类型,也就是我们常说的真与假,真用True,假用False

使用起来非常简单:

b1=True
b2=False

悬浮在其上,可以看到它的类型为bool
在这里插入图片描述
boolean的简写

它的主要作用在于判断,这个我们会在后面的流程控制语句中进行介绍,这里只需要了解一下布尔类型的运算即可

一般来说,布尔类型有三种运算:或、与、非

分别对应着:orandnot

使用方法如下:

b1=True
b2=False
b3=b1 and b2 #b1与b2做与运算,一假为假,所以结果为False
b4=b1 or b2 #b1与b2做或运算,一真为真,所以结果为True
b5=not b1 #非运算,b1为True,那么结果就为False

print(b3,b4,b5) #打印结果

这个读过初高中的应该都知道,我这里就不再赘述了,只是要熟悉一下它的用法而已

需要注意的点是print这个打印函数,如果你想要打印多个对象,就按顺序写在小括号中即可,各个对象要用,进行分隔

五、列表

列表,看字面意思应该也能猜出来,它能存放一系列的值

arr=[1,True,3.24,1+10j,'string']
print(arr)

表示方法就是让一个变量等于一个[],而这个中括号中就存放你想要存放的值即可(任意数量,各个值之间用,分隔)

如果你此刻将鼠标悬浮在其上,就会看到一长串的类型:

在这里插入图片描述
这里的list,就代表着它是一个列表,而它后面[]里面的类型,你应该也很熟悉了,就是前面我们提到的各种数据类型

它们之所以会出现在这里,是因为我在列表里存放了这些类型的值

从等号前后对比也能看出来,前后两个中括号中的类型与数据是一一对应的

你可以直接像上面那样,用print函数一次性将它们全部打印出去,也可以像下面这样,分别进行打印:

arr=[1,True,3.24,1+10j,'string']
print(arr[0])
print(arr[1])
print(arr[2])
print(arr[3])
print(arr[4])

即:我们可以通过下标:[数字]的形式,来访问对应的数据

需要注意的是,下标是从0开始数的,列表中有5个对象,所以下标的范围就是0-4

列表同样有很多常用的函数,鉴于同样的原因,我将在后文对其进行详解

它的使用场景在于存放一组相关联的数据,比如一个学生的姓名、年龄、性别、电话等等,就可以存放在同一个列表中,方便以后存取修改

六、元组

元组其实与上面提到的列表差不多,它同样也可以存放一组数据,使用方法如下:

tup=(1,True,3.24,1+10j,'string')
print(tup)

从表面上看,它与列表的唯一区别可能就是列表中的中括号,而它用的小括号

将鼠标悬浮在变量名上:
在这里插入图片描述
可以看到,元组的类型为tuple,其后同样跟着的是它内部各个值的类型

同样也可以用print直接打印它,得到结果:

(1, True, 3.24, (1+10j), 'string')

同样也可以用下标访问对应位置的数据:

tup=(1,True,3.24,1+10j,'string')
print(tup[0])
print(tup[1])
print(tup[2])
print(tup[3])
print(tup[4])

但既然有列表与元组两种类型,那自然会有一定的区别

而这区别就是,元组是不可变的,而列表是可变的

比如下面这段代码:

arr=[1,True,3.24,1+10j,'string']
tup=(1,True,3.24,1+10j,'string')

arr[1]=False #正确,列表可变
tup[1]=False #错误元组不可变

这里的意思就是,将下标为1的地方(也就是第二个元素:True)重新赋值为False

如果你运行这段代码,就会看到python解释器报错了:

在这里插入图片描述
意思就是说,元组对象不支持对内部的项进行赋值操作

虽然它们的区别并不仅仅只是体现在这一个操作上,但其本质都是一个意思:元组不可变,而列表可变

所以如果你觉得一组数据,不应该被别人修改,那就用元组,而其余的情况,都直接用列表就好了。

七、集合

紧接着是集合,看名字也能大致明白她是什么意思,就是数据的集合

它的使用方法与上面的列表与元组很像:

s={1,True,3.24,1+10j,'string'}
print(s) #直接打印

其类型就是set

在这里插入图片描述

不同之处在于,它用的{},并且不能直接用下标进行访问:

s={1,True,3.24,1+10j,'string'}
print(s[0]) #错误,集合不能用下标进行访问

我们只能通过后面将要介绍的循环来遍历它

它的主要特性就是:不允许添加相同的元素

也就是说,我们一般可以用它来完成去重的操作

比如曾经我下载过几百M的字典,里面有大量重复的密码(几十万个)

想要去重,那就可以直接将它们全部读入一个集合中,集合就会自动完成去重,最后我们再循环遍历它,将里面的结果取出来就可以了

这里只是简单介绍一下它的概念,因为没有实际操作的话,其实学过也会很快就忘记的

八、字典

最后一个是字典了,它的应用场景就更多了

使用方法如下:

o={
    'name':'yushi',
    'age':100,
    'sex':'man'
}
print(o) 

注意,它和上面的集合一样,同样是使用的{}包裹元素

可以看到,字典的类型为dict
在这里插入图片描述
至于后面的中括号中,仍然指代的是参数的类型

,前面的是键的类型,,后面的是值的类型,因为值的类型有两种:strint,所以用|分隔,而前面的键只有一种str类型

这里提到了键与值,没错,字典的元素为键值对,也就是像上面写的那样,用,分隔每一个键值对元素

而每个键值对的键与值,则用:分隔,前面的是键,后面的是值,我们可以通过键来获取对应的值

就像下面这样:

o={
    'name':'yushi',
    'age':100,
    'sex':'man'
}
print(o['name']) #通过键 name 获取对应的值 yushi
print(o['age']) # 通过键 age 获取对应的值 100

它有多好用呢?比如前面提到的列表、元组可以绑定一系列关联的数据,但访问里面的时候只能通过下标来访问

也就是说,我需要记住名字的下标是0,年龄的下标是1等等

记忆这些没有意义的数字有时候也是一种负担。

而现在,通过字典的方式,我们可以将名字与对应的值进行绑定

以后想要访问乃至修改,都可以直接用[键]的方式来实现,清晰明了!

总结

前面的变量名规范处,有一条是不要将python中的关键字与函数名作为变量名

其中的关键字就有上面看到的这些数据类型(int,bool,str,dict,list,tuple,set),因为这些单词已经被python解释器自己用了,一般我们就最好不要再用这些词来声明变量,以防发生混淆

但其实如果你非要用,也是可以用的,只是作为一种编程习惯来说,最好别用(以免引入一下奇奇怪怪的bug)

还有函数名最好也不要当作变量名,比如这里最常用的print函数

数字类型主要有三种:整数、小数以及复数

布尔类型有两个值:TrueFalse,并且可以使用与或非运算(andornot

字符串是用单引号或双引号包裹起来的字符序列,一般我们更加习惯用单引号

列表、元组比较类似,都是用来存放相关联的一组数据,并且都可以通过下标来访问对应的元素,区别在于,元组不可变,列表可变,元组使用(),而列表使用[]

集合同样是存放各种数据的,它的主要特点就是内部的元素不可重复,一般被用来去重,用{},并且不可为空,因为字典也是用的{},如果为空,会默认它为字典类型

字典也是用来存放各种数据集合的,内部存储的不仅仅只是值,它是以键值对为单位存储的,相比于列表它有着更多的优势,比如可以直接通过有意义的键名,来取得或者修改对应的值

本章只是比较浅显的介绍了python中各种基本数据类型,但显然,这还远远不够,在后面的文章中,我将继续对其做出更加深入的介绍

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/459251.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[Java]JavaWeb开发中的MVC设计模式

一、有关Java Web与MVC设计模式 学习过基本Java Web开发的人都已经了解了如何编写基本的Servlet,如何编写jsp及如何更新浏览器中显示的内容。但是我们之前自己编写的应用一般存在无条理性,对于一个小型的网站这样的编写没有任何问题,但是一但…

MCDF代码详解,mcdf_rgm_pkg.sv代码超详细注释

寄存器模块代码详解 好戏开始: `include "param_def.v" package mcdf_rgm_pkg; import uvm_pkg::*; `include "uvm_macros.svh" import reg_pkg::*; //具有uvm_reg类型的专用寄存器描述[write-red-reg] class ctrl_reg extends uvm_r…

机器人教学中游戏化课程案例尝试

本文内容严格按创作模板发布: 2023年LPL春季赛季后赛正在火热进行中,你们心中的总冠军是哪支队伍呢?作为热爱游戏的程序猿,一起来聊聊你那些有意义的游戏开发经历吧! 游戏化ROS机器人课程的优势有以下七点&#xff1a…

第3章-运行时数据区

此章把运行时数据区里比较少的地方讲一下。虚拟机栈,堆,方法区这些地方后续再讲。 转载https://gitee.com/youthlql/JavaYouth/tree/main/docs/JVM。 运行时数据区概述及线程 前言 本节主要讲的是运行时数据区,也就是下图这部分&#xff0c…

5.微服务项目实战---Gateway--服务网关,实现统一认证、鉴权、监控、路由转发等

5.1 网关简介 大家都都知道在微服务架构中,一个系统会被拆分为很多个微服务。那么作为客户端要如何去调用 这么多的微服务呢?如果没有网关的存在,我们只能在客户端记录每个微服务的地址,然后分别去调用。 这样的架构&#xff0…

用友联合7家信创生态伙伴成立“信创领先实践联盟”,助力企业数智化国产替代

数字经济背景下,面对国际局势不稳定等以切不确定因素,只有突破和掌握关键核心技术,打造生态话语权,掌握产业发展主动权,向产业价值链高端迈进,我国才能摆脱受制于人局面。而推动信创产业繁荣发展&#xff0…

SAP-选择实施离散制造模式还是重复制造模式?

Implement Discrete Manufacturing or Repetitive Manufacturing? 翻译一篇,反正我也写不出来~~~~ “狗还是猫?” 这可能是世界上第二难的问题。 想知道最难的是什么? 这里是: “实施离散制造还是重复制造?” 作…

【设计模式】我终于读懂了访问者模式。。。

🌰测评系统的需求 将观众分为男人和女人,对歌手进行测评,当看完某个歌手表演后,得到他们对该歌手不同的评价(评价 有不同的种类,比如 成功、失败 等)传统方案 🌱传统方式的问题分析 如果系统比较小&…

2023年面试题入门篇和进阶篇万余字题目总结【答案+解析】

2023年Java面试题入门篇和进阶篇总结【答案解析】 入门篇1.、下列代码输出结果是()2.x为float类型,y为double类型,a为int类型,b为long类型,c为char类型,问xy*a/xb/ac的值是什么类型3.下列哪种说法是正确的4.mysql表use…

rollup打包封装的js类库

rollup中文网:简介 | rollup.js 中文文档 | rollup.js中文网Rollup 是一个 JavaScript 模块打包器,可以将小块代码编译成大块复杂的代码,Rollup 对代码模块使用新的标准化格式,这些标准都包含在 JavaScript 的 ES6 版本中。https:…

postman解决报错填坑指南

postman报错问题处理总结 问题1:如何解决postman请求异常丢掉proxy开头header自动使用系统环境变量代理问题描述:postman请求,配置了proxy开头的header,但是发请求的时候没有携带,可以查看postman的View-Show Postman …

D. Frets On Fire(二分 + 前缀和)

Problem - D - Codeforces Miyako带着一个乌克丽丽来到跳蚤王国。她与当地的跳蚤居民成为好朋友,并每天为他们演奏美妙的音乐。 作为国报,跳蚤们为她制作了一个更大的乌克丽E:它有n根这,每核这上都有(10181)个品位(ires)&#xff…

危险区域闯入识别系统 yolov8

危险区域闯入识别系统通过YOLOv8网络模型技术,危险区域闯入识别系统对现场画面中发现有人违规闯入禁区,系统立即抓拍告警同步回传后台。YOLOv8 提供了一个全新的 SOTA 模型,包括 P5 640 和 P6 1280 分辨率的目标检测网络和基于 YOLACT 的实例…

打电话用的耳机哪个牌子的好?打电话专用的蓝牙耳机推荐

耳机是可以帮助我们进行工作的娱乐设备,像日常中使用最多的就是通话和听歌啦,近几年不论是从产品推出速度,还是做工及品质上来说都有了质的飞跃,下面分享几款打电话音质好的蓝牙耳机。 一、南卡小音舱Lite2蓝牙耳机 蓝牙版本&am…

Inpaint Anything (AI替换)

1、介绍 Inpaint Anything 是一个结合了 SAM、图像修补模型(例如 LaMa)和 AIGC 模型(例如 Stable Diffusion)等视觉基础模型的AI图像替换,修补系统。 基于此系统,用户可以方便的使用IA进行图像替换&#…

electron+vue3全家桶+vite项目搭建【14】electron多窗口,多语言切换不同步更新问题

文章目录 引入问题演示补充逻辑注意封装缓存工具类补充状态管理调整多语言初始化调整多语言切换组件 解决方案思路整理渲染进程监听语言切换主进程创建多语言切换处理语言切换组件通知主进程语言切换 最终实现效果演示 引入 我们之前在这篇文章中集成了 多语言切换&#xff0c…

各种加法器介绍——真值表、表达式、电路图、verilog代码实现

文章目录 前言一、半加器二、全加器三、串行/行波进位加法器(Ripple-Carry Adder/RCA)四、超前进位加法器(Lookahead Carry Adder/LCA)五、进位保存加法器(Carry Save Adder/CSA) 前言 2023.4.25 一、半加…

Stable Diffusion人工智能图像合成

AI 图像生成大有来头。新发布的开源图像合成模型称为Stable Diffusion,它允许任何拥有 PC 和像样的 GPU 的人想象出他们能想象到的几乎任何视觉现实。它几乎可以模仿任何视觉风格,如果你给它输入一个描述性的短语,结果就会像魔术一样出现在你…

HTML5 <span> 标签

实例 HTML5 <span>标签内的内容独立于文档&#xff0c;当对该标签应用样式时&#xff0c;包含在其中的内容会呈现出不同的视觉效果。请参考下述示例&#xff1a; 使用 <span> 元素对文本中的一部分进行着色&#xff1a; <p>我的母亲有 <span style&quo…

Redis缓存预热、雪崩、击穿和穿透

文章目录 1、Redis缓存预热2、Redis缓存雪崩3、Redis缓存击穿4、Redis缓存穿透 1、Redis缓存预热 Redis需要缓存预热是因为Redis是基于内存的缓存系统&#xff0c;当Redis启动时&#xff0c;它的内存是空的&#xff0c;需要在实际使用前将需要缓存的数据提前加载到内存中。这个…