
大家好我是你们的技术小伙伴。今天咱们来聊聊Python的基础知识。无论你是刚接触编程的小白还是想巩固基础的老手这篇文章都将带你系统地梳理Python的核心概念。内容涵盖注释、变量、进制、数据类型、输入输出、运算符以及编码规范每个知识点都配有详细的解释和代码示例保证让你看得懂、学得会、用得上。废话不多说我们直接开始1. 注释代码里的“说明书”1.1 什么是注释注释就是写在代码里用来解释代码功能的文字。它不会被Python解释器执行纯粹是给人看的。写注释是一个好习惯能让自己和别人更容易理解代码的意图。1.2 注释的作用提高可读性复杂逻辑加上注释过几个月再看也不会一脸懵逼。屏蔽代码调试时可以暂时“注释掉”某段代码让它不执行。定位错误通过注释可以快速缩小问题范围。1.3 单行注释在Python中#后面的内容都是注释。例如python# 这是一条单行注释 print(Hello, World!) # 这也是注释建议在代码和#之间加两个空格建议#后面跟一个空格语句和#之间加两个空格这样更整洁。1.4 多行注释用三个单引号或三个双引号括起来的内容可以跨越多行常用于函数或模块的说明文档。python 这是一个多行注释 可以写很多行说明文字 注意多行注释本质上是一个字符串如果不赋值给变量它就会被解释器忽略起到了注释的作用。但不能嵌套使用。2. 变量数据的“标签”2.1 什么是变量变量就像是一个贴了标签的盒子我们可以把数据放进盒子里然后通过标签来找到和使用这个数据。在内存中变量名对应一个存储空间里面存放着具体的数据值。可以把变量理解为一个“可以赋值的标签”它指向特定的值。2.2 创建变量Python中创建变量非常简单变量名 值。不需要提前声明类型赋值后变量就自动存在了。pythonname 张三 # 字符串 age 18 # 整数 weight 65.5 # 浮点数 result age 5 # 表达式的结果赋给变量 print(result) # 输出 23还可以同时创建多个变量pythona b c 10 # 三个变量都指向10 x, y, z 1, 2, 3 # x1, y2, z32.3 标识符命名规则标识符就是程序中我们自己命名的名字比如变量名、函数名等。命名必须遵守以下规则只能包含字母、数字、下划线且不能以数字开头。区分大小写name和Name是两个不同的变量。不能使用Python的关键字后面会列出。尽量简短且有意义比如用student_name而不是sn。关键字Python中有一些特殊用途的单词不能用作标识符。可以通过keyword模块查看pythonimport keyword print(keyword.kwlist)常见的关键字有False、True、None、and、or、not、if、else、for、while、break、continue、def、class、return、import等。2.4 命名方法常见的命名风格有三种大驼峰每个单词首字母大写如StudentName常用于类名。小驼峰第一个单词首字母小写后面单词首字母大写如studentName在Python中不常用。蛇形单词之间用下划线连接如student_namePython官方推荐变量和函数使用这种风格。2.5 修改变量变量的值可以随时修改Python始终记住最新的值。pythonmessage Hello print(message) # Hello message World print(message) # WorldPython还支持一种便捷的变量交换pythona, b 10, 20 a, b b, a # 交换 print(a, b) # 20 102.6 常量常量是指在程序运行过程中值不会改变的量。Python没有真正的常量类型通常约定使用全大写字母来表示常量提醒开发者不要修改它。pythonPI 3.14159 MAX_SIZE 1003. 进制与计算机底层编码计算机的世界只有0和1所有数据最终都要转换成二进制才能存储和运算。了解进制和原码、反码、补码能帮助我们理解计算机是如何处理数字的。3.1 常见的进制二进制0、1满2进1。八进制0~7满8进1。十进制0~9满10进1。十六进制0~9及A~F满16进1其中A10B11C12D13E14F15。3.2 Python中如何表示不同进制在Python中可以用前缀来直接表示不同进制的整数pythonbin_num 0b1010 # 二进制对应十进制10 oct_num 0o12 # 八进制对应十进制10 dec_num 10 # 十进制 hex_num 0xA # 十六进制对应十进制10内置函数可以方便地进行进制转换pythonnum 10 print(bin(num)) # 0b1010 print(oct(num)) # 0o12 print(hex(num)) # 0xa3.3 二进制转十进制规则从最低位最右边开始每一位乘以2的位数-1次方然后求和。例如二进制1011转十进制text1*2^3 0*2^2 1*2^1 1*2^0 8 0 2 1 113.4 十进制转二进制规则不断除以2记录余数直到商为0然后将余数倒序排列。例如56转二进制text56 ÷ 2 28 余 0 28 ÷ 2 14 余 0 14 ÷ 2 7 余 0 7 ÷ 2 3 余 1 3 ÷ 2 1 余 1 1 ÷ 2 0 余 1 倒序111000所以56的二进制是111000。3.5 十六进制转十进制规则每一位乘以16的位数-1次方然后求和。例如0x34A转十进制text3*16^2 4*16^1 A*16^0 3*256 4*16 10*1 768 64 10 8423.6 十进制转十六进制规则不断除以16记录余数余数大于9时用A~F表示直到商为0余数倒序。例如356转十六进制text356 ÷ 16 22 余 4 22 ÷ 16 1 余 6 1 ÷ 16 0 余 1 倒序164所以356的十六进制是0x164。3.7 二进制与十六进制的互转二进制转十六进制从低位开始每4位一组每组转换成对应的十六进制数。位数不足时高位补0。例如1001011先补足8位0100 1011然后010041011B所以结果是0x4B。十六进制转二进制每一位十六进制数转换成4位二进制。例如0x23B2→00103→0011B→1011拼接得001000111011去掉前导0得到1000111011。3.8 原码、反码、补码计算机内部存储整数时并不是直接存储其二进制原码而是存储补码。为什么要用补码我们先来理解三个概念。机器数一个数在计算机中的二进制表示最高位表示符号0正1负。真值机器数真正代表的数值考虑符号位。原码符号位数值的绝对值。例如1的原码0000 0001-1的原码1000 0001。反码正数的反码 原码负数的反码 符号位不变其余位取反补码正数的补码 原码负数的补码 反码 10的补码是0举例8位二进制text1: 原码 0000 0001反码 0000 0001补码 0000 0001 -1: 原码 1000 0001反码 1111 1110补码 1111 11113.9 为什么计算机要用补码因为补码可以将减法运算统一为加法运算简化硬件设计。我们来看一个例子用原码计算 2 - 22的原码0000 0010 -2的原码1000 0010 相加1000 0100 -4错误用补码计算 2 - 22的补码0000 0010 -2的补码1111 1110 相加1 0000 0000最高位溢出丢弃得到 0000 0000 0正确所以补码让符号位也参与运算并且能自动处理进位得到正确结果。3.10 计算案例10 - 12 的补码过程10的补码0000 1010 -12的原码1000 1100 → 反码1111 0011 → 补码1111 0100 相加0000 1010 1111 0100 1111 1110这是结果的补码 将结果的补码转原码先减1得反码1111 1101再取反符号位不变得原码1000 0010 -2 所以10 - 12 -2正确。4. 数据类型Python中的“物种”Python是动态类型语言变量本身没有类型它只是指向某个对象的“标签”。对象才有类型。Python3中常见的数据类型分为基本数据类型整数(int)、浮点数(float)、复数(complex)、布尔(bool)、字符串(str)容器数据类型列表(list)、元组(tuple)、集合(set)、字典(dict)特殊类型NoneType只有一个值None其中不可变类型有数字、字符串、元组可变类型有列表、字典、集合。4.1 整数 intPython的整数可以任意大没有长度限制只受内存限制。整数分隔符书写大数时可以用下划线分组更清晰。pythonnum 1_000_000_000 print(num) # 1000000000类型判断type()和isinstance()。pythonnum 10 print(type(num)) # class int print(isinstance(num, int)) # Truetype()和isinstance()的区别isinstance()会考虑继承关系例如bool是int的子类所以isinstance(True, int)返回True而type(True) int返回False。小整数池Python解释器会预先创建[-5, 256]范围内的整数对象所有在这个范围内的整数都使用同一个对象以节省内存。超过这个范围的整数每次使用都会创建新的对象但在交互式环境中可能因优化而共享。4.2 浮点数 float浮点数就是带小数点的数采用双精度IEEE 754存储。需要注意浮点数运算存在精度问题pythonprint(0.1 0.2) # 0.30000000000000004如果需要精确计算可以使用decimal模块pythonfrom decimal import Decimal print(Decimal(0.1) Decimal(0.2)) # 0.3浮点数也可以使用科学计数法1.3e7表示13000000.0。4.3 布尔型 bool布尔值只有True和False用于逻辑判断。在Python3中bool是int的子类True和False可以参与数值运算True相当于1False相当于0。pythonprint(True 1) # True print(False 0) # True print(True is 1) # False (is比较的是对象身份不是值)以下值在布尔上下文中被视为FalseNoneFalse0、0.0、0j空容器、[]、()、{}、set()自定义对象中实现了__bool__()返回False或__len__()返回04.4 字符串 str字符串是字符的序列可以用单引号、双引号、三引号括起来。pythons1 Hello s2 World s3 多行 字符串字符串中可以使用转义字符如\n换行、\t制表符、\\反斜杠等。字符串intern机制Python会对一些短的、看起来像标识符的字符串不含空格和特殊字符进行intern即相同的字符串只保存一份以节省内存。但这种机制是解释器实现细节不一定总是生效。字符串缓冲池长度为1的ASCII字符也会被缓存。4.5 数据类型转换隐式转换当不同类型的数据进行运算时Python会自动将较小类型转换为较大类型以避免数据丢失。例如int和float运算结果自动为float。但int和str不能隐式转换会报错。显式转换使用内置函数进行强制转换。常用转换函数函数说明int(x)将x转换为整数x为字符串时可指定basefloat(x)转换为浮点数str(x)转换为字符串bool(x)转换为布尔值ord(c)返回字符的ASCII/Unicode码chr(i)返回整数对应的字符bin(x)转二进制字符串oct(x)转八进制字符串hex(x)转十六进制字符串list(s)将序列转为列表tuple(s)将序列转为元组set(s)转为集合示例pythonnum_str 123 num_int int(num_str) # 123 print(num_int 10) # 1334.6 字符编码与解码字符串在计算机中是以某种编码如UTF-8、GBK存储为字节序列的。编码是将字符串转为字节解码是将字节转为字符串。pythons 你好中国 # 编码 b s.encode(utf-8) # b\xe4\xbd\xa0... print(b) # 解码 s2 b.decode(utf-8) print(s2) # 你好中国注意编码和解码必须使用相同的字符集否则会报错或出现乱码。5. 输入与输出5.1 输入 input()input()函数用于接收用户键盘输入返回的永远是字符串。pythonname input(请输入你的名字) print(你好 name)如果需要数字记得转换类型pythonage int(input(请输入年龄))5.2 输出 print()print()可以输出一个或多个对象默认以空格分隔以换行结尾。pythonprint(Hello, World, sep, , end!\n) # Hello, World!sep指定分隔符end指定结尾字符。5.3 格式化输出5.3.1 % 格式化类似C语言的printfpythonname Tom age 20 print(我叫%s今年%d岁 % (name, age))常用格式符%d整数、%f浮点数、%s字符串、%x十六进制等。5.3.2 str.format()更强大的格式化方法pythonprint(我叫{}今年{}岁.format(name, age)) print(我叫{0}今年{1}岁.format(name, age)) # 指定位置 print(我叫{name}今年{age}岁.format(nameTom, age20)) # 关键字参数数字格式化pythonnum 31415.926 print({:^20,.2f}.format(num)) # 居中宽度20千位分隔两位小数5.3.3 f-string (Python 3.6)最简洁的方式在字符串前加f用{}直接引用变量pythonprint(f我叫{name}今年{age}岁) print(f{num :.2f}) # 加上会打印变量名和值num 31415.93用{{和}}可以转义大括号本身。6. 运算符程序的“关节”6.1 算术运算符运算符描述示例加a b-减a - b*乘a * b/除结果为浮点数a / b//整除向下取整a // b%取余a % b**幂a ** b示例pythonprint(10 / 3) # 3.3333333333333335 print(10 // 3) # 3 print(10 % 3) # 1 print(2 ** 3) # 86.2 赋值运算符除了基本的还有复合赋值运算符运算符示例等价于a 2a a 2-a - 2a a - 2*a * 2a a * 2/a / 2a a / 2//a // 2a a // 2%a % 2a a % 2**a ** 2a a ** 2Python 3.8新增了海象运算符:可以在表达式中赋值pythonif (n : len(s)) 10: print(f字符串太长有{n}个字符)6.3 比较运算符运算符描述等于!不等于大于小于大于等于小于等于比较运算符返回布尔值。注意不同类型的数据通常不能比较大小但Python中某些类型如int和float可以比较。字符串比较是按字典序逐个字符比较ASCII码pythonprint(5 6) # False print(15 6) # False因为先比较1和66.4 逻辑运算符运算符描述示例and与左边为False则返回左边值否则返回右边值x and yor或左边为True则返回左边值否则返回右边值x or ynot非取反not x注意逻辑运算符返回的不一定是布尔值可能是参与运算的对象本身。pythonprint(5 and 8) # 8 print(0 and 8) # 0 print(5 or 8) # 5 print(0 or 8) # 8 print(not 5) # False6.5 位运算符位运算符直接操作整数的二进制位以补码形式进行。运算符描述示例按位与a b|按位或a | b^按位异或a ^ b~按位取反~a左移a n右移a n注意负数参与位运算时要先转换成补码。示例pythona 17 # 00010001 b 13 # 00001101 print(a b) # 1 (00000001) print(a | b) # 29 (00011101) print(a ^ b) # 28 (00011100) print(~a) # -18 (取反得补码11101110转原码得-18)左移一位相当于乘以2右移一位相当于整除2。6.6 成员运算符用于检查一个值是否在序列字符串、列表、元组等中。in如果在序列中返回Truenot in如果不在序列中返回Truepythonlst [1, 2, 3] print(2 in lst) # True print(5 not in lst) # True6.7 身份运算符比较两个变量是否引用同一个对象即内存地址相同。is如果两个变量指向同一个对象返回Trueis not如果指向不同对象返回Truepythona [1, 2, 3] b a c a[:] # 复制一份新列表 print(b is a) # True print(c is a) # False print(c a) # True (值相等)is与的区别is比较身份比较值。6.8 运算符优先级从高到低粗略**幂~、、-一元正负*、/、%、//、-、^、|比较运算符、!赋值运算符身份运算符、成员运算符逻辑运算符notandor如果记不清用括号明确优先级总没错。7. Python编码规范PEP 8写代码不仅追求正确还要追求可读性。PEP 8是Python官方推荐的编码风格指南遵循它能让代码更美观、易维护。7.1 缩进使用4个空格表示一级缩进不要使用制表符Tab。大多数编辑器都可以设置Tab自动转为4空格。续行应该与包裹元素对齐或使用悬挂缩进。7.2 行长每行不超过79个字符文档字符串或注释不超过72个字符。在团队中有些项目放宽到99字符但不要随意突破。7.3 空行函数和类定义之间用两个空行分隔。类中的方法之间用一个空行分隔。逻辑相关的代码块之间可以加空行但不要滥用。7.4 其他建议避免在一行写多条语句不要用分号结尾。源码文件使用UTF-8编码。行末不要有空格。运算符两侧建议加空格如a b c但用于指定参数时不需要如func(a1)。总结到这里我们已经把Python最基础、最核心的知识点都过了一遍。从注释、变量到进制、数据类型再到输入输出、运算符和编码规范这些都是编程大厦的基石。看似枯燥但每一个细节都关乎着你未来写出的代码是否健壮、易读、高效。记住学习编程没有捷径多动手写、多思考才是王道。建议你打开IDE把文中的示例代码敲一遍试着改动一些值观察输出结果。遇到问题不要怕那是成长的机会。如果你觉得这篇文章对你有帮助欢迎点赞、收藏、转发让更多人看到。后续我还会带来更多Python进阶内容比如函数、模块、文件操作、面向对象等敬请期待加油未来的Python大牛