Python新手入门:从变量到函数的避坑指南

举报
yd_210304646 发表于 2026/10/28 10:10:42 2026/10/28
【摘要】 面向零基础新手,从变量命名、数据类型、缩进循环讲到函数定义与模块导入,梳理 Python 学习中最易踩的坑:可变默认参数、深浅拷贝、作用域、循环导入等,并附避坑速查清单与安全学习路线。

Python 以简洁易读著称,是很多人的第一门编程语言。但“能跑起来”和“写得对”之间,隔着不少新手坑。本文面向零基础读者,从变量一路讲到函数,把最容易踩的坑提前讲清楚。

一、变量:先起个好名字,再理解赋值

1. 命名要见名知意:变量名用小写字母加下划线,比如 user_name、total_price;常量全大写,比如 MAX_RETRY。不要用拼音缩写,也不要用 l(小写 L)、O、I 这类容易和数字 1、0 混淆的字母。

2. 赋值其实是“贴标签”:执行 a = [1, 2] 再写 b = a,b 和 a 指向的是同一个列表,修改 b 会影响 a。很多新手以为 b 是一份独立副本,这是第一个大坑。真正需要副本时,用 b = a.copy();嵌套结构则用 copy 模块的 deepcopy。

3. 作用域遵循 LEGB 规则:函数内部想修改全局变量,需要加 global 声明,否则 Python 会创建一个同名的局部变量。建议尽量少用 global,优先通过参数传入、返回值传出数据,代码更清晰。

二、数据类型:选对容器,少一半 bug

1. 列表可变、元组不可变:函数参数、字典键这类“不希望被修改”的地方,优先用元组 tuple。

2. 字典取值用 .get():d["key"] 在键不存在时会直接抛 KeyError,而 d.get("key", 默认值) 更安全,是防御性编程的好习惯。

3. 字符串不可变:不要在循环里用 += 反复拼接字符串,又慢又容易出错;先把片段放进列表,最后用 "".join(列表) 一次拼接。

4. 集合天然去重:list(set(数据)) 一行完成去重,但注意会打乱原有顺序;需要保序去重时可以用 list(dict.fromkeys(数据))。

5. 分清深拷贝与浅拷贝:浅拷贝只复制最外层,内层的列表或字典依然共享;嵌套结构必须用 copy.deepcopy,否则改副本会“误伤”原件。

三、条件与循环:缩进就是生命线

1. 缩进必须统一:混用 Tab 和空格会报 IndentationError。建议在编辑器里把 Tab 设置为自动转成 4 个空格,一劳永逸。

2. 能用 for 就别用 while:for 遍历自带终止条件;while 容易因为忘记更新循环变量而写出死循环。

3. for-else 的冷知识:for 循环正常结束(没有被 break 打断)时会执行 else 分支,非常适合“查找失败”这类场景。

4. 不要在遍历列表的同时删除元素:删除会导致索引错位、元素被跳过。正确做法是遍历副本 for x in 列表[:]:,或者先把要删的收集起来再统一删除。

四、函数:新手的重灾区

1. 先定义、后调用:调用写在定义之前的代码会报 NameError,把函数定义放在文件上部是好习惯。

2. 可变默认参数是经典坑:def add(item, box=[]) 中的 [] 只会在定义时创建一次,多次调用会不断累积。正确写法是 def add(item, box=None): 在函数内判断 if box is None: box = []。

3. 参数传递的是对象引用:在函数里修改可变参数(列表、字典)会影响调用方的原始数据。如果不希望影响,先在函数内部做一份拷贝。

4. *args 与 **kwargs:*args 把多余的位置参数收成元组,**kwargs 把多余的关键字参数收成字典,写通用工具函数时非常实用。

5. 一个函数只做一件事:函数体超过一屏就该考虑拆分;需要返回多个结果时直接 return a, b,调用方用 x, y = 函数() 解包。

6. lambda 只适合一行小逻辑:比如 sorted(数据, key=lambda x: x[1])。逻辑稍复杂就老老实实用 def 命名函数,可读性永远优先。

五、模块与导入:文件名别乱起

1. 不要把自己的文件命名成 random.py、json.py 这类标准库同名,会覆盖真正的标准库导入,引发各种诡异错误,排查起来非常痛苦。

2. 警惕循环导入:a.py 导入 b.py,b.py 又导入 a.py,运行时会报错。解决方法是把公共部分抽到第三个模块中。

3. 测试代码放进 if __name__ == "__main__": 块里:这样文件被别的模块导入时,测试代码不会被执行。

六、异常与文件:稳健性的两块基石

1. try/except 只包住“可能出错的最小范围”:把整个函数都包进去会掩盖真正的 bug,定位问题时欲哭无泪。

2. 不要写裸 except::至少写成 except Exception as e,并把 e 打印或记录到日志,否则出错了都不知道错在哪。

3. 文件读写坚持用 with open(...) as f:离开 with 块自动关闭文件;在 Windows 上读写中文文本时记得指定 encoding="utf-8",避免乱码。

七、新手避坑速查清单

- 变量名见名知意,不用拼音缩写和易混淆字母
- 需要副本时主动 copy,嵌套结构用 deepcopy
- 字典取值用 .get(),字符串拼接用 join
- 缩进统一为 4 个空格,遍历列表时不删除元素
- 函数默认参数不用可变对象,一个函数只做一件事
- 文件名不与标准库冲突,测试代码放 __main__ 里
- 异常捕获精确到类型,文件操作坚持用 with

八、安全的学习路线

建议按这个顺序学:变量与基本类型 → 条件与循环 → 函数 → 模块与包 → 文件与异常 → 面向对象入门。每学完一块,就写 3 到 5 个小练习巩固,比如“统计一篇文章的词频”“批量给文件改名”,把知识点变成肌肉记忆。

最后分享一个最重要的习惯:遇到报错先读 Traceback 的最后一行,它通常直接告诉你错在哪一行、错在什么地方。学会读报错,等于多了一位免费的调试老师。避开这些坑,你的 Python 之路会顺畅得多,祝编码愉快!

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。