Loading...

文章背景图

🐍 Python 魔法入门:玩转百变“运算符”与大厂编码规范

2026-05-07
4
-
- 分钟
|

大家好,我是 MuSen,一个爱分享、带你轻松玩转编程的引路人。

在前面的课程中,我们已经拥有了“魔法盒子”(变量),里面装满了各种“神奇道具”(数据类型),并且学会了如何跟程序进行“对话”(输入输出)。

但是,如果我们只把数据存在盒子里,那它们就只是一堆死物。如何让这些数据跑起来、发生奇妙的化学反应呢?这就需要用到我们今天的主角——运算符(Operators)

今天这节课干货满满,不仅有基础运算,还会带你揭秘底层硬核的“位运算”,以及教你如何写出像大厂工程师一样优雅规范的代码。准备好了吗?我们发车!🚀

4.1 算数运算符:数字的魔法体操 🧮

算数运算符大家最熟悉,就是加减乘除。但在 Python 中,它有几个隐藏的进阶玩法。

  • + / - / *:和数学里一模一样。

  • /:注意!无论能不能除尽,结果永远是浮点数 (float)20 / 10 结果是 2.0

  • // 整除(向下取整):除完之后只保留整数部分,把小数抹掉。10 // 3 结果是 3

  • % 取模(求余数):除法运算后只拿余数。20 % 10010 % 31

  • 幂(次方):算次方的神器。2 3 也就是 2 的 3 次方,结果是 8

4.2 赋值运算符:给变量贴标签的N种姿势 🏷️

最基础的赋值运算符是 =,它的意思是“把右边的值,交给左边的变量”。 在此基础上,为了偷懒,程序员发明了“复合赋值运算符”:

  • +=-=*=/= ... 这其实是简写。比如 a += 2,其实就是 a = a + 2 的缩写!少敲了几下键盘,极其舒适。

😎 MuSen 传授:Python 3.8 新增神技 —— 海象运算符 := 为什么叫海象?因为 := 长得就像一只有两颗长牙的海象!🦭 它可以在一个表达式中,同时完成赋值和运算,极其适合写出紧凑的高级代码。

num1 = 20
# 传统写法需要两行:
# num2 = 3 ** 2
# print(num2 > num1)

# 海象运算符写法(一行搞定,不仅给num2赋了值,还顺便参与了比较):
print((num2 := 3**2) > num1) # 输出: False
print(num2)                  # 输出: 9

4.3 比较运算符:无情的裁判 ⚖️

比较运算符用来比较两个值,它的结果永远是非黑即白的布尔值:TrueFalse

  • == (等于)、!= (不等于)

  • > (大于)、< (小于)、>= (大于等于)、<= (小于等于)

💣 MuSen 的避坑警告:跨物种不能比较! 不同的数据类型之间是不能直接比较大小的(比如拿数字 10 去和字符串 "abc" 比大小,程序会直接报错)。

🧠 面试常考:字符串比大小的潜规则 面试官:“print('15' > '6') 的结果是什么?” 很多小白会下意识回答 True,大错特错!结果是 False! 原因:字符串比较大小,不是比拼长短,也不是拼拼凑在一起的数字大小!它是从最左边的字符开始,逐个去比较它们的 ASCII 码值。 '15' 的第一个字符是 '1',而 '6' 的第一个字符是 '6'。显然 '1' 的 ASCII 码比 '6' 小,所以直接判定为 False

4.4 逻辑运算符:复杂条件的终结者 🧠

  • and (与):两人必须都同意才行。左右两边都是 True,结果才是 True。

  • or (或):只要有一人同意就行。左右只要有一个是 True,结果就是 True。

  • not (非):杠精本精。你是 True 它偏要变 False,你是 False 它变成 True。

💎 面试超硬核专区:逻辑运算的“短路机制”与“真值返回”

只要懂了这个,你就能看懂大佬们写的浓缩代码! Python 里的 andor 其实很懒(短路),并且它返回的不一定是 True/False,而是最后计算的那个真实数据

  • print(5 and 8)and 要求两边都是真。看到 5 (真),它还不能确定,必须接着看右边,于是找到了 8,最终返回 8

  • print(0 and 8):看到 0 (假),直接短路!反正已经没救了,右边连看都不看了,直接返回 0

  • print(5 or 8)or 只要一个真就够了。看到 5 已经是真了,右边直接不管了!返回 5

  • print(0 or 8):看到 0 (假),还得接着往后找,找到 8 是真,最终返回 8

4.5 成员与身份运算符:找茬大师 🕵️

1) 成员运算符 (in / not in)

用来判断某个家伙是不是在一个序列(比如列表、字符串)里面。

test_list = [1, 2, 3, 4, 5]
print(1 in test_list)    # 输出 True
print(20 not in test_list) # 输出 True

2) 身份运算符 (is / is not) 【面试极高频!】

🧠 绝杀面试:is== 到底有什么区别?

  • == 比较的是“脸”(值):长得一样就行。

  • is 比较的是“身份证号”(内存地址):不仅要长得一样,还得是同一个人(在内存中占据同一个位置)。等同于 id(a) == id(b)

来看这段极其经典的防坑代码:

a = [1, 2, 3]
b = a 
print(b is a)  # True (给同一个箱子贴了两个标签)

b = a[:]       # 切片操作:强行复制了一个长得一模一样的新箱子
print(b == a)  # True (长得一样)
print(b is a)  # False (不是同一个箱子,内存地址变了!)

4.6 位运算符:直击底层的黑色魔法 ⚡ (了解即可)

这一块属于内功修炼。计算机底层只认识 0 和 1,所有的计算最终都会变成二进制的位运算。速度极快,但也极其烧脑!

位运算符有:&(按位与)、|(按位或)、^(按位异或)、~(按位取反)、<<(左移)、>>(右移)。

要想懂位运算,你得先知道机器是怎么存数字的:

  • 原码:把数字转成二进制。最高位是符号位(0代表正数,1代表负数)。比如 7 的原码是 00000111-7 就是 10000111

  • 反码:正数的反码跟原码一样;负数则是符号位不变,其他位 0 变 1,1 变 0。

  • 补码:正数的补码还是原码;负数是在反码的基础上 +1

⚠️ 核心铁律:计算机底层进行位运算时,统统都是以补码形式进行的特别注意右移 >>:如果是负数右移,它是向负无穷取整(向下取整),而不是简单地把右边的截断!

注:在日常写业务代码时(如开发网站、做数据分析),极少会用到位运算。但如果你做底层开发或刷算法题,位运算就是神兵利器。

4.7 运算符优先级 🚥

这就像数学里的“先乘除后加减”。Python 里也有优先级。 一句话总结:算术运算符 > 位运算符 > 比较运算符 > 逻辑运算符。

MuSen 避坑指南:哪怕你记忆力再好,也千万不要去死记硬背优先级表! 只要你觉得有歧义的地方,请直接加上小括号 ()。这不仅能避免报错,更是为了让你三个月后回来看代码时不至于骂自己。

4.8 PEP 8 大厂编码规范:写代码也是一门艺术 🎨

代码不只是写给机器看的,更是写给人(你的同事、未来的你)看的。 Python 官方有一份极其著名的指导圣经,叫做 PEP 8(Python Enhancement Proposal 8)。遵循它,你的代码看起来就像是大厂高级工程师写出来的。

1)缩进:Python的灵魂

Python 不用大括号 {},全靠缩进认兄弟。 规范:每次缩进必须使用 4 个空格!千万不要把制表符(Tab)和空格混用,这会让解释器彻底精神分裂,报出恶心的缩进错误。 (好在现在主流的代码编辑器,你按下 Tab 键,它会自动帮你转换成 4 个空格。)

2)行长:别让眼睛太累

规范:建议每行代码不超过 79 或 80 个字符(注释不超过 72 个字符)。 如果代码太长,编辑器上会有一条竖线提醒你。太长的代码可以通过换行符或括号分成多行。

3)空行:代码的呼吸感

规范

  • 不同的函数或类之间,用两个空行隔开。

  • 函数内部不同的逻辑块之间,用一个空行隔开。 千万别整个文件从头写到尾一个空行都没有,也别滥用(比如每写一行就空三行)。

4)禁忌:永远不要在一行写多条语句

虽然你可以用分号 ; 把好几句代码强行塞在一行: import sys; print(sys.path) # 丑陋且极不推荐! 规范:老老实实换行!并且行尾永远不要加分号,这是 Python,不是 C++ 或 Java。

5)源文件编码与空格

  • 源码请雷打不动地使用 UTF-8 编码。

  • 任何代码行的结尾,都不要留下多余的空格(Trailing whitespace)。有些严格的编辑器检测到行尾多余的空格会直接标红警告。

写在最后

今天这节课,我们彻底打通了变量之间的关系。从基础的加减乘除,到诡异的逻辑短路机制,再到直接操控底层的位运算,最后还学习了如何用 PEP 8 规范把代码写得如同诗一般优美。

你现在手里的武器库已经非常丰富了。下一关,我们将迎接程序的骨架——条件判断与循环结构,准备好让代码跑出千万种分支了吗?

我是 MuSen,我们会点儿技术,有点儿意思。准备好进入下一关了吗?咱们下期见!👋

评论交流

文章目录