3、Python基础速通(下):条件判断与循环,函数定义与使用,文件读写操作,第三方库的安装(pip)

好,咱们接着聊。上一节我们把Python的数据类型和运算符过了一遍,算是把「食材」备齐了。这一节,咱们要开始学「怎么做菜」——也就是控制流程、封装逻辑、读写数据,还有怎么用别人的轮子。

我个人习惯把这一节叫做「实战前的最后一块拼图」。你想想看,一个量化选股系统,无非就是:拿到数据 → 做判断 → 循环处理 → 输出结果。这些操作,全靠今天的内容撑起来。

Python基础速通(下) 条件判断与循环 if/elif/else, for, while 函数定义与使用 def, 参数, return, 作用域 文件读写操作 open, read, write, with 第三方库安装 (pip) pip install, 虚拟环境

条件判断:让代码学会「看情况办事」

写量化策略的时候,最常用的就是条件判断。比如:如果市盈率低于15倍,就买入;如果高于30倍,就卖出。这就是典型的 if-elif-else 场景。

pe_ratio = 12.5

if pe_ratio < 15:
    print("估值偏低,考虑买入")
elif pe_ratio < 30:
    print("估值合理,继续持有")
else:
    print("估值偏高,注意风险")

这里有个细节我想强调一下:Python 用缩进来表示代码块,而不是花括号。我刚开始学的时候,经常因为缩进不对报错,气得想砸键盘。后来养成了一个习惯——统一用4个空格,不用Tab键。嗯,这个习惯一直用到现在。

小技巧:在条件判断中,Python 会把 0None""(空字符串)、[](空列表)视为 False。写代码时可以利用这个特性,让逻辑更简洁。

循环:批量处理数据的利器

做量化分析,你不可能一只股票一只股票地手动分析。你得让程序帮你批量处理。这时候循环就派上用场了。

Python 有两种循环:forwhile。我个人90%的场景都用 for,因为它更直观。

# 遍历股票列表
stocks = ["贵州茅台", "宁德时代", "招商银行", "比亚迪"]

for stock in stocks:
    print(f"正在分析:{stock}")
    # 这里可以写具体的分析逻辑

说到 for 循环,有个函数我必须提一下——range()。它用来生成一个整数序列,配合循环特别方便。

# 生成1到10的数字
for i in range(1, 11):
    print(f"第{i}次迭代")

我曾经在写回测框架时,因为 range() 的结束值没搞清楚,导致回测结果少了一天数据。排查了半天才发现——range(1, 11) 生成的是1到10,不包括11。这个坑,你记住就好。

注意:range(start, stop, step)stop 是不包含的。这是新手最容易犯的错误之一。

函数:把你的逻辑「封装」起来

写代码最忌讳的就是「一坨屎山」——所有逻辑堆在一起,看着就头疼。函数就是用来解决这个问题的。它把一段逻辑打包成一个「黑盒子」,你只管调用,不用关心内部实现。

def calculate_pe_ratio(price, earnings_per_share):
    """
    计算市盈率
    :param price: 当前股价
    :param earnings_per_share: 每股收益
    :return: 市盈率
    """
    if earnings_per_share == 0:
        return None  # 避免除零错误
    return price / earnings_per_share

# 调用函数
pe = calculate_pe_ratio(150.0, 8.5)
print(f"市盈率为:{pe:.2f}")

这里有个概念叫「作用域」。函数内部定义的变量,外面是访问不到的。说白了,就是函数有自己的「小世界」。我刚开始写的时候,经常在函数外面想用函数里面的变量,结果报 NameError。后来我记住了:函数内部的东西,想带出来就用 return

核心要点:函数应该只做一件事,并且做好一件事。如果一个函数超过20行,你就要考虑是不是该拆分了。

文件读写:把数据存下来

量化系统离不开数据。你从网上爬下来的股票数据,总得存到文件里吧?分析完的结果,总得输出吧?这就涉及到文件读写。

Python 的文件操作很简单,核心就是 open() 函数。但我强烈建议你用 with 语句,它会自动帮你关闭文件,省心省力。

# 写入文件
with open("stock_data.txt", "w", encoding="utf-8") as f:
    f.write("股票代码, 名称, 收盘价\n")
    f.write("600519, 贵州茅台, 1500.00\n")
    f.write("300750, 宁德时代, 220.50\n")

# 读取文件
with open("stock_data.txt", "r", encoding="utf-8") as f:
    content = f.read()
    print(content)

文件模式有几种:r(读取)、w(写入,会覆盖)、a(追加)。我曾经犯过一个错误——用 w 模式打开一个已有数据的文件,结果里面的内容全没了。嗯,从那以后,我每次写文件前都会确认一下模式。

建议:处理CSV文件时,直接用Python内置的 csv 模块,比自己手动解析要靠谱得多。

第三方库安装:站在巨人的肩膀上

Python 之所以强大,很大程度上是因为它有海量的第三方库。你想做数据分析?有 pandas。你想做科学计算?有 numpy。你想做量化回测?有 backtrader。这些库,都是通过 pip 来安装的。

# 安装第三方库
pip install pandas numpy matplotlib

# 安装指定版本
pip install pandas==1.5.3

# 查看已安装的库
pip list

这里我要特别强调一下虚拟环境。你想想看,项目A需要 pandas 1.5,项目B需要 pandas 2.0,如果装在一起就会冲突。虚拟环境就是给每个项目一个独立的「小房间」,互不干扰。

# 创建虚拟环境
python -m venv myenv

# 激活虚拟环境(Windows)
myenv\Scripts\activate

# 激活虚拟环境(Mac/Linux)
source myenv/bin/activate

# 退出虚拟环境
deactivate
避坑指南:我曾经在服务器上直接 pip install 装了一堆库,结果把系统自带的Python环境搞坏了。后来我学乖了——每个项目都建一个虚拟环境,再也没出过问题。

综合示例:一个简单的股票筛选器

好了,知识点都讲完了。咱们来写一个综合的小例子,把今天的内容串起来。

# 模拟股票数据
stocks = [
    {"name": "贵州茅台", "pe": 35.2, "pb": 8.1},
    {"name": "宁德时代", "pe": 28.5, "pb": 5.3},
    {"name": "招商银行", "pe": 6.8, "pb": 0.9},
    {"name": "比亚迪", "pe": 45.0, "pb": 6.7},
]

def filter_stocks(stock_list, max_pe=20, max_pb=3):
    """筛选低估值股票"""
    result = []
    for stock in stock_list:
        if stock["pe"] < max_pe and stock["pb"] < max_pb:
            result.append(stock)
    return result

# 执行筛选
selected = filter_stocks(stocks)
print("筛选结果:")
for s in selected:
    print(f"{s['name']} - PE:{s['pe']} PB:{s['pb']}")

# 保存结果到文件
with open("selected_stocks.txt", "w", encoding="utf-8") as f:
    for s in selected:
        f.write(f"{s['name']},{s['pe']},{s['pb']}\n")

print("结果已保存到 selected_stocks.txt")

这个例子虽然简单,但已经包含了条件判断、循环、函数定义、文件读写这些核心知识点。你想想看,如果把这个逻辑扩展一下,加上从网络获取真实数据的功能,是不是就是一个迷你版的选股系统了?

好了,这一节的内容就到这儿。代码多敲几遍,手感自然就来了。下一节我们开始接触真正的量化数据——用 pandas 处理表格数据,那才是真正好戏的开始。


专注资料整理