Python运算符完全指南:算术、比较、逻辑与优先级详解
1. 为什么单独拿一章学运算符1.1 运算符不只是算数很多初学Python的朋友看到“运算符”这一章时第一反应是这不就是小学的加减乘除吗当年我也是这么想的直到我在实际写代码时被//、%和**折磨得怀疑人生才明白一个道理——Python里的运算符本质上是数据之间的“动作指令”它决定了两个或多个值之间如何发生关系如何被计算、比较、组合、判断。你写一个爬虫脚本要用in判断一个网址是否在黑名单里你写一个自动化脚本要用and和or做多重条件判断你处理时间戳要用%做单位换算。这些全是运算符的功劳。所以这一章不是让你背公式而是让你建立“运算符是编程语言的基本动作库”这个意识。你之后写的每一行稍微复杂点的代码几乎都离不开运算符的组合。另外Python的运算符设计得相当人性化很多地方比C、Java更直观比如链式比较a b c、字符串可以直接用*重复、列表可以用in判断成员。但这些“糖”背后也有不少坑比如浮点数比较、除法与整数除法的区别、赋值号和比较号混用等这些都是我今天想展开讲的重点。1.2 Python运算符的整体分类在学习细节之前有必要先把目录列出来。Python官方文档里运算符按功能可以分成这么几类算术运算符、-、*、/、//、%、**比较运算符、!、、、、赋值运算符、、-、*、/等逻辑运算符and、or、not成员运算符in、not in身份运算符is、is not位运算符、|、^、~、、这里面前六类是入门阶段必须掌握的核心位运算可以放到后面学网络编程、图像处理时再深入研究。很多热门的Python考题和面试题也都集中在算术、比较、逻辑、成员这几类上所以贪多没用先把主干打牢。我的学习建议是不要光看、光背而是打开IDLE或者VS Code里的Python交互窗口边敲边看结果。这一章的内容非常适合“即输即验”你写一行立刻看到输出记忆效果比看十遍书都好。2. 算术运算符新手最容易混淆的一组2.1 加减乘除之外重点看//和%算术运算符大家从小就会但在Python里几个符号的行为和数学里不完全一样尤其是斜杠。我先给出一张对照表把最常用的一组列清楚运算符名称示例结果说明加法7 29数字相加字符串拼接-减法7 - 25数字相减负数*乘法7 * 214数字相乘字符串重复/除法7 / 23.5结果永远是浮点数//整除7 // 23向下取整%取余7 % 21余数**幂2 ** 38次方计算新手最容易踩的第一个坑就是除法。在很多编程语言里7 / 2如果发生在整数之间结果会直接砍掉小数部分但Python不会它一定会给你一个浮点数3.5。这一点其实很友好但也容易造成后续对类型判断的误判比如你检查某个变量是不是整数时type(7 / 2)会返回float。真正难理解的是//和%。你需要记住一个关键点//的语义是“向下取整”不是简单的“去掉小数位”。正数场景下两者看起来一样但一旦出现负数行为就有区别。比如print(7 // 2) # 3 print(-7 // 2) # -4而不是 -3 print(7 % 2) # 1 print(-7 % 2) # 1为什么-7 // 2是-4因为Python要找比商更小更负的那个整数。-7 / 2结果大约是-3.5向下取整就变成-4。与之对应的%结果也遵循一个公式a % b a - (a // b) * b。按这个公式算-7 % 2就是-7 - (-4) * 2 1。这个知识点看起来冷门但是在处理循环数组下标、时间换算、分页逻辑时特别容易用到。我当年在一个倒计时功能里因为没搞懂负数取余的规则生成了负数分钟数线上出了bug后来才彻底记住了这个规则。2.2 乘方究竟怎么用**不只是平方很多从其他语言转过来的朋友会不习惯**因为在C或Java里没有这种写法要么用循环乘要么调用数学库。Python里直接用**解决不仅简洁还天然支持浮点数幂运算比如9 ** 0.5能直接开根号得到3.0。更实用的是你还能用**处理大数取幂配合%实现高效取模这在写算法题时几乎是标配。print(2 ** 10) # 1024 print(9 ** 0.5) # 3.0 print(3 ** 4 % 5) # 1如果你以后接触量化交易策略或数据处理幂运算还会大量出现在指数平滑、收益功率计算等场景里。不要小看这个符号它让很多数值模型在Python里写起来特别顺手。顺手说一句字符串也可以使用*和这是Python特有的灵活之处。比如name python print(name * 3) # pythonpythonpython print(name 入门) # python入门不过要注意字符串不能和数字直接相加a 1会直接报TypeError这属于类型层面的保护机制初学者了解即可。3. 比较运算符与赋值运算符最容易写反的一组3.1与一个是判断一个是动作我见过太多刚入门的同学写出这样的代码if a 5: print(相等)然后报错。在Python里是赋值是把右边的值“放进”左边变量是比较是判断左右两边是否相等返回True或False。两者天差地别。这个错误在Python中比在C里好排查因为Python会直接给你SyntaxError但如果你想在if判断里写赋值语句“顺便”做点事情就会踩坑。初学者最好养成一个习惯凡是写if、while、elif后面跟的条件里出现的肯定是比较运算符、成员运算符、逻辑运算符或布尔值而不是单个等号。写完之后双眼扫一遍看到单独一个等号出现在条件表达式里立刻改掉。另一个容易忽略的点是Python支持链式比较例如0 score 100这在C或Java里是写不了的。它的内部等价于0 score and score 100这种写法非常直观适合数值范围判断。我第一次在同事代码里看到这种写法时第一反应是“这也行”后来自己也爱不释手。但注意链式比较虽然简洁也不要写太长超过两个判断还是拆开写清晰一些。3.2 复合赋值运算符写起来爽但要小心可变对象复合赋值运算符是的扩展像、-、*、/、//、%、**。它的语义是先对变量当前值做运算再把结果存回变量。比如count 10 count 5 # count count 5结果 15 count // 3 # count count // 3结果 5 score 90 score ** 2 # score score * score结果 8100这种写法在实际项目中到处都是尤其是计数、累加、累乘。使用的时候有一个细节如果右边运算会改变类型那么变量类型也会跟着变。比如x 10你执行x / 2x会变成5.0类型从int变成了float。如果后续代码假设它是整数就可能引发问题。还有一个进阶坑当变量指向可变对象比如列表时和的行为是有区别的。对列表来说a [4]是在原列表上扩展而a a [4]是先创建新列表再赋值。大多数场景下结果一致但在函数传参时这个差异会造成明明改了列表外部却没有变或者外部意外被修改的效果。初学阶段先记住这一点等学到函数和作用域时可以回头再验证。4. 逻辑运算符、成员运算符与身份运算符4.1and、or、not不只是返回布尔值逻辑运算符是控制流程的重要工具。大多数教材会给你一张真值表让你记住True and False是False、not True是False。这些没错但Python的逻辑运算符有一个很特别的行为很多从C或Java转过来的朋友会不适应——它不一定返回True或False它返回的是决定结果的那个操作数。print(0 and 100) # 0 print(1 and 100) # 100 print(0 or 100) # 100 print(1 or 100) # 1要理解这个就需要知道短路求值。and从左到右判断如果左边已经是假值0、空字符串、空列表、None、False那就没有必要看右边了整个表达式结果就是左边那个假值如果左边是真值就继续看右边结果就是右边表达式的值。or正好相反左边是真值就直接返回左边左边是假值才继续算右边。这带来的实战价值非常明显。你可以写这样的代码name user_input or 默认名称意思是如果用户输入为空取默认值。这种写法简洁且Pythonic但要注意如果用户输入是0或False这样的非空字符串它仍是真值不会被替换。判断是否为空更稳妥的是if user_input is None or user_input 。not就简单得多它总是返回布尔值not一个真值得到Falsenot一个假值得到True。但在正常业务代码里尽量不要写双重否定比如if not not flag这样纯粹是为了考倒别人。4.2in与is一个是“包含”一个是“身份”in是成员运算符用来判断一个元素是否存在于一个容器里。最常用的场景是字符串、列表、元组、字典和集合。s python入门 print(python in s) # True tags [教程, 实战] print(教程 in tags) # True user {name: 张三} print(name in user) # True判断的是键对于字典来说in默认判断的是“键”而不是值这一点很容易被忽略。如果你想判断某个值在不在字典里得写张三 in user.values()。is是身份运算符它判断两个变量是否指向同一个对象而不是内容是否相等。这个区别是很多隐藏bug的来源。比如a [1, 2, 3] b [1, 2, 3] print(a b) # True内容相等 print(a is b) # False两个不同的列表对象再比如整数小范围缓存的问题x 256和y 256时x is y可能是True因为Python对小整数有缓存优化但x 1000时x is y通常是False。这种差异是解释器实现层面的所以千万不要用is去比较数字或字符串内容一定要用。is的正确使用场景是判断变量是否为None例如if data is None:。5. 运算符优先级与括号策略5.1 一张表记住优先级运算符组合在一起时就有优先级的问题。Python的优先级从高到低常考的层次可以简化成下面这个顺序**幂运算x、-x正负号、~按位取反*、/、//、%、-、移位按位与^按位异或|按位或、!、、、、、is、innot xandor这个顺序里最容易让人惊讶的是not的优先级比and和or都高而比较运算的优先级高于not。所以not a b会被解释成not (a b)而不是(not a) b。在实际阅读代码时这种优先级设计还算友好但写代码时依然建议用括号明确意图。还有一个经典误区很多人以为2 ** 3 ** 2是先算左边的其实幂运算是右结合所以结果是2 ** (3 ** 2)也就是2 ** 9结果是512。如果写成(2 ** 3) ** 2结果是64差别很大。5.2 实战中的括号策略清晰比炫技重要我知道很多有经验的程序员很追求代码简洁但这里我建议初学者把括号用够。拿判断条件来说if (age 18 and age 60) or (is_vip and age 60): print(可进入)这段代码如果去掉了内层括号看起来虽然也能跑但阅读成本成倍增加。更关键的是一旦将来修改逻辑比如调整年龄范围没有括号的保护很容易改出意料之外的优先级错误。我的原则是优先级表可以背但不要让读代码的人去背。另外赋值表达式中不少人会把赋值运算符和比较运算符混在一个表达式里比如if (n : len(items)) 10: print(n)这是Python 3.8引入的海象运算符可以在表达式内部给变量赋值。这个功能很强大但对入门阶段来说容易造成阅读混乱建议网上看到能看懂即可自己的项目里先尽量少用等代码阅读能力上来了再灵活使用。6. 常见问题与排查技巧实录6.1 除零错误每个新手都躲不过代码里一旦出现10 / 0Python立刻抛出ZeroDivisionError。这在逻辑上是对的但在真实业务中除数为0的情况经常来自外部参数你无法保证用户输入的值永远是合法的。解决办法很简单做除法前先判断。if divisor 0: print(除数不能为0) else: result total / divisor更健壮的方式是使用try...except结构这个学到异常处理时会讲。现在你只需要记住一个习惯任何除法包括//、%之前都要警惕除数可能为0尤其是从文件、网络、用户输入拿到的数据一定不要直接拿来除。6.2 浮点精度问题0.1 0.2 不等于 0.3这是所有编程语言的经典问题Python也不例外。print(0.1 0.2) # 0.30000000000000004很多初学者看到这个结果会以为Python坏了。实际上这是二进制浮点数表示法导致的精度误差它在C、Java、JavaScript里都一样。如果你的业务涉及金额、分数等要求精确的场景不要直接用浮点数做等值比较应该用Decimal模块或者把单位放小用整数来表示最小粒度。如果只是普通数值计算判断相等时可以采用“差值绝对值小于某个极小值”的方法a 0.1 0.2 print(abs(a - 0.3) 1e-9) # True这种方法在工程里很常见写测试用例、判断计算结果是否达标时都很实用。6.3 逻辑表达式返回的不是布尔值导致条件判断误判这个问题我前面提过但还是要单独强调一遍。当你在if条件里写a and b时如果a是假值那么整个表达式的值就是a本身而if会把这个值当作条件来判定真假。大多数情况下没有问题但如果你把这个表达式的值保存下来再去跟True、False做比较就会产生困惑choice and 默认值 print(choice) # 输出空字符串这不算bug是Python的设计特性。但要明白这一点才能准确预判代码行为。我的建议是如果只是拿来做条件判断用逻辑表达式没问题如果希望明确得到True或False请使用bool()显式转换比如result bool(user_input and other_condition)6.4 位运算符入门阶段可以战略性跳过位运算符虽然排在算术运算符旁边但它在入门阶段的实际使用频率非常低。我在实际项目中遇到它的场景大多是权限系统的位掩码、图像处理的像素值计算、二进制协议解析等这些都是中后期内容。所以如果你现在看到、|、^、、觉得晕完全正常。我的建议是先知道有这些东西存在等后续学习的实际需求来了再回过头来补。不要在这一章上死磕浪费时间。最后想说的话我在带新人时经常说一句话运算符这一章是Python学习路径上最容易“自以为懂了”的章节。你可能看了半小时觉得很简单但真正写代码时却不断在//、%、、is、in之间栽跟头。我的体会是运算符的学习不要停在“看懂”层面要主动去设计一些小实验比如自己定义一个列表试一下in判断、链式比较、短路逻辑等。只有亲手敲过、报过错、改对过这些知识才算真正长在脑子里。如果你现在正卡在某个运算符上不妨直接把例子复制到代码里跑一遍很多疑问会立刻烟消云散。

相关新闻

GTK界面开发实战:从控件树到系统监控工具的设计全解析

GTK界面开发实战:从控件树到系统监控工具的设计全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/30 12:37:51 阅读更多 →
PHP中Repository到底算不算设计模式?一文厘清概念与实战

PHP中Repository到底算不算设计模式?一文厘清概念与实战

1. 为什么“Repository是设计模式”这句话让人半信半疑第一次听到“PHP的Repository 设计模式?”这个问题时,我大概正坐在某次技术分享的最后一排。台上的讲师放出一张类图,说“这里我们用Repository模式解耦数据访问”,底下有个…

2026/9/30 12:36:49 阅读更多 →
前端面试JavaScript高频24问:从基础语法到异步编程全覆盖

前端面试JavaScript高频24问:从基础语法到异步编程全覆盖

1. 从简历到现场——为什么JavaScript基础题总在前端面试的第一关今年的前端行情大家都有体会,投简历的人多,靠谱的少,面试官也学精了。不再一张口就问"你用过Vue还是React",而是先拿JavaScript最基本的东西试底。原因很…

2026/9/30 12:36:49 阅读更多 →

最新新闻

把伊娃搬到桌面上,稚晖君开源机器人

把伊娃搬到桌面上,稚晖君开源机器人

由稚晖君开源的 ElectronBot。它不只是桌面摆件,而是一台能动的电脑配件。ElectronBot 是一款桌面级小机器人,外观设计的灵感来源是《机器人总动员》WALL-E 里面的伊娃。它通过 USB 直连电脑,把圆形屏幕、USB 摄像头、六轴舵机、AI 识别全部塞…

2026/9/30 13:23:06 阅读更多 →
Windows Hello指纹驱动开发实战:UMDF2+WinUSB避坑指南

Windows Hello指纹驱动开发实战:UMDF2+WinUSB避坑指南

简介:本资源是微软官方发布的《Windows Hello生物识别驱动设计指南》PDF文档,面向Windows驱动开发工程师、安全认证系统开发者及嵌入式生物识别设备厂商技术人员,系统解决WBDI(Windows Biometric Driver Interface)驱动…

2026/9/30 13:23:06 阅读更多 →
DX12 PBR渲染实战:从光照模型到IBL的完整实现与调参指南

DX12 PBR渲染实战:从光照模型到IBL的完整实现与调参指南

1. 从光照模型到PBR:为什么DX12项目绕不开这一步 很多人在DX12里跑通第一个三角形、把纹理贴上去之后,下一步就卡住了——画面看起来“能跑”,但就是不对劲。金属像塑料,塑料像纸片,光照要么死白要么死黑。这不是DX12的…

2026/9/30 13:23:06 阅读更多 →
Node-Red 本地物联网中枢:可视化编程与 MQTT 数据流实战

Node-Red 本地物联网中枢:可视化编程与 MQTT 数据流实战

1. 为什么我最终选了 Node-Red 做本地物联网中枢搞物联网项目的人大概都有过这种纠结:传感器数据上来了,想做个联动逻辑,写代码吧,改一行就得重新烧录或者重启服务;用现成的平台吧,又担心数据不在自己手里&…

2026/9/30 13:23:06 阅读更多 →
深信服HCI题库:超融合工程师的隐性知识验证指南

深信服HCI题库:超融合工程师的隐性知识验证指南

简介:本资源是面向深信服HCI(超融合基础设施)认证备考人员与IT运维工程师的专项题库资料,聚焦超融合架构原理、aSAN分布式存储、虚拟网络(VXLAN/业务网/管理网)、虚拟机优化、安全微隔离及FC/NFS存储对接等…

2026/9/30 13:23:06 阅读更多 →
AWS上构建AI视觉质检流水线:从模型训练到边缘部署的实战指南

AWS上构建AI视觉质检流水线:从模型训练到边缘部署的实战指南

工厂车间的灯光总是带着点昏黄,检测工位的老师傅用肉眼盯着一件件冲压件,一天下来眼睛酸得快睁不开。我跑了几年视觉项目,最深的一个体会是:真正能让工厂愿意掏钱的AI视觉质检,不是实验室里刷个99.8%的准确率就完事&am…

2026/9/30 13:22:05 阅读更多 →

日新闻

Base64 图片头部特征识别:从文件头到格式判断的完整指南

Base64 图片头部特征识别:从文件头到格式判断的完整指南

1. 项目概述:为什么说看懂 base64 图片头部是基本功这几年跟 base64 打交道的机会越来越多,后端接口返回图片、前端渲染验证码、小程序里存小图、还有一些老系统导出报表,动不动就给你一段长到怀疑人生的 base64 字符串。很多人拿到字符串就直…

2026/9/30 0:00:35 阅读更多 →
Java公交站牌广告管理系统:JSP+Servlet+MySQL实战落地指南

Java公交站牌广告管理系统:JSP+Servlet+MySQL实战落地指南

简介:本资源是一份面向Java初学者与课程设计学生的公交站牌广告灯箱管理系统毕业设计文档,聚焦城市公共广告资源信息化管理痛点,提供从需求分析到技术实现的完整方案。文档采用标准学术论文结构,含摘要、英文摘要、目录及五章正文…

2026/9/30 0:00:35 阅读更多 →
用 Redis Lua 构建大模型 API 多租户原子配额治理体系

用 Redis Lua 构建大模型 API 多租户原子配额治理体系

我去年年底接了一个内部 AI 平台的治理需求,背景很直接:公司把 DeepSeek、MiniMax 这类大模型 API 统一封装成内部网关,开放给几个业务团队用。结果第一个月账单出来,额度直接超了 4 倍。仔细查日志,发现原因并不复杂—…

2026/9/30 0:00:35 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/30 13:14:22 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/29 16:41:41 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/30 13:14:49 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/29 19:29:29 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/29 5:58:00 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/29 3:55:56 阅读更多 →