多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

Python从安装到实战入门指南

Python从安装到实战入门指南 前言「入门指南」类文章最容易犯的毛病是把语法清单从头到尾抄一遍读者看完还是不知道能拿它干什么。真正卡住初学者的往往不是「for循环怎么写」而是「装好之后写点什么才有成就感」「报错了去哪里看」。所以本文的路线是最短的安装步骤 → 必需的核心语法 → 一个完整的小工具 → 怎么从报错里找到线索。先澄清一个误解Python 入门不需要先把语法学完才能动手。它的标准库足够大你完全可以在只掌握变量、列表、字典、循环、函数这五样东西的情况下写出一个有用的程序。反过来把语法背得滚瓜烂熟但没写过完整程序遇到真实需求依然无从下手。本文所有代码以 Python 3 为准示例都是可以直接复制进.py文件运行的完整程序。Python 2.7 已于 2020 年 1 月 1 日停止维护如果搜到的教程里有print ...这种写法直接关掉换一篇。一、安装与第一个程序三步走装解释器、确认命令能解析、跑一个最小程序。# 需要 Python 3.xpython --versionpython -c import sys; print(sys.executable)第二行的输出是解释器的真实路径。Windows 上如果它落在WindowsApps目录里说明命中的是应用执行别名的占位符而不是真解释器——安装时记得勾选把 Python 加入 PATH 的选项或者重跑安装器选「Modify」补上。然后建一个项目目录写第一个文件hello.py# 适用于 Python 3.8name input(请输入你的名字)print(f你好{name})用python hello.py运行。f...是格式化字符串f-string从 Python 3.6 起可用更老的版本要写你好{}.format(name)。二、必须掌握的五个核心概念1. 变量与名字绑定变量名是贴在对象上的标签赋值是绑定而不是复制。# 适用于 Python 3.8a [1, 2, 3]b ab.append(4)print(a) # [1, 2, 3, 4]a 和 b 指向同一个列表2. 四种常用容器容器写法有序可变典型用途列表 list[1, 2, 3]是是一组有序数据元组 tuple(1, 2, 3)是否不会变的记录字典 dict{a: 1}是3.7 保证是键值映射集合 set{1, 2, 3}否是去重、成员判断字典从 Python 3.7 起保证插入顺序3.6 里保序只是实现细节不要依赖。3.7 之前版本里顺序完全不确定。3. 条件与循环# 适用于 Python 3.8for i in range(3):if i % 2 0:print(i, 偶数)else:print(i, 奇数)range(3)是惰性的只在你迭代时才产生数字不是先造一个列表——这正是不需要xrange的原因xrange在 Python 3 里已移除。4. 函数与默认参数# 适用于 Python 3.8def greet(name, punctuation):return f你好{name}{punctuation}print(greet(小明))print(greet(小明, punctuation。))千万注意不要用可变对象当默认参数比如def f(x, items[])。默认值只在函数定义时创建一次所有调用共享同一个列表上一次调用塞进去的东西会留到下一次。5. 文件读写要写编码# 适用于 Python 3.8from pathlib import Pathpath Path(sample.txt)path.write_text(第一行\n第二行\n, encodingutf-8)print(path.read_text(encodingutf-8))不写encoding会使用平台默认编码Windows 和 Linux 上结果可能不同中文场景尤其容易读出乱码。三、实战一个词频统计小工具需求给一个文本文件统计出现次数最多的若干词。这个需求小到能讲完又用到了上面全部概念。# 适用于 Python 3.8统计文本文件里的词频打印出现次数最多的前 N 个词。import reimport sysfrom collections import Counterfrom pathlib import Pathdef split_words(text):按 Unicode 单词字符切分中文和英文都能覆盖。return re.findall(r\w, text.lower())def top_words(text, limit10):返回出现次数最多的前 limit 个词及其次数。counter Counter(split_words(text))return counter.most_common(limit)def main(argv):if len(argv) 2:print(用法python wordcount.py 目标文件 [前N个])return 1path Path(argv[1])if not path.is_file():print(f找不到文件{path})return 2try:text path.read_text(encodingutf-8)except UnicodeDecodeError:print(文件不是 UTF-8 编码请先转换编码后再试。)return 3limit int(argv[2]) if len(argv) 2 else 10for word, count in top_words(text, limit):print(f{count:6} {word})return 0if __name__ __main__:sys.exit(main(sys.argv))代码要点逐条说明re.findall(r\w, text.lower())里的\w在 Python 3 的str模式下按 Unicode 匹配中文汉字也属于单词字符所以这个程序对纯中文文本同样有效。若只想要英文单词把模式换成[a-zA-Z]即可。Counter.most_common(n)返回「元素次数」的列表按次数从多到少排序。sys.exit(main(sys.argv))让脚本把返回值作为退出码传给操作系统方便在批处理或 CI 里判断成功失败。if __name__ __main__:让这个文件既能直接运行也能被别的模块import而不触发执行。四、报错怎么读Python 的错误信息是从下往上读的最后一行是异常类型和描述往上是调用栈最内层的出错位置在栈的最下面离异常最近的那一行。Traceback (most recent call last):File wordcount.py, line 39, in modulesys.exit(main(sys.argv))File wordcount.py, line 33, in mainlimit int(argv[2]) if len(argv) 2 else 10ValueError: invalid literal for int() with base 10: abc这段文本的含义是在main函数第 33 行调用int()时传进去的字符串是abc无法解析成整数抛出ValueError。定位问题看最后一行加倒数第二段的行号就够了。入门阶段最常见的三类异常异常常见原因NameError用了没定义的名字或拼写不一致大小写TypeError类型不匹配比如字符串和数字相加IndexError/KeyError下标越界或字典里没有这个键五、下一步做什么把这个小工具往四个方向各推一步收获会比再背一百个语法点大加参数解析把「文件路径」和「前 N 个」变成带名字的选项。支持一次统计多个文件并汇总。把结果写进文件而不是只打印。给核心函数补上测试用标准库的unittest或第三方的pytest。常见坑点用可变对象做默认参数❌def add(item, box[]):然后box.append(item)第二次调用时里面还留着上次的数据。✅ 用None当哨兵def add(item, boxNone):内部再判断if box is None: box []。猜文件名大小写❌ 在 Windows 上写import Utils换到 Linux 上文件其实叫utils.py直接ModuleNotFoundError。✅ 文件名和 import 名严格一致全小写注意 Windows 不区分大小写会掩盖问题。读文件不写encoding❌open(a.txt)在 Windows 上按本地编码读中文乱码。✅ 显式写encodingutf-8写入时也一样。把range当列表用❌ 写range(5).append(6)报AttributeError。✅range是惰性序列要列表得写list(range(5))。input()拿到的永远是字符串❌ 写age input(年龄)然后age 1报TypeError。✅ 手动转换并处理非法输入age int(input(年龄))最好套try/except ValueError。sort()的返回值当成新列表❌ 写sorted_list data.sort()结果sorted_list是None。✅list.sort()原地排序并返回None要新列表用sorted(data)。闭包在循环里延迟绑定❌ 循环里生成多个lambda: i调用时全都返回最后一个值。✅ 用默认参数固化当前值lambda ii: i或者改用列表推导/functools.partial。裸except:吞掉一切❌ 写except:接住所有异常连KeyboardInterrupt都被吞掉按 CtrlC 都停不下来。✅ 捕获具体异常类型比如except ValueError:至少也要写except Exception:并记录原因。总结阶段目标标志安装命令能解析到解释器sys.executable指向真实路径语法变量、容器、循环、函数、文件能读懂每一行报错实战写出一个完整程序有输入、处理、输出、错误提示进阶加参数、测试、模块化别人能直接用你的程序入门的关键动作只有一个把学到的语法立刻用在一个真实的小需求上。装好环境、写完整程序、读懂报错这三件事循环几轮比按目录顺序啃完一本教程要快得多。
返回列表