第一章:Python基础知识回顾 — 变量、数据类型、列表、字典、函数定义
好,咱们开篇先不急着碰MA图。磨刀不误砍柴工,先把Python的老底儿翻一翻。这些基础东西,你越熟悉,后面写代码就越顺手。我见过太多同学,一上来就调库,结果变量类型都搞混,debug半天找不到北。
说白了,这章就是帮你把地基夯结实。咱们会快速过一遍:变量怎么玩、数据类型有哪些坑、列表和字典的骚操作、还有函数怎么定义才优雅。嗯,都是干货。
本章核心:用最短的时间,把后面画MA图需要的基础知识全部激活。别跳过,我保证有彩蛋。
1.1 变量 — 别给它起错名
变量就像盒子。你把数据放进去,贴个标签。Python的变量不需要提前声明类型,这点很方便,但也容易坑自己。
# 这就是一个变量
ma_period = 20
close_price = 185.50
name = "茅台" # 字符串,别忘了引号
命名规则你得记牢:
- 只能用字母、数字、下划线。数字不能开头。
- 别用Python的关键字,比如
if、for、while。 - 我个人的习惯是:变量名要有意义。
a、b这种,三个月后你自己都看不懂。
注意:Python是动态类型语言。变量可以随时换类型。我曾经在项目中遇到过,一个变量一开始是整数,后来被赋值为字符串,后面做计算直接报错。这类bug很难查。
# 别这么干
x = 10
x = "现在我是字符串了" # 类型变了,后续代码容易炸
1.2 数据类型 — 搞清楚你是哪种料
Python常见的数据类型就那些。
| 类型 | 关键字 | 例子 | 你用在哪 |
|---|---|---|---|
| 整数 | int |
100, -5 |
股票数量、周期 |
| 浮点数 | float |
3.1415, 185.50 |
价格、均线值 |
| 字符串 | str |
"MA5", '收盘价' |
列名、标签 |
| 布尔值 | bool |
True, False |
条件判断 |
type()函数是好帮手。不确定类型?用它查一下。
price = 185.50
print(type(price)) # 输出:
避坑提醒:浮点数计算有精度问题。比如0.1 + 0.2并不等于0.3,而是0.30000000000000004。做金融计算时,得用Decimal或者四舍五入处理。我刚工作时在这上面吃过亏。
1.3 列表 — 你的数据大本营
列表是最常用的数据结构之一。它能装一堆东西,而且可以随时增删改查。
# 创建一个价格列表
prices = [180.5, 182.0, 185.5, 183.0, 186.5]
# 索引从0开始
print(prices[0]) # 180.5
print(prices[-1]) # 186.5,最后一个元素
# 切片 —— 取前3个
print(prices[:3]) # [180.5, 182.0, 185.5]
列表的常用操作:
append():末尾追加一个元素insert():插入到指定位置remove():删除指定值len():获取长度
prices.append(188.0) # 新增一个
print(len(prices)) # 输出 6
你想想看,MA图需要计算移动平均,其实就是对列表里的一段数据反复求平均值。列表不会用,后面寸步难行。
1.4 字典 — 给数据贴上标签
字典存的是键值对。说白了,就是“我叫什么,我是什么”。
# 存储一只股票的信息
stock = {
"name": "贵州茅台",
"code": "600519",
"close": 185.50,
"ma5": 183.20,
"ma20": 180.10
}
print(stock["name"]) # 贵州茅台
print(stock.get("volume", "无数据")) # 安全取值,没有就返回默认
字典的常用操作:
keys():获取所有键values():获取所有值items():同时获取键和值update():合并另一个字典
我的经验:我习惯用字典来存储一条K线数据。日期、开盘、收盘、最高、最低、成交量,每个字段都是键,直观又好查。比用列表+索引的方式靠谱多了。
# 遍历字典
for key, value in stock.items():
print(f"{key}: {value}")
1.5 函数定义 — 把你重复的工作打包
函数就是一段可以重复调用的代码块。定义一次,到处使用。
def calc_ma(data, period):
"""
计算简单移动平均线
:param data: 价格列表
:param period: 周期
:return: 移动平均值列表(前period-1个为None)
"""
result = []
for i in range(len(data)):
if i < period - 1:
result.append(None) # 前面数据不够,补空值
else:
avg = sum(data[i-period+1:i+1]) / period
result.append(round(avg, 2))
return result
函数要点:
- 用
def关键字定义。 - 参数可以有默认值,比如
period=20。 - 函数体要有缩进,Python靠缩进识别代码块。
- 用
return返回结果。没有return,函数返回None。
重要:我给函数加了解释文档(docstring)。这不是装样子,几个月后你回来看代码,没有注释的函数就像天书。我之前因为懒没写注释,后来改需求时把自己坑惨了。
试试调用上面的函数:
prices = [180, 182, 185, 183, 186, 188, 190]
ma5 = calc_ma(prices, 5)
print(ma5)
# 输出:[None, None, None, None, 183.2, 184.8, 186.4]
函数写好了,以后画MA图时直接调用就行。这就是封装的好处。
本章知识结构一览
下面这张SVG图,就是你学完本章后,脑子里应该装下的东西。每个模块都是后面画MA图的砖瓦。
还记得我们为什么要学这些吗?
移动平均线(MA)本质上就是对价格列表做滑动窗口平均——列表切片是核心。字典用来存储K线数据。函数把计算逻辑封装起来。变量和类型帮你理清数据的来龙去脉。看吧,一环扣一环。
趁热打铁:打开你的Python环境,把上面这些代码都敲一遍。光看是不管用的。我当年学Python,第一天就把列表、字典、函数各写了20遍。手熟了,后面才快。