3、Python基础回顾:变量与数据类型、控制流(if/for/while)、函数定义、列表与字典操作

说实话,很多做金融的朋友一听到「编程」两个字就头大。我特别理解。当年我带团队做量化交易系统时,有个同事是华尔街回来的交易员,数学底子极好,但看到 Python 代码就发怵。后来我花了半天时间,就给他讲了今天要聊的这几个基础概念。结果他第二天就开始自己写策略回测了。

Python 在金融领域这么流行,说白了就三个原因:上手快、库多、社区活跃。你不需要成为计算机专家,只需要掌握最核心的 20% 语法,就能解决 80% 的金融数据处理问题。今天我们就来啃这 20%。

核心观点:金融建模中,80% 的代码量集中在数据准备和清洗上。变量、控制流、函数、列表和字典,就是处理这些数据的四把瑞士军刀。

Python 金融基础 变量与数据类型 int, float, str, bool 控制流 if / for / while 函数定义 def / return / 参数 列表与字典 list / dict / 增删改查 金融数据清洗 → 策略回测 → 风险分析

3.1 变量与数据类型:金融数据的基石

变量是什么?说白了就是给数据贴个标签。你想想看,在 Excel 里你要引用某个单元格,得记住它的坐标,比如 B2、C3。但在 Python 里,你可以给任何数据起个名字,比如 stock_pricetrade_volume,多直观。

Python 是动态类型语言,这意味着你不需要像 Java 那样提前声明「这个变量是整数还是字符串」。我刚开始用 Python 时觉得这太爽了,但后来踩过坑——有一次我把股票代码当成了整数处理,结果代码跑出来全是错的。嗯,这里要注意:股票代码「000001」是字符串,不是数字

数据类型 示例 金融场景
int(整数) volume = 10000 成交量、持仓量
float(浮点数) price = 12.58 股价、收益率
str(字符串) code = '600519' 股票代码、公司名称
bool(布尔值) is_trading = True 交易状态、条件判断

我的小技巧:处理金融数据时,我习惯用 type() 函数先检查一下数据类型。比如 type(price) 返回 <class 'float'>,确认无误后再往下写。这能省掉很多调试时间。

# 实战:计算股票收益率
open_price = 10.5    # 开盘价
close_price = 11.2   # 收盘价
return_rate = (close_price - open_price) / open_price
print(f"今日收益率:{return_rate:.2%}")  # 输出:今日收益率:6.67%

3.2 控制流:让代码学会做决策

控制流就是让代码「动脑子」。没有控制流的代码,就像一条笔直的高速公路,只能一直往前开。但金融世界里哪有那么多直线?

3.2.1 if 条件判断

if 语句说白了就是「如果...就...」。我在做风控系统时,if 语句用得最多。比如判断是否触发止损线:

current_price = 98.5
stop_loss = 100.0

if current_price < stop_loss:
    print("触发止损!立即平仓")
elif current_price < stop_loss * 1.05:
    print("接近止损线,请关注")
else:
    print("持仓正常")

我曾经踩过的坑:在 Python 里,if 0if Noneif '' 都会被当作 False 处理。有一次我写 if trade_volume: 来判断成交量是否为零,结果成交量刚好是 0 时,代码直接跳过了后续处理。后来我改成 if trade_volume is not None and trade_volume > 0:,才彻底解决。

3.2.2 for 循环:批量处理数据

金融数据通常是一批一批的。比如你要计算过去 30 天的平均收益率,难道要手动算 30 次?用 for 循环,几行代码搞定。

# 计算过去5天的平均收盘价
closing_prices = [10.2, 10.5, 10.3, 10.8, 10.6]
total = 0
for price in closing_prices:
    total += price
average = total / len(closing_prices)
print(f"5日均价:{average:.2f}")

你想想看,如果数据量是 1000 条,甚至 100 万条,for 循环的优势就体现出来了。我个人习惯在循环里加个计数器,方便调试时定位问题。

3.2.3 while 循环:条件驱动

while 循环和 for 循环的区别在于:for 循环知道要循环多少次,while 循环不知道。比如模拟交易直到资金耗尽:

balance = 100000  # 初始资金10万
trade_count = 0

while balance > 0:
    # 模拟一次交易,随机盈亏
    import random
    profit = random.uniform(-5000, 5000)
    balance += profit
    trade_count += 1
    print(f"第{trade_count}次交易后余额:{balance:.2f}")

print("交易结束,资金已耗尽")

重要提醒:while 循环一定要有终止条件,否则会变成死循环。我见过有人写 while True: 忘了加 break,结果程序跑了一整夜。嗯,别问我怎么知道的。

3.3 函数定义:把代码装进盒子里

函数是什么?就是把一段逻辑封装起来,给它起个名字,以后想用就调用这个名字。为什么要这么做?因为金融分析中,很多操作是重复的——计算收益率、计算波动率、数据清洗……每次都写一遍同样的代码,太傻了。

def calculate_sharpe_ratio(returns, risk_free_rate=0.03):
    """
    计算夏普比率
    :param returns: 收益率列表
    :param risk_free_rate: 无风险利率,默认3%
    :return: 夏普比率
    """
    import statistics
    avg_return = statistics.mean(returns)
    std_dev = statistics.stdev(returns)
    sharpe = (avg_return - risk_free_rate) / std_dev
    return sharpe

# 使用函数
daily_returns = [0.01, 0.02, -0.005, 0.015, 0.008]
ratio = calculate_sharpe_ratio(daily_returns)
print(f"夏普比率:{ratio:.2f}")

写函数时,我建议你养成写文档字符串(docstring)的习惯。就是函数定义下面那三个引号括起来的内容。为什么?因为三个月后你回头看自己的代码,很可能已经忘了这个函数是干嘛的。我吃过这个亏,真的。

我的习惯:每个函数只做一件事。如果一个函数超过 20 行,我就考虑拆分成更小的函数。这样调试起来特别方便,哪个环节出问题,直接定位到对应的函数就行。

3.4 列表与字典:金融数据的容器

列表和字典是 Python 里最常用的两种数据结构。列表像有序的抽屉柜,每个抽屉有编号(索引)。字典像带标签的储物箱,每个箱子有个名字(键)。

3.4.1 列表操作

列表在金融里最常见的用途就是存储时间序列数据。比如某只股票连续 5 天的收盘价:

# 创建列表
prices = [10.2, 10.5, 10.3, 10.8, 10.6]

# 增
prices.append(10.9)  # 添加第6天数据
prices.insert(0, 10.0)  # 在开头插入数据

# 删
prices.pop()  # 删除最后一个
prices.remove(10.3)  # 删除指定值

# 改
prices[0] = 10.1  # 修改第一个元素

# 查
max_price = max(prices)
min_price = min(prices)
print(f"最高价:{max_price},最低价:{min_price}")

3.4.2 字典操作

字典在金融里更适合存储「键值对」数据。比如一只股票的各种属性:

# 创建字典
stock_info = {
    "code": "600519",
    "name": "贵州茅台",
    "price": 1888.0,
    "pe_ratio": 35.6,
    "market_cap": 23700  # 单位:亿
}

# 增
stock_info["dividend_yield"] = 0.015  # 股息率

# 删
del stock_info["pe_ratio"]  # 删除市盈率字段

# 改
stock_info["price"] = 1900.0  # 更新价格

# 查
print(f"股票名称:{stock_info['name']}")
print(f"当前市值:{stock_info['market_cap']}亿")

# 遍历字典
for key, value in stock_info.items():
    print(f"{key}: {value}")

实战技巧:我经常用列表嵌套字典的方式来管理投资组合。比如:

portfolio = [
    {"code": "600519", "shares": 100, "buy_price": 1800},
    {"code": "000858", "shares": 200, "buy_price": 120},
    {"code": "601318", "shares": 150, "buy_price": 65}
]

# 计算总持仓市值
total_value = 0
for stock in portfolio:
    total_value += stock["shares"] * stock["buy_price"]
print(f"总持仓成本:{total_value:.2f}元")

好了,Python 基础回顾就到这里。这些内容看起来简单,但金融建模中 90% 的操作都离不开它们。你不需要一次性全部记住,写代码时多查查文档,慢慢就熟练了。记住:代码是写给人看的,顺便让机器执行。写得清晰、易读,比写得「炫技」重要得多。


专注资料整理