尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Python入门到实战:环境配置、基础语法与项目实践全指南

Python入门到实战:环境配置、基础语法与项目实践全指南 1. 装不对Python后面每一步都在还债先说一个我见过无数次的场景新手兴冲冲打开Python官网下载了安装包一路狂点下一步装完之后打开命令行敲python结果屏幕提示不是内部或外部命令。于是开始怀疑人生百度一搜各种教程说把Python安装目录加到环境变量里跟着操作半天终于能用了但Python装在了哪儿、为什么加路径、pip又是干什么的完全是一笔糊涂账。我必须说Python入门真正劝退人的地方往往不是语法本身而是第一步的环境安装。因为这一步涉及操作系统、环境变量、命令行这些对纯新人来说完全陌生的概念一旦出错挫败感极强。如果你用的是Windows系统安装时有一个最关键的选项——“Add Python to PATH”。这个选项默认是关闭的很多人根本不会注意到它。它到底有什么作用简单说PATH就是操作系统的一个通讯录。你在命令行里敲任何一个命令系统都会去这个通讯录里查找对应的程序。你把Python加入PATH系统才能在任意目录下找到python这条命令。没加的话你在安装目录之外的地方敲python系统自然一脸茫然。我个人建议不管教程怎么说安装时一定要勾上这个选项然后选择Customize installation自定义安装路径不要装在默认的C盘用户目录下。路径里不要有中文和空格比如D:/Python312这种最干净。这样做的好处是后续装第三方库、定位文件都会省掉很多莫名其妙的坑。至于安装路径里的数字312对应的是Python 3.12版本号以后升级大版本时直接换目录装新版就行新旧版本互不干扰。macOS用户的情况不太一样。系统会自带一个Python 2.7老版本系统或者Python 3新版本系统但自带的版本往往偏旧而且很多系统工具依赖它你别去动它。正确做法是去官网下载最新的Python安装包或者如果你熟悉的话用Homebrew执行brew install python。这里有一个特别容易踩的坑装好之后在终端里敲python出来的可能是系统自带的旧版而你新装的要敲python3才能进入。反正记住一点看到命令行提示符前面是就说明进入Python交互环境了。Linux用户基本不用愁安装本身apt install python3或者dnf install python3一条命令解决。麻烦的是部分发行版默认没有pip需要额外装一下python3-pip这个包。另外Linux默认也是python3和pip3不是python和pip这和Windows的习惯不一样别搞混了。安装完之后怎么确认装好了Windows用户在命令行里分别输入python --version pip --version能看到版本号输出就说明环境通了。注意pip是Python的包管理器负责安装第三方库。没有它后面你想用requests、pandas这些好用的库就是空谈。我第一次教朋友的时候发现很多人装好Python就以为完事了直到要用某个库才发现pip根本不能用或者用不了又得回头排查环境问题。所以这一步一定要在正式写代码之前多花五分钟验证干净。提示如果在命令行出现python无法识别先别急着改系统环境变量。新手最容易在这步把PATH改坏。稳妥做法是找到Python安装目录把Scripts子目录pip所在位置也一起加入PATH两个路径同时存在才能保证python和pip命令都可用。2. 编辑器不用纠结太多先让代码跑起来安装问题解决之后下一个让新手反复纠结的问题是**我到底用什么写Python**是IDLE、记事本、VS Code还是PyCharm很多人在这上面花了大量时间搜索对比下载了一堆软件结果一天过去了代码一行没写。这纯属本末倒置。我的建议很直接第一周就用Python自带的IDLE。它简陋得就像WordPad之于Office但正因为简陋你能把注意力全部集中在Python语法本身不会被代码补全、调试器、主题配色这些花花绿绿的功能分散精力。IDLE启动之后File - New File新建窗口写完按F5运行够了。等你对基本语法有感觉了再切换到VS Code。它轻量、免费、跨平台装上Python插件后就有了代码高亮、智能补全、语法检查对新手来说体验刚刚好。PyCharm功能极其强大但社区版虽然免费新手打开那一堆配置和项目概念有时反而会增加心理负担。不是不能用是没必要在起步阶段上这么重的工具。真正影响学习效率的不是编辑器本身而是你用什么方式运行代码。新手最常见的错误是写完代码不知道按哪个键运行或者在交互式环境里写了多行的for循环一按回车就报语法错误。这里有个经验之谈凡是需要反复测试的小片段就在交互式环境里敲比如验证一个表达式的值、试一个方法的用法凡是完整的程序逻辑一定要保存成.py文件再运行。两种方式配合效率最高。你还需要知道一个看代码依赖的常识命令行里执行pip list可以查看当前环境装了哪些第三方库pip show 包名查看某个库的具体版本和安装位置。很多新手报错ModuleNotFoundError: No module named xxx八成就是库没装上或者装错了Python环境。注意如果你电脑上同时有Python 2和Python 3现在叫老版本和官方推荐版本或者通过Anaconda装了另一个Python很容易出现在IDE里能用在命令行报找不到库的情况。本质原因是IDE用的解释器和命令行用的不是同一个Python。这件事不用深究遇到就先统一一下在项目里指定同一个解释器即可。3. 变量和数据类型编程世界里的容器现在开始正经说语法。Python的变量不需要提前声明类型你直接写name 小明它就替你记住了这是个字符串写age 18它就记住了这是个整数。这种动态类型的设计让入门门槛低了不少但也养出了一些坏习惯——有经验的开发者看新手的代码最常见的问题就是变量命名毫无章法。a 1、b 2这种缩写过三天你自己都不知道它们是什么含义。变量本质上就是一个贴了标签的盒子。你把一个值放进去再给盒子贴个名字以后就可以用这个名字来引用这个值。在Python里不是数学里的等于而是赋值把右边的值放到左边的盒子里。这个理解特别重要不然你会写出类似x x 1却想不通x怎么会等于x加1这种问题——程序里它不是方程而是把原来的x取出来加1再放回x这个盒子里。Python的数据类型新手阶段你需要熟练掌握这几类整数int和浮点数float18、3.14注意浮点运算是二进制近似的0.1 0.2得到的是0.30000000000000004这不是Python的bug所有编程语言都这样。做金额计算要小心必要时用Decimal处理。字符串str用单引号或双引号包裹的文本hello和world都行。字符串支持索引、切片、拼接、格式化是处理文本数据的基础。布尔值bool只有True和False两个值注意首字母大写。它是条件判断的基础。列表list用方括号包裹的有序集合可以装任何类型[1, 2, 3, a]。元组tuple圆括号包裹和列表类似但创建后不可修改(1, 2, 3)。适合存放不该变的数据。字典dict花括号包裹的键值对集合{name: 小明, age: 18}查数据按dict[name]取。集合set花括号包裹但内容不能重复{1, 2, 3}适合去重和集合运算。这里有一个非常容易踩的坑列表是可变的元组是不可变的。我见过不少新手把元组当列表用想往里面追加元素结果报AttributeError: tuple object has no attribute append。元组存在的意义就是告诉读代码的人——这堆数据不该被改动。如果你想要的是可增删改的列表一开始就别用元组。关于变量命名再啰嗦一句Python社区有命名规范官方叫PEP 8变量名和函数名用小写字母加下划线比如user_name、get_user_info类是首字母大写的驼峰比如UserInfo。这些规范不是为了好看而是让代码像一篇排版整齐的文章别人包括未来的你能顺畅读下去。我在实际维护别人代码时最痛苦的就是遇到命名乱七八糟的脚本翻遍全文件都猜不出某个变量到底是干什么用的。4. 流程控制让程序学会判断和循环语法基础打完了你会发现自己写的东西还只能从上到下一行行执行和流水账没什么区别。真正让程序变得聪明的是流程控制——条件判断和循环。条件判断用if、elif、else。新手最容易犯的错误是分不清和——if条件里用单个等号是赋值用双等号才是判断相等。另外Python用缩进而不是花括号{}来表示代码块层级这是Python最独特的语法设计。缩进不一致轻则报IndentationError重则逻辑混乱但程序不报错那才是最可怕的。我建议新手不管用什么编辑器统一把缩进设为4个空格不要用Tab键两个混用很容易出诡异错误。循环有两种for和while。for一般用来遍历一个可迭代对象比如遍历列表里的每个元素fruits [苹果, 香蕉, 橘子] for fruit in fruits: print(f我喜欢{fruit})注意这里in的两种用法要区分在for循环里它表示从……中依次取出在if判断里它表示是否属于比如if 苹果 in fruits:。这两种语义看着像其实完全不同但新手阶段多练几次自然就熟了。range()函数是for循环的好搭档。range(5)生成0到4的整数序列range(1, 6)生成1到5range(1, 10, 2)则是从1开始到9步长为2。想要循环10次写for i in range(10):就对了。这里有个使用习惯想提醒你range的终点是不包含的很多刚接触的人会疑惑为什么range(1, 10)不打印10记住含头不含尾这个口诀就好。while循环适合你不知道要循环多少次的场景。比如写一个猜数字游戏用户没猜对就继续猜猜对了才停guess -1 answer 42 while guess ! answer: guess int(input(猜一个数字)) print(恭喜你猜对了)这个例子里还有个知识点是int(input(...))input函数从键盘读入的都是字符串必须用int()转成整数才能进行比较这个细节不掌握的话你会遇到我明明猜对了为什么还说不对的困惑。循环里两个控制关键词也常用break是立刻跳出整个循环continue是跳过当前这一轮、进入下一轮。比如遍历列表时遇到某个不需要处理的元素用continue跳过找到目标后不想再找了用break退出。这两个词配合循环使用要理解清楚不然逻辑容易绕进去。5. 函数把代码装进可复用的盒子当你开始写稍大一点的程序会发现代码里大量重复的片段。比如你要在三个地方计算圆的面积每次都写一遍3.14 * r * r一旦要改成3.14159 * r * r就得改三处还容易漏。这时候就该用到函数了——把一段逻辑封装起来给它起个名字需要时调用它。定义一个函数非常简单def circle_area(radius): pi 3.14159 return pi * radius * radiusdef关键字声明定义函数circle_area是函数名括号里是参数这里是半径return是返回值。调用时写area circle_area(5)就能得到半径为5的圆的面积。有几个细节新手常犯错误。第一函数定义之后要空两行再写其他代码这是PEP 8的规范。第二函数体内的代码必须缩进不然不算函数的一部分。第三return可以没有——如果没有写return函数会默认返回None表示什么都没有。有很多新手把print()的结果当成函数的返回值但print()本身返回的是None打印出来的只是屏幕上的输出效果跟函数的返回值是两码事。函数参数这块可以玩出不少花样。除了按位置传参位置参数还可以按参数名传参关键字参数比如circle_area(radius5)。函数的定义里还可以给参数写默认值def greet(name, greeting你好): print(f{greeting}{name})调用greet(小明)会输出你好小明调用greet(小红, 早上好)则输出早上好小红。给参数设默认值时有一个关键规则有默认值的参数必须放在没有默认值的参数后面不然语法会报错。另外一定要掌握lambda匿名函数和*args、**kwargs这两个扩展写法吗lambda在map、filter、sorted这些函数里配合使用会非常简洁比如按字典的某个键排序users [{name: 小明, age: 18}, {name: 小红, age: 20}] users.sort(keylambda user: user[age])lambda user: user[age]就是一个匿名函数输入一个用户字典返回它的年龄sort方法用这个函数返回的值作为排序依据。这段代码不用lambda也能写但明显是lambda更简洁。*args和**kwargs则是接收任意数量参数的写法进阶后再深入理解即可一开始能看懂就行不必急于掌握。关于写函数我有一个实践建议一个函数只做一件事。如果函数名是process_data那它内部就不该又读文件又改数据又存数据库。把大函数拆成小函数每个小函数职责单一调试和测试都会轻松很多。这也是后续学习面向对象和设计模式的基础。6. 面向对象从做事到建模的思维升级函数解决的是复用逻辑的问题但现实世界的东西往往既有属性又有行为。描述一辆车它有颜色、品牌、速度这些属性有加速、刹车、转弯这些行为。如果只用函数和变量来模拟会很零散。面向对象编程就是让你把相关的属性和行为打包成一个整体——类Class和对象Object。一个经典类比类是图纸对象是按图纸造出来的房子。图纸本身不是你住的房子但你可以根据同一张图纸造出很多间格局相同的房子。在代码里class定义了一张图纸用类创建出来的具体实例才是真实的能用的对象。class Car: def __init__(self, brand, color): self.brand brand self.color color self.speed 0 def accelerate(self): self.speed 10 def brake(self): self.speed - 5__init__是Python里一个特殊的魔法方法它负责在创建对象时初始化属性。注意它的参数列表里有self——这个self指代将要创建的那个对象本身你给self.brand赋值就是给这辆车设置品牌。很多新手不理解为什么每个方法都要写self你可以这样理解代码里有多个Car对象时方法得知道自己是哪辆车self就是用来传递我是谁的。创建对象只需要调用类名加括号my_car Car(特斯拉, 白色) print(my_car.speed) # 输出0 my_car.accelerate() print(my_car.speed) # 输出10面向对象还有两个核心概念继承和多态。继承就是子类是父类的一种比如Truck卡车继承Car它自动拥有了父类的属性和方法同时还可以有自己独特的属性比如载重量class Truck(Car): def __init__(self, brand, color, load_weight): super().__init__(brand, color) self.load_weight load_weightsuper()调用父类的初始化方法把brand和color交给父类处理然后自己再设置load_weight。这样的好处是公共逻辑只写一遍子类只需扩展差异部分。这里我想强调一个新手很容易走进去的误区不是所有程序都需要面向对象。很多人学完类之后恨不得把所有代码都塞进类里结果写出来一堆只是壳子的类反而增加了理解成本。判断标准很简单当你的程序里有多个实体、每个实体有多个属性和行为、它们之间还有关系时用类才合适。如果只是一个简单脚本从上到下顺序执行就完了硬套面向对象纯属自找麻烦。我见过很多人把Python当Java写过度设计后来自己维护都费劲。7. 文件读写与异常处理程序真正走向实用的关键一步到此为止你写的一切程序数据都存在内存里程序一关数据就没影了。想让程序真正有用就得让它能从文件读取数据和把数据写入文件。比如爬虫存数据、配置文件读取、日志记录都离不开文件操作。Python里最基础的文件读写方式就是open()函数配合with语句with open(data.txt, r, encodingutf-8) as f: content f.read() print(content)r表示只读模式encodingutf-8指定文件编码。我建议写文件相关的代码一律显式指定encodingutf-8否则在Windows上默认可能是GBK编码读别人用UTF-8保存的文件就会出现乱码。这个问题出现的频率远超想象。with语句就是上下文管理器它的好处是无论代码正常执行还是中途出错文件都会自动关闭。很多人不用with、只写f open(...)然后忘记f.close()在Windows下会出现一个很诡异的问题文件被占用其他程序打不开甚至删除不了。用with可以彻底规避。写文件的模式主要有三种w写入模式会清空原文件内容再写。适合覆盖更新。a追加模式在文件末尾追加适合写日志。r读写模式可读可写但指针位置要注意使用频率低。文件读写最常遇到的问题是FileNotFoundError。比如你要读data.txt但这个文件不存在程序直接崩溃。程序崩溃本身不可怕可怕的是用户看到一堆看不懂的报错和物理损伤。这时候就要用到异常处理——try/except语句try: with open(data.txt, r, encodingutf-8) as f: content f.read() except FileNotFoundError: print(文件不存在请检查文件路径) except Exception as e: print(f发生未知错误{e})try块里的代码会被监控一旦抛出异常就跳转到匹配的except分支。你可以在一个try后面跟多个except分别处理不同类型的错误。更完整的写法还包含else没有异常时执行和finally无论有没有异常都执行一般用来清理资源。但with已经处理好了资源关闭finally在新手阶段不需要刻意使用。异常处理有几个好习惯值得强调。第一不要用裸的except:捕获所有异常。它会把键盘中断、内存错误都吞掉程序出现严重问题也不报错排查起来非常痛苦。至少也要用except Exception这已经能捕获绝大多数代码运行期错误。第二异常类型要具体。能捕获FileNotFoundError就不要只捕获Exception准确的异常类型能在一瞬间指出问题。第三不要用异常处理来表达正常流程。比如判断用户输入是不是数字应该尽可能用isdigit()这类方法提前判断而不是依赖try/except ValueError兜底。异常处理的定位是意外情况的兜底不是常规逻辑的一部分。想要看异常的具体调用链在命令行里运行加参数-m trace可以跟踪但更常用的做法是直接看traceback输出。Python默认就会打印完整的错误堆栈一行一行看最下面的xxxError才是根因上面的一堆是调用过程。新手最容易犯的错是只看报错最后一行结果把子函数里的错误归咎到主函数里。学会读错误的完整堆栈是独立排查问题的核心能力。8. 标准库与第三方库站在巨人的肩膀上写代码当你学会语法、流程控制、函数、类、文件操作你其实已经掌握了Python的核心骨架。但Python真正让人写起来爽的是它海量的标准库和第三方库。标准库是Python自带的功能模块不需要额外安装导入就能用第三方库则来自全球开发者用pip一条命令装上即可。新手最先值得熟悉的标准库有这些os操作系统交互比如创建目录、查看文件路径、获取环境变量。sysPython解释器和命令行参数的交互sys.argv能获取命令行传入的参数。json处理JSON格式数据。现在很多API接口返回的就是JSONjson.loads()和json.dumps()必须手到擒来。re正则表达式模块用于字符串匹配和文本解析。表达式写起来像天书但处理数据时威力巨大。datetime日期时间处理。collections提供了很多好用的数据结构比如Counter计数器、defaultdict默认值字典。使用一个模块前必须先import这是Python里很底层的一个机制。import语句发生了什么它把那个模块的代码加载到内存然后把模块名字绑定到当前命名空间。以后你写import os之后就能用os.path.join这种带前缀的调用方式。也可以from os import path直接导入子模块但要注意避免命名冲突。第三方库的引入让Python在数据分析、Web开发、自动化等领域全面开花。比如数据分析三件套numpy、pandas、matplotlibWeb开发有Flask、Django爬虫有requests、BeautifulSoup、Scrapy。这也是Python比很多语言更受欢迎的核心原因——生态强大开箱即用的东西太多。新手学到这个阶段最应该做的不是继续啃语法书而是结合自己想做的事情去找对应的库边用边学。想自动处理Excel表格去搜openpyxl用法。想写个小网页去看Flask教程。在真实项目里遇到需求再学对应的库印象远比对着文档硬背深刻。这里还想重点讲一下虚拟环境很多新手根本不知道它的存在。虚拟环境venv就是为你每个项目创建独立的Python运行环境项目A装了pandas 1.5项目B装了pandas 2.0互不干扰。为什么不全局安装因为不同项目的依赖版本可能冲突而且全局环境混乱会带来想象不到的兼容问题。创建和使用非常简单# 在项目目录下执行 python -m venv venv # Windows下激活 venv\Scripts\activate # macOS/Linux下激活 source venv/bin/activate激活之后你的命令行前面会多出一个(venv)前缀这时再用pip install安装的包都会装进这个项目的虚拟环境里。几乎所有真实的Python项目都会用虚拟环境来隔离依赖。这个习惯越早养成越好等以后你参与团队开发或者部署项目到服务器上时虚拟环境会帮你避免一大堆依赖冲突的噩梦。9. 基础语法之外的三个隐藏技能学到这一步纯语法层面的东西你已经逾越了最陡峭的部分。但根据我接触过的大量案例能不能真正独立写项目往往取决于三个基础语法之外的隐藏技能——看书看不来的那种。第一个是调试能力。几乎没有一个程序能一遍通过。碰到报错不要慌也不要跳过报错随便改几个字再试。用print在关键位置打印变量值是最朴素也最有效的调试手段。进阶一点的可以用Python调试器pdb在怀疑出问题的地方插入import pdb pdb.set_trace()程序运行到这里会暂停进入交互式调试模式你可以输入变量名看值、输入n执行下一行、输入q退出。不过说实话更多时候print就够了尤其是对于批量数据用print(f处理第{i}行当前值是{value})这种方式快速定位问题比各种高大上的调试工具更直观。关键是要养成把问题拆小的习惯——把中间结果打出来你才能知道是哪一步计算出了问题。第二个是搜索能力。遇到没见过的报错把报错信息原样复制到搜索引擎里搜。搜索结果的权威性排序一般是官方文档 Stack Overflow 个人博客 论坛灌水。Stack Overflow上同一个问题可能有几十个回答优先看点赞数高且标注了Accepted answer的那个。特别提醒很多英文报错信息翻译成中文反而看不懂直接搜英文原文命中率最高。这不算投机取巧这是每个程序员每天都要做的事情你不需要记住所有函数的所有参数你只需要知道去哪查、怎么查。第三个是读代码的能力。想提升光自己写远远不够一定要大量读别人写的代码。去GitHub上搜简单的Python项目把它们clone到本地一行行读。一开始肯定有很多看不懂的地方没关系先跳过把看懂的梳理出来。我推荐新手读代码的特定顺序是先读README了解项目是干什么的再读入口文件通常是main.py或app.py接着追踪几个关键函数的调用最后再看数据结构。读代码不是阅读小说不用从第一行按顺序读理清骨架比逐行抠细节重要得多。关于搜索再补充一句我的真实经验很多入门问题比如Python怎么读CSV先搜python csv official documentation看官方文档的示例看不懂再看博客。官方文档永远是最可靠的博客可能过时可能照搬可能出错。培养直接查官方文档的习惯会是你学习道路上性价比极高的一项投入。10. 从基础到能独立做事一个可执行的路线图很多朋友学到基础语法后陷入一个很尴尬的状态语法都会但不知道接下来该做什么。我理解这个状态因为基础知识和真实任务之间有一道巨大的鸿沟。我的建议是不要停留在背语法直接选择一个方向做一个具体的、不借助教程的、小小的项目。以下是几条比较顺的路线你可以按兴趣挑选自动化办公方向用openpyxl或pandas处理Excel表格用os和shutil批量重命名、整理文件用docx处理Word文档。这个方向最适合平时需要大量处理数据的上班族见效快成就感强。数据分析方向掌握pandas做数据清洗和统计matplotlib或plotly做可视化。找一份公开数据集比如网站下载的电商销售数据自己分析销售额趋势、用户分布输出几张图表。这个方向适合想做数据相关岗位的人。Web开发方向用Flask做一个极简的个人博客或者待办事项应用。这个方向的曲线稍微陡峭一些因为涉及HTTP、路由、模板引擎、数据库但一旦跑通你就掌握了全栈开发的基本框架。爬虫方向用requestsBeautifulSoup写一个简单的爬虫从静态网页上抓取数据。注意爬虫要遵守网站的robots.txt协议不要对目标网站造成压力爬下来的数据也别做违法的事情。游戏开发方向用pygame做一个简单的猜数字或贪吃蛇。这个方向有趣能快速激励你继续学下去。刚开始动手做项目时我的核心建议是先完成再完善。不要一上来就想做一个完美的大网站或者复杂的机器学习模型。先做一个最简单、能用的版本——哪怕只是命令行里运行的脚本也行。比如你想做Web开发那就先让Flask跑起来返回一个Hello, World!页面的再到HTML模板里显示一条数据库记录再到实现用户注册登录一步一步来。完成一个小小的完整闭环带给你的信心比看十本书都强。练习量上我推荐一个简单的标准每天至少写50行代码最好是持续一周。这一周里不要追求新语法就用你已经掌握的知识反复打磨一个小需求。你会发现同一个功能第一天写出来的代码又长又绕到了第七天你会自然地想到用循环、字典、函数来优化它——这种变化不是看教程看出来的是动手写出来的。最后再推荐几个经典的学习资源。国内有廖雪峰的Python教程免费且通俗官方有Python Tutorial内容权威Books like《Python编程从入门到实践》和《流畅的Python》作为补充前者适合入门后者适合进阶。但请注意任何教程都只是地图真正的路要靠你自己走。把基础语法过一遍之后剩下的学习都应该围绕具体项目展开缺什么就补什么。这条路没有任何捷径但每个写作代码的当下你会切实感受到自己在进步。祝你顺利。
返回列表