04 - 运算符与表达式这章讲 Python 里各种各样的运算符。就是加减乘除那些再加上比较、逻辑之类的。内容不算难但细节挺多的当手册看就行。算术运算符这些你应该在数学课上都学过直接看例子print(103)# 13加法print(10-3)# 7减法print(10*3)# 30乘法print(10/3)# 3.3333333333333335除法结果是浮点数print(10//3)# 3整除只取整数部分print(10%3)# 1取余数print(10**3)# 1000幂运算10的3次方几个需要注意的地方除法/的结果永远是浮点数哪怕能整除print(10/2)# 5.0注意是 5.0 不是 5print(type(10/2))# class float整除//是向下取整不是截断print(7//2)# 3print(-7//2)# -4注意不是 -3-7 / 2 -3.5向下取整就是-4。这个在面试题里经常出现很多人会答错。取余%跟整除是对应的print(7%2)# 1print(-7%2)# 1注意不是 -1取余在判断奇偶、循环计数这些场景特别常用# 判断一个数是不是偶数num10ifnum%20:print(偶数)else:print(奇数)比较运算符比较两个值的大小或是否相等结果是True或Falseprint(55)# True等于print(5!3)# True不等于print(53)# True大于print(53)# False小于print(55)# True大于等于print(53)# False小于等于Python 有个很爽的特性——链式比较x5print(1x10)# True等价于 1 x and x 10print(1x3)# Falseprint(10x30)# True在别的语言里你得写x 1 and x 10Python 直接写1 x 10就行跟数学里写的一样。逻辑运算符用来组合多个条件and与、or或、not非。age25has_idTrue# and两个都为 True 才是 Trueprint(age18andhas_id)# True# or有一个为 True 就是 Trueprint(age18orhas_id)# True# not取反print(nothas_id)# False短路求值这个概念很重要。and和or有一个特性and如果第一个条件是False就不会看第二个因为结果肯定是 Falseor如果第一个条件是True就不会看第二个因为结果肯定是 True# 这里第二个条件不会被执行因为第一个是 FalseresultFalseand(1/0)# 不会报错# 这里第二个条件不会被执行因为第一个是 TrueresultTrueor(1/0)# 也不会报错这个特性实际用起来可以做安全的条件检查# 先检查列表是不是空的再去取元素ifmy_listandmy_list[0]hello:print(找到了)如果列表是空的my_list就是False后面的my_list[0]就不会被执行避免了索引越界的错误。返回值的秘密and和or不一定返回True或False它们返回的是决定结果的那个值print(3and5)# 5两个都为真返回最后一个print(0and5)# 0第一个为假直接返回第一个print(3or5)# 3第一个为真直接返回第一个print(0or5)# 5第一个为假返回第二个print(or默认值)# 默认值所以or经常被用来设置默认值nameuser_inputor匿名用户# 如果 user_input 是空字符串name 就是匿名用户赋值运算符就是加上各种算术运算的简写x10x5# x x 5x 变成 15x-3# x x - 3x 变成 12x*2# x x * 2x 变成 24x//5# x x // 5x 变成 4x%3# x x % 3x 变成 1x**3# x x ** 3x 变成 1这些没什么好说的就是为了少写几个字。用多了就习惯了。成员运算符判断一个东西在不在另一个东西里面in和not in。fruits[苹果,香蕉,橘子]print(苹果infruits)# Trueprint(葡萄notinfruits)# Trueprint(香蕉notinfruits)# False# 字符串也可以用print(pyinpython)# Trueprint(javainpython)# Falsein的用法非常直观读起来就跟说英语一样。后面学了列表、字典之后会用得更多。位运算符这些是操作二进制的平时用得不多但面试有时候会问a5# 二进制: 101b3# 二进制: 011print(ab)# 1按位与001print(a|b)# 7按位或111print(a^b)# 6按位异或110print(~a)# -6按位取反print(a1)# 10左移一位1010print(a1)# 2右移一位10实际开发中位运算主要用在性能敏感的场景或者处理二进制数据的时候。一般业务代码里很少写。运算符优先级跟数学一样Python 的运算符也有优先级。从高到低大致是** 幂运算 ~ - 按位取反、正负号 * / // % 乘除 - 加减 位移 按位与 ^ 按位异或 | 按位或 ! 比较 not 逻辑非 and 逻辑与 or 逻辑或说实话这个表我也背不全。我写代码的原则是——不确定优先级就加括号。# 不加括号你能确定这是什么意思吗resultab20xFF# 加了括号一目了然result((ab)2)0xFF加括号不丢人代码能看懂比少写两个括号重要多了。海象运算符:这个稍微高级一点Python 3.8 才加入的。它允许你在表达式里同时赋值# 不用海象运算符datainput(输入内容)iflen(data)0:print(f你输入了{len(data)}个字符)# 用海象运算符if(n:len(input(输入内容)))0:print(f你输入了{n}个字符)一个更实际的场景# 在 while 循环里读取数据while(line:input( ))!quit:print(f你输入了:{line})这个运算符用好了可以让代码更简洁用不好反而会让代码更难读。初期不强制使用等后面遇到合适的场景再说。本章小结算术运算符 - * / // % **注意/返回浮点数//是向下取整比较运算符 ! 支持链式比较逻辑运算符and or not有短路求值特性成员运算符in和not in非常直观好用不确定优先级就加括号别硬记海象运算符:可以在表达式中同时赋值面试题Q110 / 3、10 // 3、10 % 3的结果分别是什么点击查看答案10 / 33.3333333333333335浮点除法10 // 33整除向下取整10 % 31取余注意-10 // 3的结果是-4而不是-3因为整除是向下取整向负无穷方向不是向零取整。Q2and和or的短路求值是什么意思有什么实际用途点击查看答案短路求值是指逻辑运算时如果第一个操作数已经能确定结果就不会计算第二个操作数。A and B如果 A 为假直接返回 A不计算 BA or B如果 A 为真直接返回 A不计算 B实际用途安全的属性/索引访问if obj and obj.name先检查 obj 不是 None 再访问属性设置默认值value user_input or default延迟计算把开销大的操作放在后面前面的条件不满足就跳过Q3-7 // 2的结果是什么为什么不是-3点击查看答案结果是-4。Python 的整除//是向下取整floor division也就是向负无穷方向取整。-7 / 2 -3.5向下取整就是-4。很多其他语言比如 C、Java的整除是向零取整所以-7 / 2在这些语言里是-3。这是 Python 和其他语言的一个区别面试经常考。Q4x 5表达式1 x 10的结果是什么Python 是怎么处理的点击查看答案结果是True。Python 会把1 x 10展开为1 x and x 10也就是1 5 and 5 10两个都是 True所以结果是 True。这是 Python 独有的链式比较语法跟数学里的写法一致比大多数语言更直观。注意x只会被计算一次。上一章 | 下一章字符串 →
04 - 运算符与表达式
发布时间:2026/5/25 20:35:13
04 - 运算符与表达式这章讲 Python 里各种各样的运算符。就是加减乘除那些再加上比较、逻辑之类的。内容不算难但细节挺多的当手册看就行。算术运算符这些你应该在数学课上都学过直接看例子print(103)# 13加法print(10-3)# 7减法print(10*3)# 30乘法print(10/3)# 3.3333333333333335除法结果是浮点数print(10//3)# 3整除只取整数部分print(10%3)# 1取余数print(10**3)# 1000幂运算10的3次方几个需要注意的地方除法/的结果永远是浮点数哪怕能整除print(10/2)# 5.0注意是 5.0 不是 5print(type(10/2))# class float整除//是向下取整不是截断print(7//2)# 3print(-7//2)# -4注意不是 -3-7 / 2 -3.5向下取整就是-4。这个在面试题里经常出现很多人会答错。取余%跟整除是对应的print(7%2)# 1print(-7%2)# 1注意不是 -1取余在判断奇偶、循环计数这些场景特别常用# 判断一个数是不是偶数num10ifnum%20:print(偶数)else:print(奇数)比较运算符比较两个值的大小或是否相等结果是True或Falseprint(55)# True等于print(5!3)# True不等于print(53)# True大于print(53)# False小于print(55)# True大于等于print(53)# False小于等于Python 有个很爽的特性——链式比较x5print(1x10)# True等价于 1 x and x 10print(1x3)# Falseprint(10x30)# True在别的语言里你得写x 1 and x 10Python 直接写1 x 10就行跟数学里写的一样。逻辑运算符用来组合多个条件and与、or或、not非。age25has_idTrue# and两个都为 True 才是 Trueprint(age18andhas_id)# True# or有一个为 True 就是 Trueprint(age18orhas_id)# True# not取反print(nothas_id)# False短路求值这个概念很重要。and和or有一个特性and如果第一个条件是False就不会看第二个因为结果肯定是 Falseor如果第一个条件是True就不会看第二个因为结果肯定是 True# 这里第二个条件不会被执行因为第一个是 FalseresultFalseand(1/0)# 不会报错# 这里第二个条件不会被执行因为第一个是 TrueresultTrueor(1/0)# 也不会报错这个特性实际用起来可以做安全的条件检查# 先检查列表是不是空的再去取元素ifmy_listandmy_list[0]hello:print(找到了)如果列表是空的my_list就是False后面的my_list[0]就不会被执行避免了索引越界的错误。返回值的秘密and和or不一定返回True或False它们返回的是决定结果的那个值print(3and5)# 5两个都为真返回最后一个print(0and5)# 0第一个为假直接返回第一个print(3or5)# 3第一个为真直接返回第一个print(0or5)# 5第一个为假返回第二个print(or默认值)# 默认值所以or经常被用来设置默认值nameuser_inputor匿名用户# 如果 user_input 是空字符串name 就是匿名用户赋值运算符就是加上各种算术运算的简写x10x5# x x 5x 变成 15x-3# x x - 3x 变成 12x*2# x x * 2x 变成 24x//5# x x // 5x 变成 4x%3# x x % 3x 变成 1x**3# x x ** 3x 变成 1这些没什么好说的就是为了少写几个字。用多了就习惯了。成员运算符判断一个东西在不在另一个东西里面in和not in。fruits[苹果,香蕉,橘子]print(苹果infruits)# Trueprint(葡萄notinfruits)# Trueprint(香蕉notinfruits)# False# 字符串也可以用print(pyinpython)# Trueprint(javainpython)# Falsein的用法非常直观读起来就跟说英语一样。后面学了列表、字典之后会用得更多。位运算符这些是操作二进制的平时用得不多但面试有时候会问a5# 二进制: 101b3# 二进制: 011print(ab)# 1按位与001print(a|b)# 7按位或111print(a^b)# 6按位异或110print(~a)# -6按位取反print(a1)# 10左移一位1010print(a1)# 2右移一位10实际开发中位运算主要用在性能敏感的场景或者处理二进制数据的时候。一般业务代码里很少写。运算符优先级跟数学一样Python 的运算符也有优先级。从高到低大致是** 幂运算 ~ - 按位取反、正负号 * / // % 乘除 - 加减 位移 按位与 ^ 按位异或 | 按位或 ! 比较 not 逻辑非 and 逻辑与 or 逻辑或说实话这个表我也背不全。我写代码的原则是——不确定优先级就加括号。# 不加括号你能确定这是什么意思吗resultab20xFF# 加了括号一目了然result((ab)2)0xFF加括号不丢人代码能看懂比少写两个括号重要多了。海象运算符:这个稍微高级一点Python 3.8 才加入的。它允许你在表达式里同时赋值# 不用海象运算符datainput(输入内容)iflen(data)0:print(f你输入了{len(data)}个字符)# 用海象运算符if(n:len(input(输入内容)))0:print(f你输入了{n}个字符)一个更实际的场景# 在 while 循环里读取数据while(line:input( ))!quit:print(f你输入了:{line})这个运算符用好了可以让代码更简洁用不好反而会让代码更难读。初期不强制使用等后面遇到合适的场景再说。本章小结算术运算符 - * / // % **注意/返回浮点数//是向下取整比较运算符 ! 支持链式比较逻辑运算符and or not有短路求值特性成员运算符in和not in非常直观好用不确定优先级就加括号别硬记海象运算符:可以在表达式中同时赋值面试题Q110 / 3、10 // 3、10 % 3的结果分别是什么点击查看答案10 / 33.3333333333333335浮点除法10 // 33整除向下取整10 % 31取余注意-10 // 3的结果是-4而不是-3因为整除是向下取整向负无穷方向不是向零取整。Q2and和or的短路求值是什么意思有什么实际用途点击查看答案短路求值是指逻辑运算时如果第一个操作数已经能确定结果就不会计算第二个操作数。A and B如果 A 为假直接返回 A不计算 BA or B如果 A 为真直接返回 A不计算 B实际用途安全的属性/索引访问if obj and obj.name先检查 obj 不是 None 再访问属性设置默认值value user_input or default延迟计算把开销大的操作放在后面前面的条件不满足就跳过Q3-7 // 2的结果是什么为什么不是-3点击查看答案结果是-4。Python 的整除//是向下取整floor division也就是向负无穷方向取整。-7 / 2 -3.5向下取整就是-4。很多其他语言比如 C、Java的整除是向零取整所以-7 / 2在这些语言里是-3。这是 Python 和其他语言的一个区别面试经常考。Q4x 5表达式1 x 10的结果是什么Python 是怎么处理的点击查看答案结果是True。Python 会把1 x 10展开为1 x and x 10也就是1 5 and 5 10两个都是 True所以结果是 True。这是 Python 独有的链式比较语法跟数学里的写法一致比大多数语言更直观。注意x只会被计算一次。上一章 | 下一章字符串 →