Python从入门到实战(二):数据类型与运算符

📅 2026/7/3 16:57:44
Python从入门到实战(二):数据类型与运算符
目录一、 输入与输出基础1. input 函数的运行机制2. print 函数的基本用法二、Python 数据类型1. 数据类型概述与类型检测2. 整型与数值机制3. 为什么 4300 位整数会报错4. 浮点型5. 布尔型三、字符串基础1. 字符串的定义方式2. 转义字符3. 字符串格式化输出四、数据类型转换1. 隐式类型转换2. 显式类型转换五、Python 运算符1. 算术运算符2. 赋值运算符3. 比较运算符4. 逻辑运算符5. 运算符优先级六、Python 中的进制1.进制表示2. 内置进制转换函数总结一、 输入与输出基础在 Python 程序开发中与用户进行交互是最基础的功能。程序需要接收外部输入的数据经过内部逻辑处理后再将结果呈现给用户。这一过程主要依赖于内置函数 input() 和 print()1. input 函数的运行机制input() 函数用于阻塞程序运行并等待用户从标准输入通常是键盘中读取内容。其基本语法结构如下variable input(提示信息)接收标准输入与阻塞机制当程序执行到 input() 函数时控制台会显示括号内的提示字符串并暂停执行阻塞。此时程序会持续等待直到用户在控制台输入完成并按下回车键。接收到回车信号后input() 会读取用户输入的所有字符并将其作为一个整体赋值给左侧的变量随后程序恢复向下执行核心原理解析为什么 input返回值始终为字符串类型无论用户在控制台输入的是整数、浮点数、布尔值还是其他任何形式的内容input() 函数的返回值始终是字符串类型这是因为在计算机底层标准输入流是以字符流的形式传输数据的。Python 为了保证安全性和通用性不会对用户的输入做盲目的隐式类型转换而是将输入内容原封不动地打包成字符串我们可以通过以下代码来验证这一行为# 即使输入数字 100 user_data input(请输入一个数字) print(type(user_data)) # 输出结果class str由于返回的是字符串若直接将其用于算术运算将会引发类型错误TypeError。例如执行 user_data 10 会导致程序崩溃。因此在后续处理数值计算时必须配合显式类型转换使用2. print 函数的基本用法print() 函数负责将指定的数据或变量输出到标准输出设备通常是屏幕控制台。它可以同时接收多个参数并支持通过关键字参数自定义输出格式其常用完整语法如下print(value1, value2, ..., sep , end\n)多对象输出可以用逗号 , 分隔多个变量或常量print() 会依次将它们打印在同一行sep 参数分隔符用于定义多个输出对象之间的连接字符默认值是一个空格end 参数结束符用于定义输出完毕后的终止字符默认值是换行符 \n。如果希望连续多次调用 print 却不换行可以将 end 修改为空字符串或其他字符基本代码示例name Alice age 25 # 1. 基础输出 print(name) # 2. 输出多个对象默认以空格分隔 print(姓名, name, 年龄, age) # 输出姓名 Alice 年龄 25 # 3. 修改分隔符 sep print(2026, 07, 02, sep-) # 输出2026-07-02 # 4. 修改结束符 end 避免换行 print(Hello, end ) print(World) # 输出Hello World两句在同一行显示二、Python 数据类型在 Python 中变量不需要显式声明类型类型是在运行时根据赋值自动确定的。这种特性被称为动态类型机制。然而变量所指向的对象本身具有严格的数据类型这决定了该对象可以参与哪些运算1. 数据类型概述与类型检测为了确保程序逻辑的正确性Python 提供了内置函数 type()用于在运行时动态检测对象的数据类型# 示例通过 type() 函数获取对象类型 x 10 y 3.14 print(type(x)) # 输出class int print(type(y)) # 输出class floattype() 的返回值是一个类对象如 class int它准确反映了当前变量在内存中所指向的数据形态2. 整型与数值机制Python 中的整型用于表示不带小数点的正整数、负整数和零。与其他编译型语言如 C、Java不同Python 的整型具有非常独特的内存管理机制Python 的大整数自动扩容机制在 C 语言中整型受到计算机硬件限制超出范围就会发生溢出。而 Python 3 中的 int 类型是变长对象。其底层实现为一个结构体内部使用数组来存储数字的位。 这意味着 Python 的整数理论上没有大小限制只要计算机的内存足够它就可以自动扩容以存储任意大小的整数# 计算 2 的 100 次幂Python 可以直接精确展示 large_num 2 ** 100 print(large_num) # 输出12676506002282294014967032053763. 为什么 4300 位整数会报错既然 Python 理论上支持无限大的整数那么通过幂运算构建一个极大的数值并打印它会出现什么结果呢我们尝试运行以下代码a 9 ** 9999 # 计算 9 的 9999 次方 print(a) # 打印变量 a运行上述代码后控制台并没有如预期般输出结果而是触发了如下错误报错信息明确提及了 Exceeds the limit (4300 digits)超过了 4300 位的限制。但需要特别注意的是这并不代表 Python 最大只能表示 4300 位的数字为了验证这一点如果我们把 print(a) 这一行删掉只保留纯数学运算a 9 ** 9999 # 9 的 9999 次方 b a 100 # 让大整数直接参与数学运算此时再次运行程序会发现代码正常运行没有抛出任何错误。这说明变量 a 在内存中是完全可以被正常存储并参与后续数学运算的为什么加上 print(a) 就会报错导致报错的核心原因在于类型的转换过程当调用 print(a) 打印一个整型对象时Python 底层需要先将该数字的类型转换为字符串类型然后才能输出到控制台自 Python 3.11 版本起为了应对超长数字转换时可能引发的拒绝服务攻击等安全隐患Python 对 超大整数转换为字符串 的长度进行了限制默认上限即为4300 位。由于 9 ** 9999 计算出的结果远超 4300 位因此在由 int 转换为 str 的阶段被拦截并报错扩展知识在实际开发中如果确有特殊业务场景需要突破这一安全限制可以通过标准库中的 sys 模块来解除 4300 位的转换限制import sys # 将限制设置为 0表示不做任何转换长度限制 sys.set_int_max_str_digits(0) x 9 ** 9999 # 9 的 9999 次方 print(x) # 此时可以正常打印出完整的超大整数4. 浮点型浮点型用于表示带有小数部分的数字在 Python 中统一由双精度浮点数实现IEEE 754 标准与精度Python 的 float 底层遵循IEEE 754 双精度浮点数标准占用 64 位二进制空间。由于计算机内部使用二进制存储数据许多十进制有限小数在二进制下是无限循环小数。因此浮点数运算可能会出现微小的精度偏差print(0.1 0.2) # 输出0.30000000000000004在编写程序时应避免直接使用运算符来判断两个浮点数是否相等。对于高精度计算如金融数据应使用 Python 标准库中的 decimal 模块5. 布尔型布尔型用于表示逻辑上的真与假它只有两个字面量值True 和 False注意首字母必须大写布尔值的本质在 Python 内部布尔型bool是整型int的一个子类。其中 True 的底层数值存储为 1False 的底层数值存储为 0。这意味着布尔值可以直接参与算术运算但在实际开发中并不推荐这样做应当保持其逻辑属性print(True 1) # 输出2 print(False * 5) # 输出0 # 验证子类关系 print(isinstance(True, int)) # 输出True三、字符串基础在 Python 中字符串是用于存储和表示文本数据的基本数据类型。作为一种序列类型字符串在日常开发中的文本处理、日志记录和数据输出中被广泛使用1. 字符串的定义方式Python 提供了高度灵活的字符串定义方式允许使用单引号、双引号或三引号来声明文本单引号与双引号在表达单行文本时这两者在语法上完全等价三引号三个单引号 或三个双引号 支持编写多行字符串并且能够完整保留文本内的换行符和空格格式。此外三引号也常用于编写函数的类文档字符串# 单引号与双引号定义 str1 Hello Python str2 Hello Python # 三引号定义多行文本 str3 第一行内容 第二行内容 第三行内容引号的嵌套如果字符串内部本身包含引号可以通过交替使用单双引号来避免语法冲突而不需要使用转义字符。例如# 字符串内部含有单引号外部则使用双引号 sentence Its a beautiful day.2. 转义字符转义字符用于在字符串中表示一些无法直接输入的特殊字符如换行、制表符或者具有特殊语法含义的字符如引号本身。转义字符统一以反斜杠开头常用转义字符表转义字符含义示例输出结果\n换行符 (Line Feed)Hello\nWorld文本分为两行输出\t水平制表符 (Tab)Name:\tAlice在文本间插入等宽空格\反斜杠自身 ()C:\Users\Desktop输出单个反斜杠单引号Its ok在单引号字符串中正常输出单引号双引号He said Hi在双引号字符串中正常输出双引号原始字符串在处理 Windows 文件路径或正则表达式时文本中往往包含大量的反斜杠。为了防止这些反斜杠被 Python 误判定为转义字符可以在字符串的第一个引号前加上字母 r 或 R将其声明为原始字符串。在原始字符串中所有的转义字符都将失去特殊含义转为普通字符输出# 错误示范\t 会被识别为制表符 path1 C:\user\test\new_file.txt # 正确做法使用 r 声明原始字符串 path2 rC:\user\test\new_file.txt print(path2) # 输出C:\user\test\new_file.txt3. 字符串格式化输出在输出文本时经常需要将变量动态地嵌入到字符串的指定位置。Python 提供了多种格式化输出的机制传统占位符格式化这是源自 C 语言 printf 的传统格式化方式。通过在字符串中使用 %s字符串、%d整数、%f浮点数等占位符并在字符串末尾通过 % 传入具体的变量name 张三 age 18 print(该同学名叫 %s今年 %d 岁。 % (name, age))格式化精度控制在使用占位符或格式化机制时可以通过数字来精准控制数据的显示宽度和浮点数的小数位数。其标准格式为 %[宽度].[精度]fpi 3.1415926 # 控制保留两位小数会进行四舍五入 print(圆周率%.2f % pi) # 输出3.14 # 控制总宽度为 8 位小数保留 2 位宽度不足时左侧补空格 print(数字%8.2f % pi) # 输出 3.14现代格式化机制f-string (推荐)自 Python 3.6 版本起引入了更为高效、直观的 f-string格式化字符串字面量。它的写法是在字符串前加上字母 f 或 F并在字符串内部使用 {variable} 直接引用变量f-string 不仅代码可读性极高而且在底层运行效率上也显著优于 % 表达式name 李四 score 92.6 # 基础 f-string 应用 print(f学生{name}期末成绩{score}) # f-string 中的精度控制 print(f期末成绩精确到整数{score:.0f}) # 输出93四、数据类型转换在实际开发中不同数据类型之间的交互频繁发生。例如通过 input() 获取的字符串数字无法直接参与数学运算必须将其转换为数值类型。Python 提供了隐式类型转换与显式类型转换两种机制来解决这一问题1. 隐式类型转换隐式类型转换是指 Python 解释器在执行表达式运算时自动将一种数据类型提升为另一种更为通用的类型以防止数据精度丢失。这一过程无需开发者手动干预触发场景通常发生在低精度数值如 int与高精度数值如 float进行混合算术运算时转换规则Python 会自动将 int 转换为 float运算结果亦为 float 类型num_int 10 # 整型 num_float 3.5 # 浮点型 # 隐式转换发生num_int 自动提升为 10.0 参与运算 result num_int num_float print(result) # 输出13.5 print(type(result)) # 输出class float字符串类型str与数值类型int/float之间不能触发隐式类型转换。执行 10 5 会直接引发 TypeError2. 显式类型转换显式类型转换是指开发者通过调用 Python 的内置构造函数手动将某个对象强制转换为目标数据类型① int(x, [base])转换为整型用于将其他类型的数据转换为整数浮点数转整型直接截断小数部分不进行四舍五入仅保留整数位字符串转整型字符串内部必须是纯纯的合法数字否则会报错参数 base若转换对象是字符串可传入第二个参数表示原数据的进制基数详见后文进制部分print(int(3.9)) # 输出3截断小数 print(int(-15)) # 输出-15 # 错误示范字符串内含有非数字字符无法强制转换 # print(int(3.14)) # 报错 ValueError # print(int(abc)) # 报错 ValueError② float(x)转换为浮点型用于将整数或符合数值规范的字符串转换为浮点数。整数转换后会自动在末尾补 .0print(float(10)) # 输出10.0 print(float(3.14)) # 输出3.14 print(float(1e3)) # 输出1000.0支持科学计数法字符串③ str(x)转换为字符串型用于将任何其他数据类型转换为文本字符串格式。这是一个万能转换函数几乎所有 Python 对象都可以被成功转换为字符串形态print(str(100)) # 输出100 print(str(3.14)) # 输出3.14 print(str(True)) # 输出True④ bool(x)转换为布尔型在 Python 中所有对象在需要逻辑判断的环境下都会隐式或显式地被识别为 True 或 False。通过 bool() 函数可以检测一个对象的布尔本质Python 的规则非常简单绝大多数对象都是 True只有 空值 或 零值 会被判定为 False被判定为 False 的常见核心对象包括常量None、False数值中的零值0、0.0空的容器/序列空字符串、[]空列表、()空元组、{}空字典# 以下转换结果均为 False print(bool(0)) print(bool(0.0)) print(bool()) # 以下转换结果均为 True print(bool(1)) print(bool( )) # 包含空格的字符串不是空字串 print(bool(False)) # 这是一个非空字符串五、Python 运算符运算符是用于对变量和数据执行特定计算的符号。Python 提供了丰富的运算符涵盖了从基础算术到复杂的逻辑控制1. 算术运算符算术运算符用于执行基本的数学计算。Python 的算术运算符在处理除法时具有特殊的行为运算符说明示例结果加法5 38-减法5 - 32*乘法5 * 315/除法真除法5 / 22.5结果始终为浮点数//整除地板除5 // 22向下取整丢弃小数%取余求模运算5 % 21返回除法的余数**幂运算求平方 / 次方2 ** 38即 2 的 3 次方注意使用 // 对负数进行整除时同样遵循向下取整原则。例如 -5 // 2 的结果是 -3而不是 -22. 赋值运算符赋值运算符用于将右侧表达式的值存储到左侧的变量中。除了标准赋值运算符 之外Python 还支持复合赋值运算符以便简化代码运算符示例等价形式x 5x 5x 3x x 3-x - 3x x - 3*x * 3x x * 3/x / 3x x / 3//x // 3x x // 3%x % 3x x % 3**x ** 3x x ** 33. 比较运算符比较运算符用于判断两个对象之间的大小关系其计算结果固定为布尔值运算符说明示例结果检查两个值是否相等5 5True!检查两个值是否不相等5 ! 3True大于5 3True小于3 5True大于或等于5 5True小于或等于3 5True4. 逻辑运算符逻辑运算符用于连接多个布尔表达式常用于控制流语句的条件判断运算符逻辑含义运行规则and逻辑与 (与)只有当两侧的表达式均为 True 时结果才为 Trueor逻辑或 (或)两侧的表达式只要有一个为 True结果即为 Truenot逻辑非 (非)对布尔值取反。not True 返回 False反之亦然短路求值Python 的 and 和 or 运算符具有短路特性。这意味着它们在运行过程中一旦能够提前确定整个表达式的结果就会立即停止后续的计算并返回最后计算的那个表达式的值不一定是布尔值and的短路如果左侧表达式为 False整个表达式必然为 False此时系统不再计算右侧表达式直接返回左侧的值or 的短路如果左侧表达式为 True整个表达式必然为 True系统直接返回左侧的值不再执行右侧代码# and 短路示例左侧为 0 (False)不再看右侧直接返回 0 print(0 and hello) # 输出0 # or 短路示例左侧为 10 (True)不再看右侧直接返回 10 print(10 or world) # 输出105. 运算符优先级当一个复杂的表达式中包含多种运算符时Python 解释器会按照既定的优先级从高到低依次进行计算。以下是常用运算符的优先级由高到低排列同一行优先级相同幂运算最高*, /, //, % 乘除集群, - 加减集群, , , , , ! 比较运算符not 逻辑非and 逻辑与or 逻辑或最低尽管 Python 底层有严格的优先级限制但在编写包含复杂逻辑的表达式时强烈建议使用括号显式指定计算顺序。这不仅能避免逻辑错误还能显著提升代码的可读性。例如使用(a 10) and (b 5) 比直接书写 a 10 and b 5 更为严谨清晰六、Python 中的进制在计算机科学中除了我们日常使用的十进制之外二进制、八进制和十六进制也是常见的数据表示形式。Python 提供了对多进制数据的原生支持并内置了便捷的转换函数1.进制表示在 Python 代码中可以直接通过特定的前缀来书写不同进制的整数。Python 会在底层自动将它们识别并存储为整型对象。二进制 (Binary)使用前缀 0b 或 0B逢二进一包含数字 0 和 1八进制 (Octal)使用前缀 0o 或 0O逢八进一包含数字 0 到 7十六进制 (Hexadecimal)使用前缀 0x 或 0X逢十六进一包含数字 0-9 以及字母 a-f或 A-F分别代表 10-152. 内置进制转换函数Python 提供了两组核心的转换工具一组用于将十进制整数转换为其他进制的字符串另一组则用于将其他进制的字符串逆向解析为十进制整数十进制转其他进制 (bin() / oct() / hex())这三个内置函数接收一个十进制整型作为参数并返回对应进制的字符串表示自带进制前缀bin(num)转换为二进制字符串oct(num)转换为八进制字符串hex(num)转换为十六进制字符串number 45 print(bin(number)) # 输出0b101101 print(oct(number)) # 输出0o55 print(hex(number)) # 输出0x2d # 注意返回值均为字符串类型 print(type(hex(number))) # 输出class str其他进制转十进制在前文数据类型转换中提到int(string, base) 函数拥有一个隐藏的 base 参数。当我们需要将一个表示特定进制的字符串转换为十进制整数时可以指定 base 的值即进制基数# 1. 解析二进制字符串base2 print(int(101101, 2)) # 输出45 # 2. 解析十六进制字符串base16 print(int(2d, 16)) # 输出45 # 3. 自动识别前缀如果字符串自带 0b/0x 等前缀base 设置为 0 可以让 Python 自动识别 print(int(0x2d, 0)) # 输出45总结我们在本篇详细探讨了 Python 的核心基础语法。我们首先理解了控制台交互的 input() 与 print() 函数明确了输入流默认返回字符串的底层逻辑。随后我们深入探讨了 Python 的数据类型形态包括具有自动扩容机制的整型、在 3.11 版本引入 4300 位转换限制的底层安全考量、遵循 IEEE 754 标准的浮点数以及本质为整型子类的布尔型同时我们掌握了高效率的 f-string 字符串格式化技巧解析了隐式与显式数据类型的转换并系统梳理了各类运算符的优先级和短路求值特性掌握了这些核心数据形态与计算规则后程序已经具备了处理基础数据的能力。在下一篇教程中我们将正式跨入流程控制的大门共同探索 Python 中的条件判断语句与循环结构