环境与运行方式先定下来
Python基础语法本身不复杂,真正卡人的往往是环境、运行方式和调试习惯。原文给出的版本结论很明确:优先 Python 3.8 以上,3.10 或 3.12 稳定版即可,Python 2 已停止维护,除维护旧项目外不要使用。安装时 Windows 选 64-bit,macOS 按芯片架构选择,并勾选“Add Python to PATH”,否则命令行会提示找不到 python。安装后用下面两条命令确认解释器和 pip:- python --version
- python -m pip --version
复制代码 编辑工具不必一开始上重型IDE,也不要用记事本硬写。可以先熟悉简单编辑器,再转 VSCode:装 Python 插件、选择解释器、把默认终端设为集成终端,并配合 Pylance 获得补全和错误提示。原文还提醒,一旦要装 numpy、pandas、requests 等第三方库,最好第一天就使用虚拟环境,避免依赖冲突:- python -m venv myenv
- # Windows 激活
- myenv\Scripts\activate
- # macOS/Linux 激活
- source myenv/bin/activate
复制代码 交互式 REPL 和 .py 脚本文件要分开看:REPL 适合验证切片、方法参数等小段语法;完整逻辑应写进脚本一次性执行。把整套程序都写在 REPL 里,一旦出错就要重敲,效率很低。
变量、类型与容器:抓住赋值和转换规则
变量本身没有类型,变量指向的数据才有类型。a=10 后再 a='hello' 合法,只是 a 的引用换了对象。命名建议小写加下划线,如 user_name、order_list。
数值部分要区分 / 和 //:/ 得到浮点数,// 得到整除结果。分页常用:- total // per_page + (1 if total % per_page else 0)
复制代码 浮点数不要直接用 == 比较,0.1+0.2 != 0.3 源于二进制存储限制,不是 Python 独有;金额等高精度场景可用 decimal.Decimal。bool 是 int 的子类,True 为 1,False 为 0。
字符串是高频类型。单双引号几乎等价,混用可减少转义;三引号适合多行字符串,例如拼长 SQL。字符串不可变,循环里大量 + 拼接会不断创建新对象,可能拖慢数据处理。切片规则为序列[start:end:step],含 start 不含 end,step 可为负:- s[:3]
- s[::2]
- s[::-1]
- text.strip().split(',')[:2]
复制代码 类型转换常见的坑是 int('3.14') 会报错,要先 float 再 int;处理 CSV/Excel/网页脏数据时可用 try...except 包住转换。数字与字符串拼接要用 str() 或 f-string:bool() 转换中,0、''、[]、{}、()、None 均为 False,其他为 True,所以可用 if user_name: 判断非空。
容器选择上:list 可增删改,常用列表推导式 [x * 2 for x in nums if x > 0];tuple 不可变,能作为字典键,也避免函数内部误改;dict 是键值结构,与 JSON 天然接近,访问建议用 dict.get(key, default),键不存在时不会抛 KeyError;set 适合去重和成员判断提速,入门可先了解。
控制流:if、循环与 range 的实用细节
Python 用 if/elif/else,没有 switch-case,多分支可用字典映射模拟。and/or/not 的优先级是 not > and > or,复杂条件建议加括号;不要写 &&、||。判断布尔值直接 if flag,而不是 if flag == True。
for 用于遍历任何可迭代对象,字典默认遍历键,取键值对用 for key, value in dict.items()。while 适合条件型循环,例如输入重试。知道次数用 for + range,条件结束用 while。break 提前退出,continue 跳过本次。循环的 else 容易被忽略:for/while 正常结束且没有被 break 时执行 else:- for user in user_list:
- if user.id == target_id:
- print('找到了')
- break
- else:
- print('没找到,执行兜底逻辑')
复制代码 range 在 Python 3 中是懒加载可迭代对象,range(10000000) 不会立刻生成巨大列表,对海量循环更省内存;支持步长 range(0, 10, 2) 和倒序 range(10, 0, -1)。二维切片在纯 Python 中要写成 [row[0:3] for row in data[1:10]],理解这一点对后续 pandas/numpy 有帮助。
函数与模块:默认参数和 import 的坑
函数定义简单:- def add(a, b):
- return a + b
复制代码 设计上,命名用下划线、动词开头,如 get_user_info、parse_data;函数太长考虑拆分;尽量只做一件事并返回明确结果。不写 return 时返回 None,这是“函数调用结果全为 None”常见原因。
参数顺序为位置参数、默认参数、*args、**kwargs。默认参数不能使用可变对象:- def add_item(item, cache=[]):
- cache.append(item)
- return cache
复制代码 多次调用后会发现 cache 是同一个列表,因为默认参数在函数定义时只创建一次。正确写法是 cache=None,在函数体内再创建新列表。关键字参数能提升可读性,参数超过三个时尤其推荐。
代码变多后放入 .py 模块,常见 import 方式有 import math、from math import sqrt、from math import *。原文不建议 import *,容易污染命名空间。模块直接执行时通常加:- if __name__ == '__main__':
- main()
复制代码 这样被 import 时不会执行整段脚本逻辑。
三个落地场景:CSV/Excel、爬虫、量化伪代码
处理 CSV/Excel 是基础语法的练兵场。纯 Python 思路是 open() 读文件、按行循环、split(',') 切列、做类型转换和判断;切片截取时间字段或去掉无关列;字典推导式把表头和行拼成字典列表。原文强调,pandas 当然方便,但先徒手处理一遍,会对切片、循环、转换、异常理解更扎实。
简单爬虫也用基础语法串起来:requests GET 网页,拿 HTML 文本,用字符串查找或正则提取信息,写入 CSV;if 判断响应状态,for 遍历多页,dict 存结构化数据,try-except 兜网络异常。注意只爬公开数据、控制频率、遵守目标站点规则。
量化策略入门可以先用基础语法写伪代码:函数算均线,if 判断金叉死叉,for 遍历历史价格,列表或 DataFrame 存回测结果。重点是验证技术思路,量化交易有金融风险,实战入金需谨慎。
报错排查与 print 调试
报错先看最后一行,那里通常是错误类型和简要说明,例如 TypeError: unsupported operand type(s) for +: 'int' and 'str',意思是 int 和 str 不能直接相加。排查顺序是错误类型、文件路径和行号、具体那一行代码,不要从头读到尾。
高频错误可以速查:
- SyntaxError:少括号、冒号、引号不匹配,检查光标位置和括号配对。
- IndentationError:缩进不一致或混用空格与 Tab,统一 4 个空格并让 IDE 自动转换。
- TypeError:类型不匹配,如字符串加数字,用 str() 或 int() 转换。
- KeyError:字典键不存在,用 dict.get() 代替直接访问。
- IndexError:列表下标越界,检查长度或用切片容错。
- NameError:变量名拼错或未定义,检查命名一致性。
print 调试要有策略:进入函数前打印输入参数,循环每 N 次打印进度,return 前打印结果。输出带标识更利于筛选:- print(f'[DEBUG] user_id: {user_id}')
复制代码 如果代码看着没问题但结果不对,先打印输入数据确认形状和类型,再逐步打印中间结果,找到第一个与预期不符的位置,最后缩小范围,类似二分查找。
最后一点实践建议
原文的核心体会是:基础语法不是背出来的,而是用出来的。可以给自己一个小任务,例如把通讯录 Excel 按城市分组、统计人数并输出新表,然后回头翻语法查漏补缺。先把环境、类型转换、控制流、函数和调试这些地基打稳,再上复杂项目,进度往往更快。 |