资讯动态

第07章 Python 教程-基础语法:运算符

发布时间:2026/10/14 18:48:07 来源:尧图企业网站定制
第7章 基础语法运算符本章系统介绍 Python 的运算符。包括算术运算与除法规则、赋值与复合赋值、比较与链式比较、逻辑运算与短路求值、成员运算、身份运算和位运算并在最后说明运算符优先级与括号的使用其中赋值表达式:与负数位运算作为扩展内容介绍。7.1 运算符运算符用于对数据进行计算、比较、判断和赋值等操作。本节依次介绍算术、赋值、比较、逻辑、成员、身份和位运算符最后说明运算符的优先级与括号用法。7.1.1 算术运算符与除法规则算术运算符主要用于数值计算其中和*也可用于字符串等序列。常用运算符、相关函数及其规则如下运算符或函数作用与规则示例结果加法或序列拼接7 310-减法或取负7 - 34*乘法或序列重复7 * 321/真除法结果通常是浮点数7 / 32.333...//向下取整除法结果向负无穷方向取整-7 // 3-3%返回余数除数非零时满足被除数 除数 * 商 余数-7 % 32**幂运算7 ** 3343divmod(a, b)同时返回a // b和a % bdivmod(-7, 3)(-3, 2)/、//、%除数为零时触发异常10 / 0ZeroDivisionError下面的代码综合演示算术运算、负数的向下取整除法、divmod()以及字符串运算演示 Python 算术运算符和除法规则。 # 基本算术运算 left 20 right 6 print(f加法{left right}) print(f减法{left - right}) print(f乘法{left * right}) print(f真除法{left / right}) print(f向下取整除法{left // right}) print(f取模{left % right}) print(f幂运算{left**right}) print(f整除时真除法仍返回浮点数{8 / 2}) # // 向负无穷方向取整int() 向零取整 print(f-7 // 3 的结果{-7 // 3}) print(fint(-7 / 3) 的结果{int(-7 / 3)}) # 使用 divmod() 同时获取商和余数 dividend -7 divisor 3 quotient, remainder divmod(dividend, divisor) print(f商{quotient}余数{remainder}) print(f是否满足除法恒等式{divisor * quotient remainder dividend}) # 字符串支持拼接和重复 print(f字符串拼接{Py thon}) print(f字符串重复{- * 20}) # 以下代码取消注释后会触发 ZeroDivisionError # print(10 / 0)7.1.2 赋值与复合赋值运算符赋值运算符分为普通赋值和复合赋值。例如x 2的计算结果通常与x x 2相同但它只对左侧表达式求值一次并可能原地修改可变对象因此二者不始终完全等价。常用赋值运算符如下运算符示例常见效果x 2将右侧对象绑定到左侧名称不表示数学中的相等关系x 2加法后赋值-x - 2减法后赋值*x * 2乘法后赋值/x / 2真除法后赋值//x // 2向下取整除法后赋值%x % 2取模后赋值**x ** 2幂运算后赋值、\|、^x mask位运算后赋值、x 1移位后赋值下面的代码演示数值的复合赋值以及可变对象与不可变对象的不同表现演示 Python 赋值与复合赋值运算符。 # 对数值使用复合赋值 score 70 score 5 score * 2 print(f计算后的分数{score}) # 列表是可变对象 会原地修改列表 numbers [1, 2] shared_numbers numbers numbers [3] print(fnumbers{numbers}) print(fshared_numbers{shared_numbers}) print(f列表是否仍为同一个对象{numbers is shared_numbers}) # 字符串不可变 会创建新字符串并重新绑定变量 language Py original_language language language thon print(f原字符串{original_language}) print(f拼接后的字符串{language}) print(f字符串是否仍为同一个对象{language is original_language})7.1.2.1 赋值表达式:扩展知识扩展知识赋值表达式又称海象运算符初学阶段可以先使用更直观的普通赋值在需要减少重复计算时再学习本小节。:从 Python 3.8 开始可用。它的核心作用是将计算结果保存到变量的同时把该结果继续交给当前表达式使用。基本写法如下(name : expression)普通赋值与赋值表达式的区别如下写法类型作用length len(text)赋值语句将结果保存到length不能直接嵌入另一个表达式length : len(text)赋值表达式将结果保存到length同时产生该结果供当前表达式继续使用以(length : len(text)) 5为例Python 会依次完成计算len(text)得到字符串长度将该长度保存到length将该长度继续与5比较后续代码仍然可以使用已经保存的length。为了明确赋值表达式的作用范围通常会在其外部添加括号。只有当中间结果确实会在当前表达式或后续代码中使用时才建议使用:简单赋值仍应使用。下面的代码对比普通赋值与赋值表达式的写法对比普通赋值与赋值表达式。 text Python # 方式一先赋值再在条件中使用 normal_length len(text) if normal_length 5: print(f普通赋值字符串长度为 {normal_length}。) # 方式二在条件中赋值并立即使用该值 if (current_length : len(text)) 5: print(f赋值表达式字符串长度为 {current_length}。) print(f条件判断后仍可使用 current_length{current_length})7.1.3 比较运算符与链式比较比较运算符用于判断值之间的关系结果为True或False。Python 同时支持将多次比较连写在一个表达式中。不同数值类型通常可以直接比较字符串会按 Unicode 码点依次比较没有自然顺序关系的不兼容类型使用、等运算符时会触发TypeError。浮点特殊值nan与任何值包括自身的相等比较都为假应使用math.isnan()判断。运算符或写法作用示例值相等a b!值不相等a ! b大于a b小于a b大于等于a b小于等于a ba b c链式比较等价于a b and b c但b只求值一次18 age 60下面的代码综合演示普通比较、链式比较、不同类型的比较以及nan判断演示 Python 比较运算符和链式比较。 import math # 普通比较 left 10 right 20 print(f值是否相等{left right}) print(f值是否不相等{left ! right}) print(fleft 是否小于 right{left right}) print(fleft 是否大于等于 right{left right}) # 链式比较 age 20 print(f年龄是否在 18 到 59 之间{18 age 60}) # 数值类型与字符串比较 print(f3 是否小于 3.5{3 3.5}) print(fTrue 是否等于 1{True 1}) print(f字符串 23 是否小于 8{23 8}) # 使用 math.isnan() 判断 nan value float(nan) print(fnan 是否等于自身{value value}) print(f是否为 nan{math.isnan(value)}) # 以下代码取消注释后会触发 TypeError # print(10 20)7.1.4 逻辑运算符与短路求值逻辑运算符根据对象的真值组合或反转条件。value or default可以提供简单默认值但合法的0、空字符串或空容器也会被替换使用时需要确认业务含义。运算符含义求值规则and与左侧为假时直接返回左侧不计算右侧否则计算并返回右侧or或左侧为真时直接返回左侧不计算右侧否则计算并返回右侧not非根据对象真值返回严格的True或False下面的代码综合演示条件组合、返回操作数、默认值与短路求值演示 Python 逻辑运算符和短路求值。 # 组合和反转布尔条件 is_member True has_coupon False print(f是会员且有优惠券{is_member and has_coupon}) print(f是会员或有优惠券{is_member or has_coupon}) print(f不是会员{not is_member}) # and 和 or 返回决定结果的操作数 print(f7 and 4 的结果{7 and 4}) print(f0 and 4 的结果{0 and 4}) print(f7 or 4 的结果{7 or 4}) # 使用 or 提供默认值 user_input display_name user_input or 匿名用户 print(f显示名称{display_name}) # 左侧已经为假右侧的除法不会执行 divisor 0 safe_condition divisor ! 0 and 10 / divisor 1 print(f安全的除法条件{safe_condition})7.1.5 成员运算符in与not in成员运算的常见用法和注意事项如下场景写法说明判断存在value in container判断value是否为容器成员返回布尔值判断不存在value not in container判断value是否不是容器成员返回布尔值字符串substring in text判断子字符串是否存在字典键key in dictionary字典的成员运算默认检查键字典值value in dictionary.values()需要检查字典值时应显式调用values()查找性能—不同容器的查找性能可能不同将在容器数据类型章节介绍下面的代码综合演示列表、字符串和字典的成员判断演示 Python 成员运算符 in 和 not in。 # 判断列表元素和字符串子串 scores [88, 92, 79, 95, 60] print(f92 是否在列表中{92 in scores}) print(f100 是否不在列表中{100 not in scores}) print(fPy 是否在 Python 中{Py in Python}) # 字典成员运算默认检查键 user {name: 张三, age: 18} print(fname 是否为字典键{name in user}) print(f张三 是否为字典键{张三 in user}) print(f张三 是否为字典值{张三 in user.values()})7.1.6 身份运算符is与is not值比较、对象身份比较及其常用规则如下项目比较或返回内容说明值判断两个对象的值是否相等比较整数、字符串等对象的值时应使用该运算符!值判断两个对象的值是否不相等is对象身份判断两侧是否引用同一个对象不能用它比较值或依赖解释器的对象缓存is not对象身份判断两侧是否引用不同对象is None对象身份判断对象是否为None的推荐写法is not None对象身份判断对象是否不为None的推荐写法id(obj)身份标识返回对象在当前运行期间的身份标识可用于辅助观察对象身份下面的代码对比值相等与对象身份相同并演示None的正确判断方式演示 Python 值比较与对象身份比较的区别。 first [11, 22, 33] second first third [11, 22, 33] print(ffirst 与 second 的值是否相等{first second}) print(ffirst 与 second 是否为同一对象{first is second}) print(ffirst 与 third 的值是否相等{first third}) print(ffirst 与 third 是否为同一对象{first is third}) print(ffirst 与 second 的身份标识是否相等{id(first) id(second)}) result None print(fresult 是否为 None{result is None}) print(fresult 是否不为 None{result is not None})7.1.7 位运算符位运算符将整数按二进制位进行处理常用于权限标志、颜色值、网络协议和硬件数据等场景。初学阶段可以先理解非负整数的运算规则按位取反和负数位运算可以结合下一小节学习。运算符名称位规则或作用按位与两个位都为1时结果为1\|按位或至少一个位为1时结果为1^按位异或两个位不同时结果为1~按位取反对整数的每一个二进制位取反左移二进制位向左移动右侧补0非负整数左移n位相当于乘以2**n右移二进制位向右移动非负整数右移n位相当于向下整除2**n以28和22为例28 0001 1100 22 0001 0110 ---------------- 0001 0100 20 | 0001 1110 30 ^ 0000 1010 10下面的代码综合演示常用位运算以及移位运算与乘除法的关系演示 Python 非负整数的常用位运算。 left 28 right 22 print(f{left} {right} {left right}) print(f{left} | {right} {left | right}) print(f{left} ^ {right} {left ^ right}) print(f~{left} {~left}) print(f{left} 2 {left 2}) print(f{left} 2 {left 2}) # 对比移位运算与乘除 2 的幂 number 12 print(f左移 3 位{number 3}) print(f乘以 2**3{number * 2**3}) print(f右移 2 位{number 2}) print(f向下整除 2**2{number // 2**2})7.1.7.1 负数位运算扩展知识扩展知识负整数位运算涉及无限长度补码和算术右移。初次学习时掌握非负整数的位运算即可本小节可以在需要处理位协议、掩码或底层数据时再学习。Python 对负整数进行位运算时效果相当于使用无限长度的二进制补码因此按位取反始终满足~n -n - 1。负整数右移时使用算术右移左侧使用符号位填充。需要模拟固定位宽的无符号运算时应使用掩码截取指定的低位。例如0xFF可以保留整数的低 8 位演示 Python 负整数位运算和固定位宽掩码。 MASK_8_BIT 0xFF number -20 print(f~9 的结果{~9}) print(f是否满足 ~n -n - 1{~9 -9 - 1}) print(f-20 右移 2 位{number 2}) print(f-20 的低 8 位{number MASK_8_BIT:08b})7.1.8 运算符优先级与括号同一表达式包含多种运算符时Python 会按优先级和结合方向求值。括号可以改变默认的计算顺序也能明确表达意图表达式稍复杂时应优先使用括号提高可读性。常用运算符的优先级从高到低如下级别运算符或表达式说明高括号、索引、切片、函数调用、属性访问优先完成访问或调用括号可以改变默认的计算顺序**幂运算采用右结合2**3**2等价于2 ** (3 ** 2)x、-x、~x一元正号、负号和按位取反-2**2等价于-(2**2)*、、/、//、%乘法、矩阵乘法和除法类运算、-加法和减法、移位运算按位与^按位异或\|按位或比较、in、not in、is、is not比较、成员和身份运算not逻辑非and逻辑与or逻辑或条件表达式x if condition else y根据条件选择值lambdalambda 表达式低:赋值表达式下面的代码演示表格中几种容易混淆的优先级规则演示 Python 运算符优先级和括号的作用。 # 乘法的优先级高于加法括号可以改变顺序 without_parentheses 2 3 * 4 with_parentheses (2 3) * 4 print(f2 3 * 4 的结果{without_parentheses}) print(f(2 3) * 4 的结果{with_parentheses}) # 幂运算采用右结合 print(f2**3**2 的结果{2**3**2}) print(f(2**3)**2 的结果{(2**3)**2}) # 幂运算与一元负号 print(f-2**2 的结果{-2**2}) print(f(-2)**2 的结果{(-2)**2}) # 使用括号明确复合条件的意图 age 20 score 75 is_valid (age 18) and (score 60) print(f是否满足条件{is_valid})

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑