python3(运算符 优先级)

📅 2026/7/23 12:30:56
python3(运算符  优先级)
运算符与优先级Python里的“语法标点”和“先后顺序”今天我们来学习一下python里的运算符以及优先级的规则及其用法在前一天我们有了数据类型这些“食材”接下来就得靠运算符把它们串起来变成一道道“菜”。运算符就像是Python里的标点符号决定了数据怎么组合、怎么比较。而优先级则决定了表达式里的“先来后到”搞错了顺序菜的味道可就全变了。一、算术运算符最基础的数学操作这部分跟你小学学的数学差不多就是多了几个编程特有的符号。运算符描述例子a3, b2结果加a b5-减a - b1*乘a * b6/除返回浮点数a / b1.5%取模求余数a % b1**幂运算a ** b9//整除向下取整a // b1需要注意的两个坑负数取整和取模Python的//是向下取整而不是直接截断小数部分。print(15//4)# 315/43.75向下取整为3print(-15//4)# -4-15/4-3.75向下取整为-4因为-4更小print(15%4)# 3余数 15 - 3*4 3print(-15%4)# 1余数 -15 - (-4)*4 1小贴士记住一个规律(a % b) (-a % b) b当a不为0时可以帮你快速验证结果。科学计数法1e8表示 (1 \times 10^8)类型是浮点数。二、比较运算符问出“是与否”用来比较两个值返回布尔值True或False。运算符描述等于!不等于大于小于大于或等于小于或等于a,b20,9print(ab)# Falseprint(a!b)# Trueprint(ab)# True三、赋值运算符给变量“贴标签”除了最基础的还有各种增强赋值让代码更简洁。1. 基本赋值与增强赋值运算符等价写法a a b-a a - b*a a * b/a a / b%a a % b**a a ** b//a a // b2. 增强赋值 vs 普通赋值一个容易忽略的效率问题对可变对象比如列表来说增强赋值是在原地修改而普通赋值是新建对象。# 普通赋值新建列表原列表不变lis1[1,2]lis2lis1 lis1lis1[3,4]print(lis1)# [1, 2, 3, 4]print(lis2)# [1, 2]不变# 增强赋值原地修改所有引用都受影响lis1[1,2]lis2lis1 lis1[3,4]print(lis1)# [1, 2, 3, 4]print(lis2)# [1, 2, 3, 4]也跟着变了实战建议操作大列表时优先用增强赋值效率更高。但要小心副作用——如果你不希望原数据被改动记得先拷贝一份。3. 序列赋值Python支持一次性给多个变量赋值非常灵活a,b3,4# 等价于 (a, b) (3, 4)a,b,c[3,4,5]# 列表也能解包a,b,c你好吗# 字符串解包成三个字符4. 海象运算符:Python 3.8可以在表达式内部给变量赋值省掉一行代码# 传统写法lengthlen(hello)print(length5)print(f长度为{length})# 海象写法print((length:len(hello))5)# 赋值使用一步到位print(f长度为{length})注意记得加括号否则会把整个表达式的值赋给变量而不是你想要的结果。四、逻辑运算符用于布尔逻辑运算返回不是单纯的True/False而是决定结果的那个操作数短路原则。运算符描述短路规则and布尔“与”左边为假返回左边否则返回右边or布尔“或”左边为真返回左边否则返回右边not布尔“非”返回布尔值假→True真→Falsea,b,c,d2,hello,[],0# and左边为假就停print(canda)# []c是假直接返回cprint(aandb)# helloa是真继续看b返回b# or左边为真就停print(aorc)# 2a是真直接返回aprint(cord)# 0c是假继续看d返回d# not取反print(notc)# True补充两个好用的内置函数all(iterable)所有元素都为真返回True空容器也返回Trueany(iterable)任一元素为真返回True空容器返回False优先级notandor记不住就加括号可读性更好。五、成员运算符用于判断一个元素是否存在于容器中。运算符描述in在…中not in不在…中str1hello worldlist1[1,2,3,4,5]print(helloinstr1)# Trueprint(6notinlist1)# True六、位运算符位运算符把数字看作二进制进行按位操作适合底层优化、权限控制、加密等场景。运算符描述例子a60, b13按位与同1为1a b 120000 1100|按位或有1为1a | b 610011 1101^按位异或不同为1a ^ b 490011 0001~按位取反含符号位~a -61左移右补0a 2 240右移左补符号位a 2 15一个有趣的特性一个数异或同一个数两次结果还是它自己a ^ b ^ a b这在某些加密算法中很常用。负数的位运算负数在计算机中以补码形式存储所以位运算时要注意print(-232)# -6print(-232)# -92P.S.日常开发中位运算用得不多真遇到了用bin()打印出二进制手动验证一下就好。七、进制转换工具函数函数描述例子bin()转二进制字符串带0b前缀bin(3)→0b11oct()转八进制字符串带0o前缀oct(8)→0o10hex()转十六进制字符串带0x前缀hex(255)→0xff八、序列的连接操作、、*的“跨界”用法这几个运算符不光能算数还能操作序列字符串、列表、元组。# 字符串拼接print(12)# 12# 列表拼接类型必须一致print([1,2][3,4])# [1, 2, 3, 4]# 元组拼接print((1,2)(3,4))# (1, 2, 3, 4)# 重复操作print(ha*3)# hahahaprint([0]*3)# [0, 0, 0]注意不同类型不能直接用拼接比如1 [2, 3]会报错。九、运算符优先级到底先算谁记住一条黄金法则不确定就用括号。括号优先级最高能保证你的意图被正确执行。常用优先级从高到低想细看的可以对照PDF里的完整表格优先级高→低运算符最高**~按位取反*/%//-^|!-等赋值运算符isis notinnot in最低notandor收尾运算符就像做菜时的“刀工”和“火候”——光有食材还不够得知道怎么切、怎么炒、先放哪样后放哪样。算术、比较、逻辑、赋值这四大类是日常用得最多的把它们玩熟了你的代码就能写得又快又稳。至于位运算和复杂的优先级不需要死记硬背用的时候查一下写代码时多用括号把意图明确表达出来比什么都强。如果说非要给您一个什么样子的建议那我的建议是代码是写给“下一个看它的人”看的包括未来的你自己。多用括号多写清晰易懂的表达式比追求“一行炫技”重要得多。下图为本文知识点的思维导图示意感谢阅读祝你编码愉快有任何疑问随时欢迎来聊。