Python快速入门-零基础版
> **本文适合谁**:从来没写过 Python 的人。读完这篇,你能看懂 Python 代码,能写出可以运行的 AI 小程序,能继续学本章后面的内容。
Python 快速入门:零基础也能看懂
本文适合谁:从来没写过 Python 的人。读完这篇,你能看懂 Python 代码,能写出可以运行的 AI 小程序,能继续学本章后面的内容。
本文阅读时间:约20分钟
Java工程师:你可以读这篇,但更推荐先读附录《Java工程师转Python指南》,那篇专门讲Java和Python的思维差异,效率更高。
1.1 Python 是什么?为什么AI都用它?
Python 是一门编程语言,和 Java、C++、JavaScript 一样,是用来告诉计算机"做什么"的工具。
但 Python 有一个特点:写起来特别像说人话。
Python 与 Java 的核心差异对比——AI 开发为什么选 Python
同样是"打印'你好世界'",Java 要写:
public class Main {
public static void main(String[] args) {
System.out.println("你好世界");
}
}
Python 只要写:
print("你好世界")
这就是 Python 流行的核心原因——极度简洁。科学家和研究人员不想花时间在繁琐的语法上,Python 让他们能快速验证想法。AI 领域的绝大多数工具(LangChain、PyTorch、Hugging Face)都是用 Python 写的,选择 AI 开发,就等于选择了 Python。
1.2 第一步:Python 的基本语法
1.2.1 变量:存东西的盒子
# 用 = 把值存进变量,不需要声明类型
name = "张三" # 字符串(文字)
age = 25 # 整数
score = 98.5 # 小数
is_student = True # 布尔值(True/False,注意首字母大写)
# 打印变量
print(name) # 输出:张三
print(age) # 输出:25
和其他语言的区别:Python 不需要声明变量类型,直接赋值就行。变量的类型由赋的值决定。
1.2.2 字符串:处理文字
greeting = "你好"
name = "世界"
# 拼接字符串(推荐用 f-string,最简洁)
message = f"{greeting},{name}!"
print(message) # 输出:你好,世界!
# f-string 里可以放任何表达式
price = 9.9
print(f"价格是 {price:.2f} 元") # 输出:价格是 9.90 元(.2f 保留两位小数)
# 字符串长度
print(len("Python")) # 输出:6
1.2.3 列表:存一组东西
# 列表用方括号 [],可以存任意类型
fruits = ["苹果", "香蕉", "橙子"]
# 访问元素(从0开始数)
print(fruits[0]) # 苹果
print(fruits[-1]) # 橙子(-1 表示最后一个)
# 添加元素
fruits.append("葡萄")
print(fruits) # ['苹果', '香蕉', '橙子', '葡萄']
# 列表长度
print(len(fruits)) # 4
# 遍历列表
for fruit in fruits:
print(fruit)
1.2.4 字典:存键值对
字典就像一本通讯录——每个名字(键)对应一个电话号码(值)。
# 字典用花括号 {},键值对用冒号分隔
user = {
"name": "张三",
"age": 25,
"city": "北京"
}
# 访问值
print(user["name"]) # 张三
print(user.get("age")) # 25
print(user.get("email", "未填写")) # 未填写(键不存在时返回默认值)
# 添加/修改
user["email"] = "zhangsan@example.com"
# 遍历
for key, value in user.items():
print(f"{key}: {value}")
1.2.5 条件判断
score = 85
if score >= 90:
print("优秀")
elif score >= 60:
print("及格")
else:
print("不及格")
# 注意:Python 用缩进(4个空格)表示代码块,不用花括号
# 缩进必须一致,混用空格和Tab会报错
1.2.6 循环
# for 循环:遍历列表
names = ["Alice", "Bob", "Charlie"]
for name in names:
print(f"你好,{name}!")
# for 循环:数数
for i in range(5): # range(5) 生成 0,1,2,3,4
print(i)
# while 循环
count = 0
while count < 3:
print(f"第 {count+1} 次")
count += 1
1.3 第二步:函数——把代码打包复用
函数是把一段代码打包起来,可以反复调用的工具。
# 定义函数:def 函数名(参数):
def greet(name):
message = f"你好,{name}!"
return message # return 返回结果
# 调用函数
result = greet("张三")
print(result) # 你好,张三!
# 带默认参数的函数
def greet_with_title(name, title="同学"):
return f"你好,{title}{name}!"
print(greet_with_title("张三")) # 你好,同学张三!
print(greet_with_title("李四", "老师")) # 你好,老师李四!
1.3.1 函数的类型注解(推荐加上)
# 在参数和返回值上标注类型,让代码更清晰
def add(a: int, b: int) -> int:
return a + b
def get_user_info(user_id: str) -> dict:
return {"id": user_id, "name": "张三"}
类型注解不是强制的,但加上之后 IDE 能给出更好的代码提示,也让别人更容易读懂你的代码。
1.4 第三步:Python 的特色语法
1.4.1 列表推导式:一行搞定循环
# 普通写法
squares = []
for x in range(5):
squares.append(x ** 2)
# 列表推导式(Python 特色,更简洁)
squares = [x ** 2 for x in range(5)]
print(squares) # [0, 1, 4, 9, 16]
# 带条件的推导式
even_squares = [x ** 2 for x in range(10) if x % 2 == 0]
print(even_squares) # [0, 4, 16, 36, 64]
1.4.2 解包赋值:同时赋多个变量
# 同时赋值
x, y = 10, 20
print(x, y) # 10 20
# 函数返回多个值
def get_min_max(numbers):
return min(numbers), max(numbers)
low, high = get_min_max([3, 1, 4, 1, 5, 9, 2, 6])
print(f"最小值: {low}, 最大值: {high}") # 最小值: 1, 最大值: 9
1.4.3 缩进是语法,不是排版
Python 用缩进(通常4个空格)来表示代码块,这和大多数语言用花括号不同:
# ✅ 正确:缩进一致
def check_age(age):
if age >= 18:
print("成年人")
else:
print("未成年人")
# ❌ 错误:缩进不一致,会报 IndentationError
def bad_function():
x = 1
y = 2 # 报错!
1.5 第四步:错误处理
# try/except 捕获错误
def divide(a, b):
try:
result = a / b
return result
except ZeroDivisionError:
print("错误:不能除以零!")
return None
except Exception as e:
print(f"发生了未知错误:{e}")
return None
print(divide(10, 2)) # 5.0
print(divide(10, 0)) # 错误:不能除以零!
1.6 第五步:运行你的第一个 AI 程序
光看语法太枯燥,现在来写一个真正能用的 AI 程序——调用大模型 API,让它回答问题。
1.6.1 安装工具
# 安装 uv(Python 项目管理工具,比 pip 快10倍)
curl -LsSf https://astral.sh/uv/install.sh | sh
# 创建第一个项目
uv init my-first-ai
cd my-first-ai
# 安装 openai 库(用于调用大模型 API)
uv add openai
1.6.2 写代码
新建文件 main.py,写入:
# main.py
# 这个程序:调用大模型API,问它一个问题,打印回答
import os
from openai import OpenAI
# 创建客户端(会自动从环境变量读取 API Key)
client = OpenAI(
base_url="https://api.deepseek.com", # 使用 DeepSeek(国内可直连)
api_key=os.environ.get("DEEPSEEK_API_KEY")
)
def ask(question: str) -> str:
"""向大模型提问,返回回答。"""
response = client.chat.completions.create(
model="deepseek-chat",
messages=[
{"role": "user", "content": question}
]
)
# response.choices[0].message.content 是模型的回答文字
return response.choices[0].message.content
# 运行
answer = ask("Python 有什么优点?用三句话回答。")
print(f"模型回答:\n{answer}")
1.6.3 运行
# 设置 API Key(替换成你自己的)
export DEEPSEEK_API_KEY="你的API Key"
# 运行程序
uv run python main.py
预期输出(类似):
模型回答:
1. 语法简洁易读,学习曲线平缓,适合快速开发和原型验证。
2. 拥有丰富的第三方库生态,尤其在AI和数据科学领域几乎无可替代。
3. 跨平台支持良好,代码可在 Windows、Mac、Linux 上无缝运行。
这 20 行代码就是所有 AI 应用的骨架。后续的 RAG、Agent、工具调用,都是在这个基础上扩展的。
# ⚠️ 生产环境建议补充错误处理:
# import time, openai, logging
# logger = logging.getLogger(__name__)
#
# def ask(question: str) -> str:
# try:
# response = client.chat.completions.create(
# model="deepseek-chat",
# messages=[{"role": "user", "content": question}]
# )
# return response.choices[0].message.content
# except openai.RateLimitError:
# time.sleep(60) # 限流,等待后重试
# raise
# except openai.APITimeoutError:
# raise # 超时,向上抛出
# except Exception as e:
# logger.error(f"LLM调用失败: {e}")
# raise
1.7 第六步:虚拟环境——必须搞清楚的基础
Python 的包默认是全局安装的,不同项目依赖同一个包的不同版本会产生冲突。虚拟环境为每个项目创建独立的包目录,项目之间互不干扰。
# 推荐:用 uv 管理(速度快,功能全)
uv init my-project # 创建项目(自动创建虚拟环境)
uv add requests pydantic # 安装包
uv run python main.py # 在虚拟环境中运行
# 也可以用 Python 内置的 venv
python -m venv .venv
source .venv/bin/activate # Mac/Linux
.venv\Scripts\activate # Windows
pip install requests
规则:每个项目都要有自己的虚拟环境。这是 Python 工程化的第一条规则。
1.8 常见错误和解决方法
| 错误 | 原因 | 解决方法 |
|---|---|---|
IndentationError |
缩进不一致(空格和Tab混用) | 统一用4个空格,用Black格式化工具 |
NameError: name 'x' is not defined |
变量未定义就使用 | 检查变量名拼写,确认已赋值 |
KeyError: 'xxx' |
字典里没有这个键 | 用 dict.get(key, 默认值) 代替 dict[key] |
ModuleNotFoundError |
包没安装 | 运行 uv add 包名 安装 |
SyntaxError |
语法错误 | 检查冒号、括号、缩进是否正确 |
1.9 小结
| 概念 | 一句话 | 例子 |
|---|---|---|
| 变量 | 存数据的盒子,不需要声明类型 | name = "张三" |
| 列表 | 有序的数据集合 | [1, 2, 3] |
| 字典 | 键值对集合,像通讯录 | {"name": "张三"} |
| 函数 | 打包复用的代码块 | def greet(name): |
| f-string | 最推荐的字符串格式化方式 | f"你好,{name}" |
| 缩进 | Python 的代码块标志,必须一致 | 4个空格 |
| 虚拟环境 | 每个项目独立的包目录 | uv init |
| 类型注解 | 可选的类型标注,让代码更清晰 | def f(x: int) -> str: |
下一步:去第02篇《包管理与项目结构》,学会用 uv 管理一个真正的 AI 项目。
Java工程师:读完这篇后,建议去读附录《Java工程师转Python指南》,里面有大量 Java vs Python 的对比,帮你快速建立迁移思维。