目录
四、语句与缩进(Statements & Indentation)
Python初识
一、Python的核心优势
-
简洁易读的语法
Python采用缩进强制代码结构,避免了其他语言中常见的括号和分号,使代码更接近自然语言。例如,用5行Python代码即可实现其他语言10行的功能。这种设计降低了学习门槛,尤其适合编程新手和非计算机专业人士。 -
跨平台兼容性
Python支持Windows、Linux、macOS等主流操作系统,其解释器(如CPython、PyPy)能在不同平台上无缝运行。开发者只需维护一套代码,即可实现跨平台部署。 -
丰富的第三方库
Python拥有超过30万个第三方库(PyPI数据),覆盖从科学计算到Web开发的各个领域。例如:- NumPy/Pandas:数据分析和处理;
- TensorFlow/PyTorch:深度学习;
- Django/Flask:全栈Web开发;
- Requests:HTTP请求处理。
这种“电池内置”(Batteries Included)的理念显著提升了开发效率。
-
活跃的社区支持
Python拥有全球第二大开发者社区(Stack Overflow数据),任何问题都能快速获得解答。官方文档完善,且开源项目贡献者数量庞大,持续推动语言进化。 -
高扩展性与集成能力
通过Cython或C/C++扩展,Python可调用高性能代码弥补解释型语言的性能短板。同时,它与Java(Jython)、.NET(IronPython)等平台的互操作性极强。
二、Python的核心特性
-
动态类型与强类型
Python在运行时确定变量类型(动态类型),但禁止不合理的类型操作(如数字与字符串相加),兼具灵活性与安全性。 -
多范式编程支持
支持面向对象(类与继承)、函数式编程(lambda、map/reduce)、过程式编程等多种范式,适应不同场景需求。 -
解释型与交互式执行
通过REPL(交互式解释器)实现即时调试,结合Jupyter Notebook等工具,成为数据科学领域的标准工作流。 -
自动内存管理
采用引用计数与垃圾回收机制,开发者无需手动释放内存,减少内存泄漏风险。 -
元编程能力
通过装饰器、元类等特性,允许在运行时修改类或函数的行为,为框架开发(如Django ORM)提供强大支持。
三、Python的主要应用领域
领域 | 典型应用场景 | 核心工具/库 |
---|---|---|
Web开发 | 全栈网站、API服务、微服务架构 | Django, Flask, FastAPI |
数据科学 | 数据清洗、统计分析、可视化 | Pandas, Matplotlib, Seaborn |
人工智能 | 机器学习、深度学习、自然语言处理 | TensorFlow, PyTorch, spaCy |
自动化运维 | 系统监控、日志分析、批量任务 | Ansible, Paramiko, Fabric |
科学计算 | 数值模拟、工程计算、物理建模 | SciPy, SymPy, OpenCV |
游戏开发 | 独立游戏原型、2D/3D游戏逻辑 | Pygame, Godot Engine |
金融科技 | 量化交易、风险分析、区块链开发 | QuantLib, Backtrader, Web3.py |
物联网(IoT) | 设备控制、传感器数据处理 | MicroPython, Raspberry Pi库 |
网络爬虫 | 数据采集、内容聚合 | Scrapy, BeautifulSoup, Selenium |
教育与科研 | 编程入门教学、算法验证 | Turtle, Jupyter Lab |
四、典型应用案例扩展
-
人工智能与深度学习
Python在AI领域占据主导地位。例如,OpenAI的GPT系列模型基于PyTorch开发,而TensorFlow则被Google用于AlphaGo的核心算法。Keras等高层API进一步降低了模型构建门槛。 -
Web开发框架对比
- Django:提供ORM、Admin后台等全功能支持,适合中大型项目(如Instagram);
- Flask:轻量级框架,灵活定制(如Pinterest早期版本);
- FastAPI:异步支持和高性能API开发新星(被Netflix采用)。
-
数据科学工作流
典型流程包括:- 使用Pandas清洗数据;
- 通过Scikit-learn训练机器学习模型;
- 用Matplotlib生成可视化报告;
- 最终部署为Flask API或Streamlit交互应用。
-
自动化与DevOps
Python脚本可自动化执行服务器配置(Ansible)、监控(Prometheus+Python exporter)、CI/CD流程(Jenkins插件),提升运维效率。
Linux环境中安装Python
1:下载 Python3.11.6
可以在 Python 的官方网站下载,网址是 http://www.python,org
2:安装依赖包
(1)设置yum 仓库
设置好 centos 基础和 epel 扩源,本案例使用阿里的更新源。
(2)安装依赖包
[root@localhost ~]# yum y install gcc zlib zlib-devel libffi libffi-devel
#安装源码编译需要的编译环境
Iroot@localhost ~]# yum -y install readline-devel
#可以解决后期出现的方向键、删除键乱码问题,这里提前避免。
[root@localhost ~]# yum y install openssl-devel openssl11 openssl11-devel
[root@localhost ~]# export CFLAGS=$(pkg-config --cflags openssl11)
[root@localhost ~]# export LDFLAG5=$(pkg-config .libs openssl11)
#设置编译FLAG,以便使用最新的 openss1 库
3:解压 Python 压缩包
解压 python-3.11.6.tgz,命令如下:
[root@localhost ~]# tar xvf python-3.11.6.tar.xz
4:安装Python
[root@master home]# cd Python.3.11.6/
[root@master python-3.11.6]#./configure --prefix=/usr/local/python3
此处有可造配置项。含义如下:
- --enable-optinizationS:用 PROFILE TASK 启用以配置文件主导的优化(PGO)
- --mith-lto:在编译过程中启用链接时间优化(LTO)
- --enab1e-shared:启用共享Python 库libpython 的译
- --mlth-ssl:编译安装 ss1 模块到 python3 中(默认)
5:编译及安装
编译安装 Python-3,11.6。命令如下:
[root@master python-3.11.6]# make
[root@master Python-3.11.6]# make install
如果主机上已经安装有其他版本的python3,注意是3的版本,要使用 altinstall 而不是insta11 。二者的一个重要区别在于,后者会创建符号链接,将 python3 等命令链接到正在安装的新版本 Python 3 上,这可能会破坏系统。如果是 python2 的版本,不会有此影响。
6:建立软连接
建立相关软连接,命令如下:
[root@master Python-3.11.6]# ln-s /usr/local/python3/bin/python3 /usr/bin/python3
[root@master python-3.11.6]# ln-s /usr/local/python3/bin/pip3 /usr/bin/pip3
7:测试 Python3 运行
安装设置完毕,测试 Python3 的运行情况。命令如下:
[roat@master pythan.3.11.6]# python3
Python 3.11.6(default,Apr 22 2020,17:24:20)
[6Cc 4,8.5 28158623(ned Hat 4.8,5-16)] on 1inux
Type "help","copyright","credits"or "license" for more information.
>>> print('hello world')
>>> hello world
备注;
ctr1+0 或exit()退出
8:设置国内 pip 更新源
本案例使用阿里的更新源,
[roat@localhast ~]# cat <<E0F> /root/.config/pip/pip.conf
[global]
index-url.http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
备注:
使用如下命令也可以
pip3 config set global,index url http://nirrors.aliyun.con/pypi/simple
pip3 config set install.trusted-host mirrors.aliyun.com
9:更新pip 版本(必须更新)
[rootelocalhost ~l# pip3 install --uperade pip
Python的语法基础
一、标识符(Identifier)
1.1 定义与命名规则
标识符是用于命名变量、函数、类等程序元素的字符序列。Python标识符遵循严格规则:
- 首字符:字母(a-z, A-Z)或下划线(_),不能以数字开头。
- 后续字符:可包含字母、数字和下划线。
- 区分大小写:
myVar
与myvar
是两个不同的标识符。 - 禁止使用保留字:如
class
、def
等(详见第二部分)。
示例:
_valid_name = 10 # 合法
2invalid = 20 # 非法(数字开头)
my-variable = 30 # 非法(连字符不允许)
1.2 命名约定(PEP8)
Python社区通过PEP8风格指南约定命名规范:
- 变量/函数:小写字母+下划线(
snake_case
),如calculate_sum()
。 - 类名:驼峰式(
CamelCase
),如DataProcessor
。 - 常量:全大写+下划线(
UPPER_CASE
),如MAX_SIZE
。 - 私有成员:单下划线开头(
_internal_var
),双下划线表示名称改写(__private_var
)。
扩展:
- Unicode支持:Python 3允许使用Unicode字符命名,如
Δ = 0.001
(数学符号)。 - 描述性命名:避免使用
x
、tmp
等无意义名称,推荐user_count
、file_path
等自解释性命名。
二、保留字(Keywords)
2.1 保留字列表与作用
保留字是Python语言预定义的、具有特定功能的单词,不可作为标识符。Python 3.11共有36个保留字:
保留字列表 |
---|
False , None , True , and , as , assert , async , await , break , |
class , continue , def , del , elif , else , except , finally , |
for , from , global , if , import , in , is , lambda , nonlocal , |
not , or , pass , raise , return , try , while , with , yield |
作用示例:
- 流程控制:
if
,else
,for
,while
- 逻辑运算:
and
,or
,not
- 异步编程:
async
,await
(Python 3.5+)
查看方法:
import keyword print(keyword.kwlist) # 输出当前版本所有保留字
2.2 扩展:保留字的设计哲学
- 动态语言特性:保留字数量较少,反映Python的动态性。例如,没有
interface
关键字,因接口可通过抽象类实现。 - 版本演进:
async
和await
在Python 3.5引入以支持协程;nonlocal
在Python 3.0加入用于闭包变量修改。
三、注释(Comments)
3.1 单行与多行注释
- 单行注释:以
#
开头,作用到行尾。# 计算平均值 avg = sum / count
- 多行注释:使用三引号包裹,虽本质是字符串,但常被用作多行注释。
""" 函数功能:计算阶乘 参数n:整数输入 返回值:n的阶乘 """
3.2 文档字符串(Docstring)
通过三引号编写函数、模块或类的文档,可用__doc__
属性访问,并被工具(如Sphinx)生成API文档。
def add(a, b):
"""返回两个数的和"""
return a + b
print(add.__doc__) # 输出:返回两个数的和
扩展:
- 注释最佳实践:避免冗余(如
i += 1 # 将i加1
),应解释复杂逻辑背后的意图。 - 类型提示:Python 3.5+支持类型注释,增强代码可读性。
def greet(name: str) -> str: return f"Hello, {name}"
四、语句与缩进(Statements & Indentation)
4.1 缩进规则
Python使用缩进(通常4个空格)定义代码块,替代其他语言的{}
。同一代码块必须严格对齐。
if True:
print("Hello") # 属于if块
print("World") # 属于if块
print("Done") # 不属于if块
常见错误:
if True: print("Error") # IndentationError: expected an indented block
4.2 复合语句与多行书写
- 分号分隔:一行写多个语句用分号分隔(不推荐)。
x = 5; y = 10; print(x + y)
- 行连接符:使用
\
或括号实现多行书写。total = (x + y + z)
扩展:
- 与其他语言对比:C/Java使用大括号,Python缩进强制代码可读性。
- 工具支持:使用
autopep8
或black
自动格式化代码,确保缩进一致。
五、pass语句
5.1 作用与使用场景
pass
是空操作语句,用于语法需要但无实际操作的场景:
- 占位符:定义空函数、类或条件块。
class MyClass: pass # 待实现 if x < 0: pass # 后续处理
- 避免语法错误:确保代码结构完整。
5.2 扩展:与其他语言的对比
- JavaScript:使用空对象
{}
或分号;
作为占位。 - C/C++:空语句用分号
;
表示。 - Python替代方案:可用
...
(Ellipsis)作为占位,但通常推荐pass
。
示例对比:
def my_function(): pass # Python function myFunction() {} // JavaScript
Python常用的数据类型
python内置的数据类型有数字、字符串、元组、列表和字典 。
一、数字类型(Numeric Types)
1.1 基础类型
Python支持三种基础数字类型:
- 整型(int):无限精度整数,如
42
,-3
,0x1A
(十六进制) - 浮点型(float):双精度浮点数,如
3.14
,-2.5e3
- 复数(complex):实部+虚部,如
1+2j
特殊值:
- 布尔型(bool):
True(1)
和False(0)
是int的子类 - NaN/Infinity:使用
float('nan')
和math.inf
表示
1.2 数值运算
# 算术运算 print(7 // 3) # 整除 → 2
print(2 ** 10) # 幂运算 → 1024
print(divmod(10,3)) # 返回商和余数 → (3,1)
# 类型转换
int(3.9) # 截断 → 3
round(2.675, 2) # 四舍五入 → 2.67(注意浮点精度问题)
# 数学模块
import math
math.sqrt(16) # 开平方 → 4.0
math.gcd(12,15) # 最大公约数 → 3
1.3 扩展应用
- 高精度计算:使用
decimal
模块避免浮点误差from decimal import Decimal print(Decimal('0.1') + Decimal('0.2') == Decimal('0.3')) # True
- 科学计算:
numpy
库支持数组运算与高效数值处理 - 位运算:处理二进制数据
x = 0b1010 # 二进制 x << 2 # 左移 → 0b101000 (40)
二、字符串(String)
2.1 不可变序列
字符串由Unicode字符组成,使用单引号、双引号或三引号定义:
s1 = 'Hello'
s2 = "World"
s3 = '''多行
字符串'''
2.2 字符串操作
- 索引与切片:
s = 'Python' print(s[2]) # 't'(正向索引) print(s[-3:]) # 'hon'(反向切片)
- 常用方法:
'Abc'.lower() # → 'abc' ' hello '.strip() # → 'hello' 'a,b,c'.split(',') # → ['a','b','c'] 'Py' in 'Python' # → True
- 格式化:
f"{3.14159:.2f}" # → '3.14'(f-string,Python 3.6+) "{1} {0}".format("A", 5) # → '5 A'
2.3 高级特性
- 编码处理:
'中文'.encode('utf-8') # → b'\xe4\xb8\xad\xe6\x96\x87' bytes_data.decode('gbk')
- 正则表达式:
re
模块实现模式匹配import re re.findall(r'\d+', 'ID: 123, Phone: 456') # → ['123','456']
- 字符串驻留:小字符串被缓存复用(
intern
机制)
三、元组(Tuple)
3.1 不可变序列
元组用逗号创建,通常用圆括号包裹:
t1 = (1, 'a') # 标准定义
t2 = 10, 20 # 无括号形式
single = (42,) # 单元素元组必须加逗号
3.2 特性与应用
- 不可变性:元素不可修改,适合存储常量数据
- 拆包与交换:
x, y = (5, 10) # 拆包 → x=5, y=10 x, y = y, x # 交换变量值
- 命名元组:
collections.namedtuple
创建带字段名的元组from collections import namedtuple Point = namedtuple('Point', ['x', 'y']) p = Point(3, 4) print(p.x, p.y) # → 3 4
3.3 性能优势
- 内存占用:元组比列表更节省内存(无动态扩容机制)
- 哈希化:可作为字典的键(列表不可)
- 函数返回值:多值返回默认使用元组封装
四、列表(List)
4.1 可变序列
列表用方括号定义,元素可修改:
lst = [1, 'two', 3.0]
lst[1] = 2 # 修改元素 → [1,2,3.0]
lst.append(4) # 追加 → [1,2,3.0,4]
4.2 核心操作
- 切片修改:
lst[1:3] = ['a','b','c'] # 替换子序列
- 列表推导式:
squares = [x**2 for x in range(10) if x%2==0] # → [0,4,16,36,64]
- 深拷贝与浅拷贝:
import copy a = [[1,2],3] b = copy.deepcopy(a) # 深拷贝独立对象
4.3 高级技巧
- 多维列表:嵌套结构实现矩阵
matrix = [[1,2,3], [4,5,6], [7,8,9]] \ matrix[1][2] # → 6
- 栈与队列:
stack = [] stack.append('A') # 入栈 stack.pop() # 出栈 from collections import deque queue = deque(['A','B']) queue.appendleft('C') # 队首插入
五、字典(Dictionary)
5.1 哈希映射
字典通过键值对存储数据,用花括号定义:
d = {'name': 'Alice', 'age': 30}
d['email'] = 'alice@example.com' # 添加键值对
5.2 核心操作
- 键的要求:键必须是不可变类型(如字符串、数字、元组)
- 常用方法:
d.get('phone', 'N/A') # 安全获取 → 'N/A'(默认值) d.setdefault('gender', 'unknown') # 键不存在时设置默认值 for key, value in d.items(): # 遍历键值对
- 字典推导式:
{x: x**2 for x in range(5)} # → {0:0, 1:1, 2:4, ...}
5.3 扩展应用
- 默认字典:
collections.defaultdict
from collections import defaultdict word_count = defaultdict(int) for word in words: word_count[word] += 1
- 有序字典:
collections.OrderedDict
(Python 3.7+普通字典已有序) - 合并操作:
d1 = {'a':1} d2 = {'b':2} merged = {‌**d1, **‌d2} # → {'a':1, 'b':2}
六、扩展数据类型
6.1 字节类型
- bytes:不可变字节序列
b = b'ABC' # 只能包含ASCII字符
- bytearray:可变字节序列
ba = bytearray(b'hello') ba[0] = 72 # → bytearray(b'Hello')
6.2 集合(Set)
- 无序不重复元素集:
s = {1,2,3} s.add(4) # 添加元素 s1 | s2 # 并集
6.3 高级结构
- 枚举:
enum
模块创建具名常量from enum import Enum class Color(Enum): RED = 1 GREEN = 2
总结与对比
数据类型 | 可变性 | 有序性 | 存储方式 | 典型应用场景 |
---|---|---|---|---|
数字 | 不可变 | - | 单值 | 计算、计数器、数学运算 |
字符串 | 不可变 | 是 | 字符序列 | 文本处理、日志、格式化输出 |
元组 | 不可变 | 是 | 元素集合 | 常量数据、函数多返回值、字典键 |
列表 | 可变 | 是 | 元素集合 | 动态数据集合、栈/队列、迭代处理 |
字典 | 可变 | 无序 | 键值对哈希表 | 快速查找、配置信息、JSON数据处理 |
选择原则:
- 数据可变性:需要修改用列表/字典,不可变用元组/字符串
- 访问模式:按位置访问选列表/元组,按键访问用字典
- 性能要求:频繁增删用列表,只读数据用元组,快速查找用字典
- 内存优化:大量静态数据优先考虑元组而非列表
最佳实践:
- 优先使用列表推导式和字典推导式简化代码
- 使用类型提示增强可读性(Python 3.5+)
def process(data: list[tuple[str, int]]) -> dict[str, float]:
- 复杂场景选择collections模块(如
defaultdict
,Counter
)