07.Python运算符详解与编码基础

**摘要:**本文系统介绍了 Python 运算符的分类与用法,涵盖算术、比较、赋值、逻辑、位、成员、身份运算符及优先级规则,并深入讲解了字符集、编码原理以及 Python 3 默认的 UTF-8 编码机制,帮助开发者全面掌握 Python 运算与编码处理的核心知识。

目录

一、Python运算符概览

二、各类运算符详解

[1. 算术运算符](#1. 算术运算符)

[2. 比较(关系)运算符](#2. 比较(关系)运算符)

[3. 赋值运算符](#3. 赋值运算符)

[4. 逻辑运算符](#4. 逻辑运算符)

[5. 位运算符](#5. 位运算符)

[6. 成员运算符](#6. 成员运算符)

[7. 身份运算符](#7. 身份运算符)

[8. 运算符优先级](#8. 运算符优先级)

三、编码、字符集与Python默认编码

[1. 字符集与编码的基本概念](#1. 字符集与编码的基本概念)

[2. Python的默认编码](#2. Python的默认编码)

[3. 文件读写与编码](#3. 文件读写与编码)

[4. 编码问题排查与处理](#4. 编码问题排查与处理)

四、总结


一、Python运算符概览

Python运算符是用于在程序中执行各种运算的符号。它们可以操作一个或多个操作数(值或变量),并返回结果。Python运算符主要分为以下几类:

  • 算术运算符:用于基本的数学运算。
  • 比较(关系)运算符:用于比较两个值。
  • 赋值运算符:用于给变量赋值。
  • 逻辑运算符:用于组合条件语句。
  • 位运算符:对整数进行二进制位操作。
  • 成员运算符:测试序列中是否包含某个成员。
  • 身份运算符:比较两个对象的内存地址。
  • 运算符优先级:决定表达式中运算的执行顺序。

二、各类运算符详解

1. 算术运算符

算术运算符用于执行基本的数学运算,如加、减、乘、除等。

python 复制代码
# 算术运算符示例
a = 10
b = 3
print(a + b)   # 加法:13
print(a - b)   # 减法:7
print(a * b)   # 乘法:30
print(a / b)   # 除法:3.333...
print(a // b)  # 整除:3
print(a % b)   # 取模(求余):1
print(a ** b)  # 幂运算:1000

注意// 是向下取整的整除,% 返回除法的余数,** 是幂运算符。

2. 比较(关系)运算符

比较运算符用于比较两个值,返回布尔值 TrueFalse

python 复制代码
# 比较运算符示例
x = 5
y = 10
print(x == y)   # 等于:False
print(x != y)   # 不等于:True
print(x > y)    # 大于:False
print(x < y)    # 小于:True
print(x >= y)   # 大于等于:False
print(x <= y)   # 小于等于:True

这些运算符不仅适用于数字,也适用于字符串、列表等其他可比较的数据类型。

3. 赋值运算符

赋值运算符用于给变量赋值,包括简单的赋值和复合赋值。

python 复制代码
# 赋值运算符示例
c = 5      # 基本赋值
c += 3     # 等价于 c = c + 3,结果 c = 8
c -= 2     # 等价于 c = c - 2,结果 c = 6
c *= 4     # 等价于 c = c * 4,结果 c = 24
c /= 3     # 等价于 c = c / 3,结果 c = 8.0
c //= 2    # 等价于 c = c // 2,结果 c = 4.0
c %= 3     # 等价于 c = c % 3,结果 c = 1.0
c **= 2    # 等价于 c = c ** 2,结果 c = 1.0

4. 逻辑运算符

逻辑运算符用于组合条件语句,包括 andornot

python 复制代码
# 逻辑运算符示例
age = 25
has_license = True
and:两个条件都为真时返回真
can_drive = (age >= 18) and has_license  # True
or:至少一个条件为真时返回真
is_teenager = (age >= 13) or (age <= 19)  # True
not:反转布尔值
is_child = not (age >= 18)  # False

Python 中的逻辑运算符具有短路特性:and 遇到第一个假值就停止,or 遇到第一个真值就停止。

5. 位运算符

位运算符直接对整数的二进制位进行操作。

python 复制代码
# 位运算符示例
m = 10  # 二进制:1010
n = 4   # 二进制:0100
print(m & n)   # 按位与:0  (0000)
print(m | n)   # 按位或:14 (1110)
print(m ^ n)   # 按位异或:14 (1110)
print(~m)      # 按位取反:-11
print(m << 1)  # 左移一位:20 (10100)
print(m >> 1)  # 右移一位:5  (0101)

6. 成员运算符

成员运算符用于测试序列(如字符串、列表、元组、字典、集合)中是否包含某个成员。

python 复制代码
# 成员运算符示例
fruits = ["apple", "banana", "cherry"]
text = "Hello World"
print("banana" in fruits)      # True
print("orange" not in fruits)  # True
print("World" in text)         # True
print("Python" not in text)    # True

7. 身份运算符

身份运算符用于比较两个对象的内存地址(是否是同一个对象)。

python 复制代码
# 身份运算符示例
list1 = [1, 2, 3]
list2 = [1, 2, 3]
list3 = list1
print(list1 is list2)      # False,值相同但不是同一个对象
print(list1 is list3)      # True,指向同一个对象
print(list1 is not list2)  # True

注意is 比较的是对象标识(内存地址),而 == 比较的是值是否相等。

8. 运算符优先级

当表达式中包含多个运算符时,Python 会按照优先级顺序执行运算。优先级从高到低大致如下:

  1. () - 括号
  2. ** - 幂运算
  3. ~+- - 按位取反、正负号
  4. *///% - 乘、除、整除、取模
  5. +- - 加、减
  6. <<>> - 位移
  7. & - 按位与
  8. ^ - 按位异或
  9. | - 按位或
  10. <<=>>=!=== - 比较运算符
  11. not - 逻辑非
  12. and - 逻辑与
  13. or - 逻辑或
  14. =+=-= 等 - 赋值运算符

可以使用括号来明确指定运算顺序,提高代码可读性。

三、编码、字符集与Python默认编码

1. 字符集与编码的基本概念

字符集(Character Set):是一组字符的集合,为每个字符分配一个唯一的编号(码点)。常见的字符集有:

  • ASCII:美国信息交换标准代码,包含128个字符(0-127)
  • GB2312/GBK:中国国家标准,支持简体中文
  • Big5:繁体中文编码
  • Unicode:国际标准,旨在包含世界上所有字符

编码(Encoding):是将字符集中的字符码点转换为计算机可存储的二进制序列的规则。同一个字符集可以有多种编码方式:

  • UTF-8:Unicode的一种变长编码,兼容ASCII
  • UTF-16:使用16位或32位表示字符
  • UTF-32:固定使用32位表示每个字符
  • GB2312/GBK:中文编码方案

2. Python的默认编码

Python 3 全面采用 Unicode 作为字符串的内部表示,这解决了 Python 2 中的编码混乱问题。

源代码文件编码

python 复制代码
# Python 3 默认使用 UTF-8 编码
# 可以在文件开头指定编码方式
# -*- coding: utf-8 -*-
包含中文的字符串
chinese_text = "你好,世界!"
print(chinese_text)  # 正常输出:你好,世界!

字符串类型

  • str 类型:存储 Unicode 字符(Python 3)
  • bytes 类型:存储原始字节序列
  • bytearray 类型:可变的字节序列
python 复制代码
# 字符串与字节的转换
text = "Python编程"
byte_data = text.encode('utf-8')  # 编码为UTF-8字节
print(byte_data)  # b'Python\xe7\xbc\x96\xe7\xa8\x8b'
decoded_text = byte_data.decode('utf-8')  # 解码为字符串
print(decoded_text)  # Python编程
查看系统默认编码
import sys
print(sys.getdefaultencoding())  # 通常输出:utf-8

3. 文件读写与编码

在 Python 中读写文件时,需要特别注意编码问题:

python 复制代码
# 写入文件(指定编码)
with open('example.txt', 'w', encoding='utf-8') as f:
    f.write("这是UTF-8编码的中文文本")
读取文件(指定相同编码)
with open('example.txt', 'r', encoding='utf-8') as f:
content = f.read()
print(content)  # 这是UTF-8编码的中文文本
处理不同编码的文件
with open('gbk_file.txt', 'r', encoding='gbk') as f:
gbk_content = f.read()
print(gbk_content)

4. 编码问题排查与处理

常见的编码问题及解决方法:

python 复制代码
# 1. 编码错误处理
try:
    with open('file.txt', 'r', encoding='utf-8') as f:
        content = f.read()
except UnicodeDecodeError as e:
    print(f"编码错误:{e}")
    # 尝试其他编码
    with open('file.txt', 'r', encoding='gbk') as f:
        content = f.read()
2. 忽略无法解码的字符
with open('file.txt', 'r', encoding='utf-8', errors='ignore') as f:
content = f.read()
3. 替换无法解码的字符
with open('file.txt', 'r', encoding='utf-8', errors='replace') as f:
content = f.read()
4. 检测文件编码(需要安装chardet库)
pip install chardet
import chardet
with open('unknown.txt', 'rb') as f:
raw_data = f.read()
result = chardet.detect(raw_data)
print(f"检测到的编码:{result['encoding']}")
print(f"置信度:{result['confidence']}")

四、总结

Python 运算符提供了丰富的运算功能,从基本的算术运算到复杂的位运算,覆盖了程序开发中的各种需求。理解运算符的优先级和结合性对于编写正确的表达式至关重要。

编码是 Python 开发中不可忽视的基础知识。Python 3 默认使用 UTF-8 编码,这大大简化了国际化开发。在处理文件、网络数据或与外部系统交互时,明确指定正确的编码可以避免许多常见的乱码问题。

掌握这些基础知识后,你可以更自信地编写 Python 代码,处理各种数据类型和编码场景。

相关推荐
cndes12 分钟前
给Miniconda换源,让包下载更迅速
开发语言·python
Metaphor69232 分钟前
使用 Python 添加、隐藏和删除 PDF 图层
python·pdf·图层
丨白色风车丨36 分钟前
【Python 计算机视觉】基于 Dlib+OpenCV 实现实时人眼疲劳检测(闭眼预警)
python·opencv·计算机视觉
嘘嘘出差1 小时前
Python 爬虫入门实战:爬取豆瓣电影 Top 250
开发语言·爬虫·python
爱写代码的倒霉蛋1 小时前
实现协程的三种方式
开发语言·python
崖边看雾2 小时前
记录Python学习——第一章环境安装下载(Windows)
windows·python·学习·pycharm
用户298698530142 小时前
Python 实现 Excel 到 ODS、XPS、PostScript 及 PDF/A-1b 的格式转换
后端·python·excel
本地化文档3 小时前
xlwings-docs-l10n
python·github·excel·gitcode·sphinx
梅雅达编程笔记3 小时前
零基础学 Python 第7章 | 字典 dict:键值对存储
开发语言·python·beautifulsoup·numpy·pandas