Python基础
发布于2025-03-16 22:05:23,更新于2025-03-18 22:08:35,标签:python 文章会持续修订,转载请注明来源地址:https://meethigher.top/blog本文示例代码meethigher/python-learn: python基础语法学习demo
一、Python 安装
对于 Python 版本的管理,直接安装可能会导致版本不兼容或管理上的麻烦,特别是当你需要在多个项目中使用不同的 Python 版本时。为此,推荐使用 pyenv
这样的版本管理工具,它可以帮助你管理多个 Python 版本,并且能方便地在不同版本之间切换。
1.1 安装 pyenv
直接访问 pyenv,按照说明,下载安装即可。
1.2 安装 Python 版本
安装好 pyenv
后,你可以通过以下命令查看支持的 Python 版本:
1 | pyenv install --list |
选择你需要的版本并安装:
1 | pyenv install 3.11.9 |
安装完成后,你可以设置全局默认版本:
1 | pyenv global 3.11.9 |
使用 pyenv versions
可以查看当前安装的所有 Python 版本,并通过 pyenv local <version>
来为某个项目设置局部版本。
1.3 pip 使用
pip(Python Package Installer)是 Python 官方推荐的包管理工具,用于安装、更新、卸载第三方库。
操作 | 命令 |
---|---|
检查 pip 版本 | pip --version |
安装最新库 | pip install 包名 |
安装指定版本 | pip install 包名==版本号 |
查看已安装的库 | pip list |
查看库信息 | pip show 包名 |
更新库 | pip install --upgrade 包名 |
卸载库 | pip uninstall 包名 |
导出依赖库 | pip freeze > requirements.txt |
安装多个库 | pip install -r requirements.txt |
更换国内镜像源 | pip install -i 镜像地址 包名 |
二、Python 基础语法
2.1 变量与数据类型
2.1.1 基本数据类型
在Python中,常见的基本数据类型包括:
- 整数类型 (int)
- 浮点数类型 (float)
- 字符串类型 (str)
- 用于表示文本数据,如
"Hello"
,'Python'
。
- 用于表示文本数据,如
- 布尔类型 (bool)
- 用于表示真假值,只有两个取值:
True
和False
。
- 用于表示真假值,只有两个取值:
- 列表类型 (list)
- 用于存储多个元素的有序集合,元素可以是不同类型,如
[1, 2.5, "hello"]
。
- 用于存储多个元素的有序集合,元素可以是不同类型,如
- 元组类型 (tuple)
- 与列表相似,但不可变,如
(1, 2.5, "hello")
。
- 与列表相似,但不可变,如
- 集合类型 (set)
- 用于存储不重复的元素的集合,如
{1, 2, 3}
。
- 用于存储不重复的元素的集合,如
- 字典类型 (dict)
- 用于存储键值对(key-value pairs)的集合,如
{"name": "Alice", "age": 25}
。
- 用于存储键值对(key-value pairs)的集合,如
- None 类型
- 表示“无值”或“空值”,常用于初始化变量或作为函数的返回值,如
None
。
- 表示“无值”或“空值”,常用于初始化变量或作为函数的返回值,如
这些是Python中最常用的基本数据类型。
以下是一些常见的用法:
1 | x = 10 # 整数 |
需要注意 Python 中浮点除法 /
和向下取整除法 //
之间的区别
2.1.2 数据类型常用操作
字符串操作
1 | # 切片 |
列表操作
1 | # 增 |
字典操作
1 | # 键值对操作 |
2.2 条件语句
Python 使用 if
、elif
和 else
来控制程序的流程。elif
用于多重条件判断。
1 | age = 18 |
2.3 循环语句
Python 支持 for
和 while
循环。建议不要直接使用常量值进行循环,而是使用变量来控制循环次数。
1 | # 定义循环次数的变量 |
2.4 print 函数
print()
用于输出信息到控制台,常用于调试和查看程序的运行结果。它可以接受多个参数,并以空格分隔输出。
1 | # 输出单个字符串 |
print-f 使用方式说明:f-string
(格式化字符串字面值)是 Python 3.6 及以上版本引入的一种字符串格式化方法。在字符串前加上 f
或 F
前缀,然后在字符串中使用大括号 {}
来包含表达式,Python 会在运行时将这些表达式求值并替换到字符串中。这种方式简洁直观,提高了代码的可读性和可维护性。例如上述示例中,{name}
和 {age}
会被变量 name
和 age
的实际值替换。
三、函数
3.1 定义函数
使用 def
关键字定义函数,函数可以接受参数并返回结果。
1 | def add(a, b=5): |
函数调用:
1 | print(add(10)) # 调用时只传递了 a,b 使用默认值 5 -> 10 + 5 = 15 |
3.2 函数参数详解
3.2.1 可变参数(args 和 *kwargs)
*args
是一个元组,**kwargs
是一个字典
1 | # *args 用于接收任意数量的位置参数 |
3.2.2 参数解包
1 | def add(a, b): |
3.3 装饰器
装饰器本质上是一个高阶函数,它可以在不修改原函数代码的情况下,动态地添加功能。这点就类似于 Java 中的动态代理。
1 | def decorator(func): |
四、面向对象
4.1 类和对象
Python 是一门面向对象的编程语言。类是对象的模板,对象是类的实例。
1 | class Dog: |
创建对象并调用方法:
1 | dog1 = Dog("Buddy", 3) |
4.2 类的继承机制
像 Java、C# 只支持单继承,他们虽然不支持多继承,但是通过实现多接口来间接弥补了多继承的缺陷。
像 C++、Python 既支持单继承,也支持多继承。
4.2.1 单继承
1 | class Animal: |
4.2.2 多继承
1 | class Flyable: |
4.2.3 方法重写实现多态性
1 | class Shape: |
4.3 魔法方法和属性
4.3.1 魔法方法
魔法方法是 Python 中的一种特殊方法,魔法方法的名称必须以双下划线开头和结尾。例如,__init__
、__add__
、__len__
。
这些方法通常在特定的上下文中自动调用,用户不需要直接调用它们。
1 | class Book: |
4.3.2 类属性和实例属性的区别
1 | class Car: |
五、线程与协程
5.1 线程
Python 提供了 threading
模块来处理多线程。每个线程都是一个独立的执行流,在多核 CPU 上可以并行运行。
1 | import threading |
5.2 协程
协程是通过 asyncio
模块实现的轻量级线程。它比线程更节省资源,适用于 I/O 密集型任务。
async
和 await
是 Python 3.5 引入的关键字,用于简化异步编程。
1 | import asyncio |
解释:
async def
用于定义一个异步函数,也叫作 协程(coroutine)。协程函数与普通的函数不同,它是可暂停的、可恢复的。定义协程函数时,必须在函数前加上async
关键字。await
用来等待一个异步操作的结果,它只能在async
函数内部使用。当 Python 执行到await
时,它会暂停当前的协程,直到await
后面的异步操作完成后,才会继续执行。
六、其他语法
6.1 列表解析
列表解析是 Python 的一项强大特性,可以通过简洁的语法生成列表。
1 | # 基本的列表解析 |
6.2 生成器
生成器(Generator) 是一种用于创建迭代器的工具,它允许你在迭代数据时按需生成值,而不是一次性生成所有数据并存储在内存中,从而更节省内存并提高效率。
生成器的核心特性是惰性求值,它会在每次需要下一个元素时才计算并返回该元素。生成器是通过一个特殊的函数创建的,该函数使用 yield 关键字来逐步返回值,而不是像普通函数那样一次性返回结果。每次调用 yield 时,函数会暂停执行并返回一个值,直到下一次请求时才恢复执行。
1 | def count_up_to(max): |
使用生成器:
1 | gen = count_up_to(5) |
6.3 异常处理
Python 提供了强大的异常处理机制,通过 try
、except
、else
和 finally
可以进行错误捕获与处理。
1 | try: |
6.4 文件操作
with 是 Python 中的一个上下文管理器(context manager)语法,用于简化资源的管理,尤其是在处理需要显式打开和关闭的资源时(如文件、数据库连接、网络套接字等)。
读取文件
1 | # 读文件 |
七、框架使用
7.1 flask
安装框架
1 | pip install flask |
参照 reqres.in
实现 api
1 | from flask import Flask, request, jsonify |
7.2 transformers
7.3 torch
八、程序打包
打包工具如 pyinstaller
可以将 Python 程序打包成独立的可执行文件,方便分发和使用。
8.1 基本打包
首先,确保你已经安装了 pyinstaller
,如果没有安装,可以使用以下命令进行安装:
1 | pip install pyinstaller |
如果你有一个简单的 Python 脚本,例如 your_script.py
,可以使用以下命令将其打包成一个独立的可执行文件:
1 | pyinstaller --clean --onefile --icon=test.ico --name=hh.exe your_script.py |
执行上述命令后,pyinstaller
会在 dist
目录下生成一个与脚本同名的可执行文件。
如果你希望将依赖项分离出来,以减小可执行文件的大小,可以使用以下命令:
1 | pyinstaller --clean --onedir --icon=test.ico --name=hh.exe your_script.py |
--onedir
选项会将程序和依赖项打包到一个目录中,而不是一个单独的文件。这样,可执行文件会变小,但需要将整个目录一起分发。
在初次打包时,pyinstaller 会自动生成 .spec
扩展名的配置文件,可以通过手动编辑 .spec
文件来定制打包行为。
8.2 处理依赖多个自定义 Python 脚本的情况
假设你的 Python 主函数依赖了几个自己写的 Python 脚本,目录结构如下:
1 | project/. |
其中,Example09.py
是主程序,Sub09Func.py
和 Sub09Class.py
是自定义的模块。
Example09.py
示例代码:
1 | # 引入其他模块写的函数 |
Sub09Func.py
示例代码:
1 | def print_info(**kwargs): |
Sub09Class.py
示例代码:
1 | class Animal: |
要将这些脚本打包成一个程序入口,可以在项目根目录下执行以下命令:
1 | pyinstaller --onefile Example09.py |
pyinstaller
会自动检测依赖关系,并将其包含到打包结果中。打包完成后,在 dist
目录下会生成一个 main
可执行文件,运行该文件即可启动整个程序。
有一点注意,当你第一次导入某个模块时,Python 会编译该模块并生成 .pyc
文件。