Python 基础详解:数据类型(Data Types)—— 程序的“数据基石”

一、引言:为什么数据类型如此重要?

在 Python 编程中,数据类型决定了:

  • 数据的存储方式
  • 可以对数据执行的操作
  • 数据的取值范围
  • 不同类型之间的运算规则

理解数据类型是编写正确、高效程序的基础。Python 是动态类型语言,虽然你不需要显式声明类型,但必须清楚每个变量的类型及其行为。


二、Python 内置核心数据类型概览

Python 提供了丰富的内置数据类型,主要分为以下几类:

类别

数据类型

说明

数字类型

int, float, complex

数值计算

文本类型

str

字符串处理

布尔类型

bool

逻辑判断

序列类型

list, tuple, range

有序数据集合

映射类型

dict

键值对存储

集合类型

set, frozenset

无序唯一元素集合

二进制类型

bytes,bytearray,memoryview

二进制数据处理

💡 本文将重点讲解最常用的核心类型。


三、数字类型(Numeric Types)

1. 整数(int)

表示整数值,没有大小限制(仅受内存限制)。

age = 25
temperature = -10
big_number = 123456789012345678901234567890
常用操作:
a = 10
b = 3print(a + b)   # 13  加法
print(a - b)   # 7   减法
print(a * b)   # 30  乘法
print(a / b)   # 3.333...  除法(结果为 float)
print(a // b)  # 3   整除
print(a % b)   # 1   取余
print(a ** b)  # 1000  幂运算

⚠️ 注意:/ 运算符总是返回浮点数,即使结果是整数(如 4 / 2 返回 2.0)。


2. 浮点数(float)

表示带小数点的数字,遵循 IEEE 754 标准。

price = 19.99
pi = 3.1415926535
scientific = 1.5e-4  # 科学计数法,等于 0.00015
浮点数精度问题:
print(0.1 + 0.2)  # 输出:0.30000000000000004
print(0.1 + 0.2 == 0.3)  # False!

解决方案:使用 decimal 模块进行高精度计算(如金融计算):

from decimal import Decimal
print(Decimal('0.1') + Decimal('0.2') == Decimal('0.3'))  # True

3. 复数(complex)(了解即可)

用于数学和工程计算,形式为 a + bj

z = 3 + 4j
print(z.real)  # 3.0
print(z.imag)  # 4.0

四、文本类型:字符串(str)

字符串是字符的序列,用单引号、双引号或三引号包围。

name = "Alice"
message = 'Hello, World!'
multi_line = """这是一个
多行字符串"""

字符串的常用操作

1. 字符串拼接
first = "Hello"
last = "World"
full = first + " " + last  # "Hello World"

✅ 推荐使用 f-string(Python 3.6+):

name = "Alice"
age = 25
print(f"我是{name},今年{age}岁。")
2. 字符串索引与切片
text = "Python"print(text[0])    # 'P'  第一个字符
print(text[-1])   # 'n'  最后一个字符
print(text[1:4])  # 'yth'  切片 [start:end)
print(text[:3])   # 'Pyt'  从开头到索引3(不含)
print(text[3:])   # 'hon'  从索引3到结尾
3. 常用字符串方法

方法

说明

示例

.upper()

转大写

"hello".upper()

"HELLO"

.lower()

转小写

"HELLO".lower()

"hello"

.strip()

去除首尾空白

" abc ".strip()

"abc"

.replace(old, new)

替换

"abc".replace("a", "x")

"xbc"

.split(sep)

分割

"a,b,c".split(",")

['a', 'b', 'c']

.join(list)

连接

"-".join(['a','b','c'])

"a-b-c"

.find(sub)

查找位置

"abc".find("b")

1

.startswith()

是否以某字符串开头

"abc".startswith("a")

True

email = "  Alice@EXAMPLE.COM  "
clean_email = email.strip().lower()
print(clean_email)  # "alice@example.com"

五、布尔类型(bool)

布尔值只有两个:TrueFalse,用于逻辑判断。

is_student = True
has_permission = False

布尔值的来源:

  • 比较运算的结果
  • 条件判断的结果
  • 任何对象都可以被“真值测试”
print(5 > 3)           # True
print(10 == 10)        # True
print("hello" != "")   # True# 真值测试(Truthiness)
print(bool(1))         # True
print(bool(0))         # False
print(bool("abc"))     # True
print(bool(""))        # False
print(bool([1, 2]))    # True
print(bool([]))        # False

规则:空值(0, "", [], {}, None)为 False,其他为 True


六、序列类型

1. 列表(list)—— 有序、可变

列表是最常用的数据结构,可以存储不同类型的数据。

fruits = ["苹果", "香蕉", "橙子"]
numbers = [1, 2, 3, 4, 5]
mixed = ["Alice", 25, True, 3.14]
列表的常用操作:
# 访问元素
print(fruits[0])     # "苹果"
print(fruits[-1])    # "橙子"# 修改元素
fruits[1] = "葡萄"# 添加元素
fruits.append("草莓")      # 末尾添加
fruits.insert(1, "芒果")   # 在索引1处插入# 删除元素
fruits.remove("苹果")      # 删除指定值
del fruits[0]             # 删除索引0的元素
popped = fruits.pop()     # 弹出并返回末尾元素# 列表长度
print(len(fruits))# 列表切片(同字符串)
print(numbers[1:4])  # [2, 3, 4]# 遍历列表
for fruit in fruits:print(fruit)
列表推导式(List Comprehension)

一种简洁创建列表的方式:

# 普通方式
squares = []
for x in range(1, 6):squares.append(x**2)# 推导式方式(推荐)
squares = [x**2 for x in range(1, 6)]
print(squares)  # [1, 4, 9, 16, 25]# 带条件的推导式
evens = [x for x in range(10) if x % 2 == 0]

2. 元组(tuple)—— 有序、不可变

元组与列表相似,但创建后不能修改

coordinates = (10, 20)
person = ("张三", 25, "北京")
single_item = (42,)  # 单个元素的元组,必须加逗号
元组的特点:
  • 更安全:防止意外修改
  • 性能略高:占用内存更少
  • 可作为字典的键(列表不行)
# 访问元素(同列表)
print(person[0])  # "张三"# 不可修改
# person[0] = "李四"  # TypeError!

3. range 对象

表示一个不可变的数字序列,常用于 for 循环。

r1 = range(5)        # 0, 1, 2, 3, 4
r2 = range(1, 6)     # 1, 2, 3, 4, 5
r3 = range(0, 10, 2) # 0, 2, 4, 6, 8 (步长为2)for i in range(3):print(i)  # 0, 1, 2

💡 range 不是列表,但可以转换:

list(range(5))  # [0, 1, 2, 3, 4]

七、映射类型:字典(dict)

字典是键值对(key-value)的集合,类似于现实生活中的“字典”。

student = {"name": "王五","age": 22,"city": "上海","grades": [85, 90, 78]
}

字典的常用操作:

# 访问值
print(student["name"])        # "王五"
print(student.get("age"))     # 22
print(student.get("phone", "未知"))  # 安全访问,键不存在时返回默认值# 修改/添加值
student["age"] = 23           # 修改
student["major"] = "计算机"    # 添加新键值对# 删除键值对
del student["city"]
popped = student.pop("grades")  # 弹出并返回值# 遍历字典
for key in student:print(f"{key}: {student[key]}")# 推荐的遍历方式
for key, value in student.items():print(f"{key}: {value}")# 获取所有键、值、键值对
print(student.keys())    # dict_keys(['name', 'age', 'major'])
print(student.values())  # dict_values(['王五', 23, '计算机'])
print(student.items())   # dict_items([('name', '王五'), ...])
字典推导式
# 创建平方数字典
squares_dict = {x: x**2 for x in range(1, 6)}
print(squares_dict)  # {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

八、集合类型

1. 集合(set)—— 无序、唯一

集合存储不重复的元素,且无序。

unique_numbers = {1, 2, 3, 3, 4}
print(unique_numbers)  # {1, 2, 3, 4}  重复的3被自动去除
集合的常用操作:
set1 = {1, 2, 3}
set2 = {3, 4, 5}# 并集
print(set1 | set2)  # {1, 2, 3, 4, 5}
print(set1.union(set2))# 交集
print(set1 & set2)  # {3}
print(set1.intersection(set2))# 差集
print(set1 - set2)  # {1, 2}
print(set1.difference(set2))# 对称差集
print(set1 ^ set2)  # {1, 2, 4, 5}# 添加/删除
set1.add(4)
set1.remove(1)  # 元素必须存在
set1.discard(10)  # 元素不存在也不会报错

2. 冻结集合(frozenset)

不可变的集合,可以作为字典的键。

fset = frozenset([1, 2, 3])
# fset.add(4)  # AttributeError!

九、类型转换(Type Casting)

Python 允许在不同类型之间转换。

函数

说明

示例

int(x)

将参数转换为整数类型

int("123") → 123

float(x)

将参数转换为浮点数类型

float("3.14") → 3.14

str(x)

将参数转换为字符串类型

str(100) → "100"

bool(x)

将参数转换为布尔值类型

bool(1) → True

list(x)

将参数转换为列表类型

list("abc") → ['a', 'b', 'c']

tuple(x)

将参数转换为元组类型

tuple([1, 2]) → (1, 2)

set(x)

将参数转换为集合类型,去除重复元素

set([1, 2, 2]) → {1, 2}

dict(x)

将一系列键值对转换为字典类型

需要提供键值对序列

请注意,对于`dict(x)`函数的具体示例,通常需要给出一个由键值对组成的可迭代对象作为输入。例如,可以使用列表中的元组来创建字典:dict([("key1", "value1"), ("key2", "value2")])将会得到{"key1": "value1", "key2": "value2"}这样的结果。

# 示例:用户输入通常是字符串,需要转换
age_str = input("请输入年龄:")  # "25"
age_int = int(age_str)
print(age_int + 5)  # 30

⚠️ 转换失败会抛出异常:

int("abc")  # ValueError!

十、总结:Python 数据类型核心要点

类型

可变性

有序性

唯一性

典型用途

int/ float

数值计算

str

文本处理

bool

逻辑判断

list

存储有序数据列表

tuple

存储不可变数据序列

dict

✅(Python 3.7+)

键唯一

存储键值对映射

set

存储唯一元素集合

学习建议:

  1. 熟练掌握 int, float, str, bool, list, dict —— 这是最常用的五种类型。
  2. 理解可变与不可变的区别list 可变,tuple 不可变。
  3. 善用推导式:让代码更简洁高效。
  4. 注意类型转换:特别是用户输入和文件读取时。

📌 动手练习

  1. 创建一个包含你个人信息的字典(姓名、年龄、城市等)。
  2. 创建一个列表,存储你喜欢的电影,并用 for 循环打印。
  3. 使用 set 找出两个列表的共同元素。
# 示例练习
my_info = {"name": "你的名字", "age": 20, "hobbies": ["阅读", "编程"]}
print(f"我叫{my_info['name']},爱好是{', '.join(my_info['hobbies'])}。")

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

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

相关文章

WindowsLinux系统 安装 CUDA 和 cuDNN

Windows安装前的准备工作 检查硬件兼容性:确认电脑显卡为 NVIDIA GPU。通过快捷键 Win R 唤出“运行”,输入“control /name Microsoft.DeviceManager”唤出“设备管理器”,点击“显示适配器”查看是否有 NVIDIA 字样。 验证 CUDA 支持性&a…

工业数采引擎-通信链路SOCKET

通信库:DotNetty 封装实现:TcpServer、TcpClient、Udp TCP协议特性:面向连接协议;每个新连接都会创建独立的ChannelHandler实例;TcpHandler构造函数在每次客户端连接时触发 UDP协议特性:无连接协议&#…

PHP小白零基础入门(附视频教程)

概述 PHP是一种通用开源脚本语言,常用于服务器端Web开发,具有语法简单、上手快等特点。视频教程:https://pan.quark.cn/s/8f214c23301b 搭建开发环境: 选择集成工具:可选择XAMPP(支持Windows/Mac/Linux…

验证码等待时间技术在酒店自助入住、美容自助与社区场景中的应用必要性研究—仙盟创梦IDE

代码 代码 完整<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>验证码倒计时</title><s…

Flask从入门到实战:基础、进阶、项目架构与接口测试

本文将带你从零开始掌握Flask框架&#xff0c;涵盖基础使用、进阶技巧、项目架构设计&#xff0c;并提供完整的接口测试客户端代码。 目录一、Flask基础入门1.1 Flask简介与安装1.2 第一个Flask应用1.3 路由与请求处理1.4 请求与响应处理二、Flask进阶使用2.1 模板引擎Jinja22.…

华为云产品图解

框架图核心说明: 1. 分层逻辑清晰 基础设施层(IaaS):提供最基础的计算(ECS/BMS)、存储(OBS/EVS)、网络(VPC/CDN)资源,是所有上层服务的 “物理底座”。 平台服务层(PaaS):基于 IaaS 构建,提供容器编排(CCE)、数据库(GaussDB)、大数据与 AI(ModelArts)、中…

Git 中如何回退到以前的提交记录?

回答重点要在 Git 中回退到以前的提交记录&#xff0c;你可以使用 git reset 命令。这个命令有三个常用选项来控制你想要回退的程度&#xff1a;1&#xff09; git reset --soft <commit> &#xff1a;仅修改 HEAD 指针&#xff0c;不修改索引和工作区内容。2&#xff09…

JavaWeb03——基础标签及样式(表单)(黑马视频笔记)

1.表单标签 及 表单属性表单标签是 &#xff1a;<form> 表单属性有&#xff1a;action 和 method&#xff1b;action属性&#xff1a;规定向何处发送表单数据。method属性&#xff1a;规定用什么方法发送数据。&#xff08;get和post&#xff09;get:在发送的url后面拼接…

STM32的SPI通信(软件读写W25Q64)

在了解完I2C通信后&#xff0c;不免会接触到到SPI通信。而一开始&#xff0c;可能会觉得两者好似没什么区别。为什么要学SPI呢&#xff0c;I2C和SPI有什么区别呢。为此我详细展开说说。1.什么是 SPI&#xff1f;SPI&#xff0c;全称 Serial Peripheral Interface&#xff0c;中…

子词分词器(Byte Pair Encoding + WordPiece)

参考文章&#xff1a;子词分词器BPE和WordPiece理解_wordpeice-CSDN博客 子词分词器BPE和WordPiece理解_wordpeice-CSDN博客 WordPiece 和 BPE 的区别-CSDN博客 点互信息&#xff08;PMI&#xff09;和正点互信息&#xff08;PPMI&#xff09;-CSDN博客 https://zhuanlan.z…

阿里招AI产品运营

AI产品运营&#xff08;岗位信息已经过jobleap.cn授权&#xff0c;可在csdn发布&#xff09;灵犀互娱 广州收录时间&#xff1a; 2025年08月05日职位描述负责AI技术在游戏行业的应用与落地&#xff0c;专注于海外市场的运营中台建设&#xff1b; 将结合AI技术与游戏行业特点&a…

Git 分支迁移完整指南(结合分支图分析)

基于分支图的当前状态分析 分支图关键信息解读​分支结构​&#xff1a; #mermaid-svg-gc9SPnwlbrM2FzHf {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-gc9SPnwlbrM2FzHf .error-icon{fill:#552222;}#mermaid-svg-…

小程序省市级联组件使用

背景。uni-data-picker组件用起来不方便。调整后级联效果欠佳&#xff0c;会关闭弹窗需要重新选择。解决方案。让cursor使用uniapp 原生组件生成懒加载省市级联 <template><view class"picker-cascader"><view class"cascader-label">&l…

Java技术栈/面试题合集(8)-Redis篇

场景 Java入门、进阶、强化、扩展、知识体系完善等知识点学习、性能优化、源码分析专栏分享: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/140870227 通过对面试题进行系统的复习可以对Java体系的知识点进行查漏补缺。 注: 博客: 霸道流氓气质-CSDN博…

川翔云电脑:引领开启算力无边界时代

一、何为云电脑&#xff1f;重新定义“主机”概念 云电脑将传统本地计算机的核心硬件资源&#xff08;CPU、GPU、内存、硬盘等&#xff09;集中部署于远程高性能数据中心&#xff0c;通过网络技术将虚拟桌面实时传输到您的任意访问设备上。 ​​如同将高配主机装入云端&#…

tc 介绍

目录 1.背景 2. tc介绍 3. tc 丢包 1.背景 需要使用tc 构造丢包场景&#xff0c;注意tc 丢包不能确定丢弃的是否是payload 数据包&#xff0c;有可能丢弃 ack 包。 2. tc介绍 1. 无法正常使用 [rootpool-100-1-1-18 /]# [rootpool-100-1-1-18 /]# tc qdisc add dev swif…

LabVIEW注册表操作

​本文围绕LabVIEW中操作Windows 注册表的 4 个 VI 展开&#xff0c;介绍其功能、使用场景等并对比&#xff0c;助力工程师高效运用注册表交互功能。各 VI 功能说明&#xff08;一&#xff09;Write the Key功能&#xff1a;创建新注册表键&#xff0c;设置其值&#xff0c;随后…

阿里云部署若依后,浏览器能正常访问,但是apifox和小程序访问后报错链接被重置

项目场景&#xff1a;阿里云部署若依后浏览器能正常通过https访问,但是在apifox和小程序调用接口的时候生报错E问题描述apifox报错&#xff1a;curl报错&#xff1a;通过curl可以清楚的看到通过域名是能准确的访问到IP地址的&#xff0c;说明这个DNS是没有问题的&#xff0c;但…

升级 Elasticsearch 到新的 AWS Java SDK

作者&#xff1a;来自 Elastic David Turner, Dianna Hohensee Elasticsearch 使用官方的 AWS Java SDK 集成了某些 Amazon Web Services (AWS) 功能。这些集成最早在近 10 年前发布的 Elasticsearch 2.0 版本中引入。 最近&#xff0c;AWS 宣布 Elasticsearch 过去十年使用的…

从0到1学习微服务项目黑马头条day01-《APP端登录功能实现》

个人主页&#xff1a;VON文章所属专栏&#xff1a;黑马头条个人唯一微信&#xff1a;微信 有一起学习微服务的小伙伴可以加作者微信&#xff1a;单击即可添加 目录 一、前言 二、项目概述 1、技术栈 2、项目引入 三、改造项目 1、创建heima-leadnews-user 2、创建实体…