拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Python基础知识思维导图:从核心概念到实战项目的结构化学习指南

1. 项目概述为什么你需要一份Python基础知识思维导图如果你刚开始学Python或者学了一段时间但感觉知识点像一盘散沙看到“变量”、“列表”、“函数”、“类”这些词都认识但就是串不起来那你来对地方了。我刚开始学Python那会儿也经历过这个阶段买了一堆书看了无数教程笔记记了好几本但真要用的时候脑子里还是一团乱麻。后来我花了将近一周时间把自己踩过的坑、混淆的概念、以及那些“原来如此”的顿悟时刻全部整理成了一张结构化的思维导图。这张图后来成了我教新人、自己复习的“武功秘籍”今天我就把它拆开了、揉碎了分享给你。这份“Python基础知识思维导图总结”不是一个简单的目录列表而是一个基于实战经验的知识脉络梳理。它的核心价值在于帮你建立知识间的连接让你明白“为什么这里要学这个”、“这个知识点和那个知识点在实际编码中是怎么配合的”。比如你知道了if-else也知道了for循环但思维导图会提醒你在循环里结合if做条件判断才是处理数据筛选的常见姿势。我们不会只讲孤立的语法而是会把语法放到“写一个爬虫脚本”、“处理一份Excel数据”、“建一个简单的Web应用”这些具体场景里去看。它适合所有阶段的Python学习者纯小白可以把它当作学习路线图按图索骥避免迷路有基础但不成体系的同学可以用它来查漏补缺加固知识网络需要快速面试复习的朋友它能帮你高效回顾核心概念。接下来我们就从这张思维导图的顶层设计开始看看我是如何搭建这个知识框架的。2. 思维导图顶层设计与核心脉络解析一张好的思维导图骨架必须清晰。我设计这张图的第一个原则是遵循认知和编码的实际流程。你不是先学“面向对象”再学“写一行打印语句”的对吧所以我的主干脉络是从“接触Python”到“写出一个完整小项目”的自然演进过程。2.1 核心主干设计四大知识模块环环相扣我把所有基础知识分成了四个一级核心模块它们之间存在明确的递进和支撑关系环境基石与初体验这是所有故事的起点。如果环境都搞不定代码就是空中楼阁。这里包括了Python解释器的安装区分官网安装和Anaconda、环境变量配置解决“命令行里输入python没反应”的经典问题、第一个print(“Hello World”)脚本以及选择一个趁手的编辑器如VSCode的配置、PyCharm的初始设置。很多新手在这里放弃就是因为被环境问题卡住所以我会特别强调避坑点比如如何彻底卸载旧版本、如何避免安装路径有中文空格。语法核心与数据操控这是Python的“单词”和“造句法则”。掌握了这里你才算真正能表达想法。它进一步分为两个子脉络基础语法单元变量与数据类型整数、浮点数、字符串、布尔值、运算符算术、比较、逻辑、赋值、输入输出input()和print()的格式化。数据结构核心这是Python强大之处。我会重点梳理序列类型列表list、元组tuple、字符串str的共性操作如索引、切片、拼接和键值映射类型字典dict。关键在于讲清楚它们各自的应用场景列表用于有序、可变的集合如一批待处理的任务元组用于不可变的常量集合如坐标点(x, y)字典用于通过键快速查找值如学生信息{‘name’: ‘Alice’, ‘score’: 90}。程序逻辑与控制流这是让程序“思考”和“重复劳动”的部分。光有数据不会处理等于零。条件判断if,elif,else。重点不是语法而是如何避免多层嵌套的“箭头代码”以及if not等简洁写法。循环迭代for循环遍历序列或使用range和while循环当条件满足时执行。这里的核心思维是“遍历”和“条件控制”并引出break跳出和continue跳过本次这两个循环控制关键字。我会用一个“在列表中查找特定元素”的例子把for、if、break串起来讲。代码工程化函数、模块与面向对象当你的脚本超过50行就需要这个模块来管理复杂度实现代码复用。函数定义、参数位置参数、默认参数、可变参数*args、关键字参数**kwargs、返回值。思维导图会强调函数是“封装一个功能”并区分“修改传入的列表”和“不修改传入的数字”这类参数传递的微妙区别可变对象与不可变对象。模块与包如何用import导入标准库如os,sys,datetime和第三方库如requests,pandas以及如何组织自己的代码文件形成包。这是你利用Python生态的关键一步。面向对象编程OOP类与对象、属性与方法、继承与多态。对于初学者我会用“狗”这个类来类比说明__init__方法是“买狗时的初始化”实例方法是“让狗叫或跑”继承是“泰迪犬”继承了“狗”的所有特性并可以有自己的“耍宝”方法。这部分思维导图会帮你理清self的含义、类变量和实例变量的区别。这个主干设计确保你学到的每一个知识点都知道它在前端链条中的位置以及它如何支撑后端更复杂的功能。它不是知识的平铺而是一张有向图。2.2 设计原则为什么是这棵树状结构我选择这种结构基于三个实战原则问题驱动而非知识堆砌每个分支的延伸都是为了解决一个具体的编码问题。例如“异常处理”这个分支不会孤立地放在语法里而是会作为“让程序更健壮”的子节点挂在“程序逻辑”或“函数”模块下因为你在写文件读写、网络请求时必然会用到try...except...。强调关联弱化孤立在“数据结构”部分我会用线条或备注明确标出列表推导式List Comprehension是for循环和创建列表的语法糖lambda匿名函数通常与map()、filter()、sorted()这些高阶函数搭配使用。这种关联性能帮你形成“知识组块”记忆和应用效率倍增。预留接口面向拓展在主干上我会为“文件操作”、“常用标准库”、“第三方库生态”等留出位置。当你学完基础可以自然地将“爬虫”requestsBeautifulSoup、“数据分析”pandasnumpy、“可视化”matplotlib作为新的分支嫁接上去这张基础图就变成了你的个人技术全景图。注意思维导图不是一次性艺术品而是你的活笔记。我的建议是初期以我这份为蓝图随着你学习的深入不断在上面添加你自己的案例、理解、和遇到的坑。比如在“字典”旁边贴上你写的“用字典统计单词频率”的代码片段。3. 核心知识节点深度拆解与避坑指南有了主干框架我们来深入几个最容易混淆、也最核心的“知识关节”看看思维导图是如何把它们理清的。3.1 变量与数据类型不仅是“盒子”新手常把变量理解成“存储数据的盒子”这个比喻入门可以但深入会受限。在思维导图中我会强调两个更关键的概念变量是标签不是盒子Python中变量更像是一个贴在数据对象上的标签。执行a [1,2,3]; b a时你不是复制了一个新盒子给b而是给同一个列表对象贴上了a和b两个标签。修改b.append(4)a看到的列表也会变。这一点对于理解参数传递、深浅拷贝至关重要。可变对象 vs 不可变对象这是Python底层行为的分水岭必须在思维导图中突出。不可变对象数字int, float、字符串str、元组tuple。一旦创建内容不能变。“改变”它们如str1 “world”实际上是创建了一个新对象让变量标签指向它。这解释了为什么函数内修改传入的数字不会影响外部。可变对象列表list、字典dict、集合set。内容可以原地修改。函数内修改传入的列表外部列表也会变。避坑实操在思维导图“数据类型”分支下我会用一个对比表格记录这个核心区别并附上经典面试题示例# 示例可变与不可变的影响 def func(x, y): x x 1 # x是不可变整数此操作创建了新对象不影响外部a y.append(100) # y是可变列表此操作修改了原对象影响外部b a 10 b [1, 2] func(a, b) print(a) # 输出 10未变 print(b) # 输出 [1, 2, 100]已变3.2 循环与迭代从“蛮力”到“优雅”for和while循环的语法很简单但思维导图要引导的是如何选用和优化。for循环的本质是迭代器for item in sequence:背后Python会自动获取序列的迭代器。这解释了为什么你可以直接遍历列表、字符串、字典的键。思维导图会引申出range()函数生成数字序列、enumerate()函数同时获取索引和值这两个for循环的黄金搭档。列表推导式循环的“语法糖”这是Pythonic编程的标志之一。思维导图会把它放在for循环的同级位置用箭头标明它是“创建新列表的简洁方式”。例如将[1,2,3,4,5]中的偶数平方传统循环需要4行而列表推导式一行搞定[x**2 for x in range(1,6) if x % 2 0]。我会强调过度复杂的推导式会降低可读性需权衡。while循环当迭代次数未知时while用于“只要条件为真就继续执行”的场景比如读取用户输入直到他输入‘quit’或者监控某个状态。思维导图会重点警告务必确保循环条件有朝一日会变为False否则就是死循环。常见的做法是在循环体内修改影响条件的变量或者使用break。实操心得在处理大量数据时直接在大列表上循环修改元素有时会导致意外结果或效率低下。更安全的做法是在思维导图中记录“最佳实践”使用列表推导式创建新列表或者遍历列表的副本for item in list(my_list):。3.3 函数参数灵活性的源泉与混乱的根源函数参数是Python函数强大灵活的关键也是新手最容易晕的地方。思维导图会像剥洋葱一样厘清这四种参数位置参数最基础按顺序传递。def greet(name, greeting):-greet(“Alice”, “Hello”)。默认参数定义时给参数指定默认值调用时可省略。def greet(name, greeting“Hello”):-greet(“Alice”)。关键警告默认参数必须指向不可变对象def func(a, L[]):是经典大坑因为默认列表L在函数定义时就被创建了多次调用会共享同一个列表。可变参数*args接收任意数量的位置参数在函数内部打包成一个元组。用于设计像print()这样参数不固定的函数。def sum_all(*numbers):关键字参数**kwargs接收任意数量的关键字参数打包成一个字典。用于处理带名字的配置项。def set_config(**options):思维导图会用一个“函数调用参数匹配顺序”的图示来总结先是位置参数然后匹配关键字参数多出来的位置参数给*args多出来的关键字参数给**kwargs。避坑指南在思维导图的“函数”分支旁我会用红色标记这条经验“默认参数用None逻辑在函数内实现”。这是处理可变默认参数的标准做法# 推荐做法 def add_student(name, student_listNone): if student_list is None: student_list [] student_list.append(name) return student_list3.4 面向对象从“狗”到“汽车”的思维转换OOP是抽象思维的训练。思维导图不会一上来就抛出一堆术语而是通过一个贯穿的例子来构建概念。类与实例类Class是蓝图实例Instance是按蓝图造出来的具体物体。class Dog:是蓝图my_dog Dog()是具体的狗。__init__方法构造方法不是“创建”对象那是Python解释器干的而是“初始化”对象。它定义了实例诞生时必须具备的属性。def __init__(self, name, age): self.name name; self.age ageself是什么self代表实例本身。通过self实例可以访问自己的属性和方法。调用时Python自动传递你不需要手动传。继承class Husky(Dog):哈士奇类继承狗类。哈士奇自动拥有狗的所有属性和方法还可以定义自己独有的如def destroy_home(self):。思维导图会用一个树状图展示继承链并指出super()函数用于调用父类方法。封装与多态封装是把数据属性和操作数据的方法捆绑在一起多态是不同类的对象对同一方法调用做出不同响应比如Dog的bark()和Cat的bark()声音不同。对于初学者思维导图会提示先理解前三个概念多态可以在后续实践中慢慢体会。常见误区在思维导图中我会单独列出一个“OOP易错点”子节点混淆类变量和实例变量。类变量是所有实例共享的实例变量是每个实例独有的。在方法定义时忘了写self参数。试图在类外部直接修改私有属性名称以__开头的属性这是一种弱私有约定。4. 从导图到实战构建一个迷你项目思维导图的价值最终要体现在“能写出东西”上。我们用一个综合性的迷你项目——“简易通讯录管理程序”来串联多个核心知识点。这个项目会用到文件操作、函数、字典、循环和条件判断。4.1 项目需求分析与设计我们要做一个在命令行运行的通讯录程序支持以下功能添加联系人输入姓名和电话。查找联系人根据姓名查找电话。显示所有联系人。删除联系人。退出程序。数据需要持久化即程序关闭后下次打开通讯录还在。我们选择用JSON文件来存储因为Python的json模块可以很方便地在内存中的字典和文件字符串之间转换。在思维导图上这个项目会作为一个“综合应用案例”节点引出“文件I/O操作”、“JSON数据处理”、“字典的增删改查”、“函数封装业务逻辑”、“主程序循环与用户交互”等多个子节点并显示它们之间的调用关系。4.2 分步实现与代码详解第一步定义数据结构与文件操作函数我们用一个字典来在内存中表示通讯录格式如{“张三”: “13800138000”, “李四”: “13900139000”}。import json import os FILENAME “address_book.json” def load_contacts(): “”“从文件加载通讯录如果文件不存在则返回空字典”“” if os.path.exists(FILENAME): with open(FILENAME, ‘r’, encoding‘utf-8’) as f: try: return json.load(f) # json.load() 直接返回字典 except json.JSONDecodeError: return {} # 文件内容损坏返回空字典 return {} def save_contacts(contacts): “”“将通讯录字典保存到文件”“” with open(FILENAME, ‘w’, encoding‘utf-8’) as f: json.dump(contacts, f, ensure_asciiFalse, indent4) # indent让文件更易读要点解析with open(...) as f:是文件操作的最佳实践它能确保文件在任何情况下都会被正确关闭。encoding‘utf-8’防止中文乱码。json.load()和json.dump()是序列化内存到文件与反序列化文件到内存的核心。ensure_asciiFalse允许JSON直接存储中文字符而不是\u形式的编码。异常处理try...except保证了程序的健壮性即使文件被意外修改损坏程序也不会崩溃而是从头开始。第二步实现核心业务函数每个功能对应一个函数遵循“单一职责原则”。def add_contact(contacts): name input(“请输入联系人姓名”).strip() if not name: print(“姓名不能为空”) return if name in contacts: print(f“联系人 ‘{name}’ 已存在电话是{contacts[name]}”) choice input(“是否更新电话(y/n): “).lower() if choice ! ‘y’: return phone input(“请输入联系人电话”).strip() contacts[name] phone # 字典的赋值操作若key存在则更新不存在则新增 print(f“联系人 ‘{name}’ 已保存。”) def find_contact(contacts): name input(“请输入要查找的联系人姓名”).strip() phone contacts.get(name) # 使用.get()方法避免KeyError异常 if phone: print(f“{name} 的电话是{phone}”) else: print(f“未找到联系人 ‘{name}’。”) def list_all_contacts(contacts): if not contacts: # 判断字典是否为空 print(“通讯录为空。”) return print(“\n 所有联系人 ) for name, phone in contacts.items(): # .items() 同时遍历键和值 print(f“{name}: {phone}”) print(“\n”) def delete_contact(contacts): name input(“请输入要删除的联系人姓名”).strip() if name in contacts: removed_phone contacts.pop(name) # .pop() 删除并返回被删除的值 print(f“已删除联系人 ‘{name}’电话{removed_phone}”) else: print(f“未找到联系人 ‘{name}’删除失败。”)要点解析.strip()用于去除用户输入首尾的空白字符避免因误输入空格导致查找失败。contacts.get(name)比contacts[name]更安全后者在键不存在时会引发KeyError崩溃。for name, phone in contacts.items():是遍历字典的标准优雅写法。contacts.pop(name)集查询和删除于一体比先if name in contacts再del contacts[name]更简洁。第三步主程序循环与用户交互这是程序的“大脑”负责调度各个功能函数。def main(): contacts load_contacts() # 程序启动先加载数据 while True: # 无限循环直到用户选择退出 print(“\n 简易通讯录 ) print(“1. 添加联系人”) print(“2. 查找联系人”) print(“3. 显示所有联系人”) print(“4. 删除联系人”) print(“5. 退出程序”) choice input(“请选择操作 (1-5): “).strip() if choice ‘1’: add_contact(contacts) elif choice ‘2’: find_contact(contacts) elif choice ‘3’: list_all_contacts(contacts) elif choice ‘4’: delete_contact(contacts) elif choice ‘5’: save_contacts(contacts) # 退出前保存 print(“通讯录已保存再见”) break # 跳出循环结束程序 else: print(“输入无效请输入1-5之间的数字。”) if __name__ “__main__”: main()要点解析if __name__ “__main__”:这是一个Python惯用法。它保证了当你直接运行这个脚本时main()函数才会被执行如果这个脚本被作为模块导入到其他程序main()不会自动运行。这对于代码复用非常重要。while True:构建了一个经典的命令行菜单循环。每个if/elif分支调用对应的功能函数结构清晰。在退出选项5中先调用save_contacts保存数据再用break跳出循环这是程序结束前的标准清理动作。通过这个约100行代码的项目你实践了从思维导图中学到的超过10个核心知识点文件I/O、JSON处理、字典操作、循环、条件判断、函数定义与调用、字符串处理、程序结构等。这才是将知识网络转化为解决实际问题的能力。5. 学习路径与工具推荐让思维导图“活”起来有了知识体系和实战经验如何高效地使用这张思维导图进行学习和复习呢这里分享我的个人方法。5.1 动态学习法三阶段使用策略思维导图不是静态的它应该伴随你的学习进程而进化。第一阶段探索与标注初学期。以我的导图为地图每学完一个节点比如“列表”就在你自己的导图副本上做两件事1)补充一个你自己写的、最能代表这个知识点的小例子哪怕只是my_list [1, 2, 3]。2)记录一个你当时遇到的困惑和最终的解法。比如“为什么列表切片list[:]可以创建副本”把答案写在旁边。这个过程是把外部知识内化成你自己的理解。第二阶段连接与提问熟练期。当你对大部分基础节点熟悉后开始主动寻找节点间的联系。在导图上画箭头、写注释。例如在“函数参数”*args旁画一个箭头指向“内置函数”中的print()注明“print(*objects, sep‘ ‘)就是用了可变参数”。问自己“for循环和while循环在什么场景下可以互相转换各自的优劣是什么”把思考结果简记在节点旁。第三阶段回溯与精简精通期。尝试不看导图凭记忆在白纸上画出主干和核心分支。然后对比原图找出遗忘或模糊的点重点强化。此时你可以开始简化你的导图把已经烂熟于心的细节折叠或删除只保留最高层的概念框架和那些最容易忘记的“坑点”。这张简化后的图就是你考前或面试前半小时快速回顾的利器。5.2 工具链推荐从绘制到代码实践工欲善其事必先利其器。一套顺手的工具能极大提升效率。思维导图软件XMind功能全面界面美观适合制作需要分享或长期维护的精致导图。它的“ZEN模式”能让你专注内容。MindNode(Mac/iOS)如果你在苹果生态内它的流畅度和设计感无出其右。FreeMind免费、开源、轻量虽然界面古老但核心功能齐全适合追求纯粹和效率的用户。纸和笔不要低估物理工具。在初期构思或快速头脑风暴时手绘的自由度是软件无法比拟的。你可以先手绘草图再整理到软件中。代码练习与实验环境Jupyter Notebook / Jupyter Lab强烈推荐给初学者。它以“单元格”为单位允许你写一段代码比如一个列表操作立刻看到结果非常适合交互式学习和探索。你可以为思维导图的每个小节点创建一个单元格来测试代码直观感受其行为。VS Code Python 扩展这是目前最主流的轻量级集成开发环境。安装Python扩展后智能提示、调试、代码格式化等功能一应俱全。适合编写像上面通讯录那样的完整脚本项目。PyCharm功能更强大的专业IDE对大型项目、Django Web开发、科学计算支持更好。初学者可能会觉得稍重但如果你是计算机专业或决心深入开发早接触有好处。在线编程平台如Replit,PythonTutor。前者打开浏览器就能写代码并运行无需配置环境后者能可视化代码执行过程对于理解变量变化、函数调用栈等抽象概念有奇效。我的工作流通常我会用XMind绘制和维护我的主知识体系导图。当学习一个新库比如pandas时我会在Jupyter Notebook里跟着教程或文档一个功能一个功能地试并把关键代码片段和注释截图或复制粘贴到XMind对应的节点下。最后用VS Code来完成集成性的项目作业。这套组合拳覆盖了从知识点学习、碎片化实验到完整项目开发的全过程。6. 高频问题排查与深度技巧实录即使有了清晰的导图和教程在实际编码中你依然会碰到各种“诡异”的问题。下面是我从自己和学员那里收集的“经典坑位”及解决方案这些内容应该成为你个人思维导图上最宝贵的“便签”。6.1 环境与安装类“玄学”问题问题命令行输入python或pip提示“不是内部或外部命令”。根源系统环境变量PATH中没有添加Python的安装路径。解决找到Python安装目录如C:\Users\YourName\AppData\Local\Programs\Python\Python310和Scripts目录如...\Python310\Scripts。将此二路径添加到系统环境变量PATH中。关键步骤关闭当前所有命令行窗口CMD、PowerShell、终端重新打开一个再试。环境变量需要重启终端才能生效。思维导图关联点在“环境配置”节点下务必记下“修改PATH后需重启终端”这条血泪教训。问题使用pip install安装包时速度极慢或超时。根源默认的PyPI服务器在国外。解决使用国内镜像源。最常用的是清华源和阿里源。# 临时使用 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple some-package # 设为默认推荐 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple思维导图关联点在“包管理”节点旁标注“国内镜像源配置”并附上上述命令。问题不同项目需要不同版本的包全局安装冲突。根源所有包都安装到系统的Python目录下。解决使用虚拟环境。这是Python开发的必备实践。# 创建虚拟环境 python -m venv my_project_env # 激活虚拟环境 (Windows) my_project_env\Scripts\activate # 激活虚拟环境 (macOS/Linux) source my_project_env/bin/activate # 激活后pip安装的包只会在此环境内 pip install pandas1.4.0 # 退出虚拟环境 deactivate思维导图关联点在“项目开发”或“环境管理”主干下必须建立“虚拟环境venv”子节点强调其隔离性和必要性。6.2 语法与运行时“诡异”报错问题IndentationError: unexpected indent或IndentationError: expected an indented block根源Python对缩进空格或Tab极其严格用于定义代码块。混用空格和Tab或缩进层级不一致会导致此错误。解决统一使用4个空格作为缩进PEP 8官方建议。在编辑器如VS Code中设置“将Tab转换为空格”。检查报错行及其上下行的缩进是否对齐。如果从网页复制代码注意清除不可见的格式字符。思维导图关联点在“基础语法”最顶部用粗体标注“Python依赖缩进。使用4个空格不要混用Tab”问题NameError: name ‘xxx’ is not defined根源尝试使用一个未赋值的变量。排查检查变量名是否拼写错误大小写敏感。检查变量是否在使用的作用域内。例如在函数内部定义的变量不能在函数外部直接使用。检查是否在变量定义之前就使用了它比如在循环或条件判断的代码块外使用了内部变量。思维导图关联点将“变量作用域局部 vs 全局”作为一个重要子节点并用例子说明函数内外的变量隔离。问题TypeError: can only concatenate str (not “int”) to str根源尝试将字符串和数字用连接。对数字是加法对字符串是拼接Python不会自动转换。解决使用str()函数将数字转为字符串或使用f-stringPython 3.6推荐进行格式化。age 25 # 错误: print(“I am ” age “ years old.”) # 正确1: print(“I am ” str(age) “ years old.”) # 正确2 (推荐): print(f“I am {age} years old.”)思维导图关联点在“字符串操作”节点下重点标出“类型转换”和“f-string格式化”。问题列表循环中删除元素导致结果错乱或索引越界。根源在遍历列表的同时修改其长度会使迭代器行为异常。错误示例numbers [1, 2, 3, 4, 5] for num in numbers: if num % 2 0: numbers.remove(num) # 危险操作 print(numbers) # 可能输出 [1, 3, 5]但也可能出错或漏删解决创建新列表列表推导式或遍历副本。# 方法1列表推导式创建新列表 numbers [1, 2, 3, 4, 5] numbers [num for num in numbers if num % 2 ! 0] # 方法2遍历副本 numbers [1, 2, 3, 4, 5] for num in numbers[:]: # 使用切片[:]创建副本 if num % 2 0: numbers.remove(num)思维导图关联点在“列表”节点的“遍历”部分用醒目的标记写下这条黄金法则“不要在遍历原列表时直接增删元素应创建新列表或遍历副本。”6.3 调试与效率提升技巧技巧1善用print()进行“穷人的调试”。在怀疑出问题的地方打印关键变量的值和类型print(f“var: {var}, type: {type(var)}”)。这是最简单直接的调试方法。技巧2使用pdb进行交互式调试。在代码中插入import pdb; pdb.set_trace()程序运行到此处会进入调试器你可以逐行执行、查看变量。VS Code和PyCharm的图形化调试器本质也是这个。技巧3理解“Pythonic”的写法。这能让你写出更简洁、高效的代码。思维导图中可以建立一个“Pythonic写法”的节点收集例如交换两个变量a, b b, a遍历序列获取索引和值for i, value in enumerate(my_list):字典合并Python 3.9new_dict dict1 | dict2使用in判断成员关系if key in my_dict:而不是if my_dict.get(key):学习编程尤其是初期就是一个不断踩坑和填坑的过程。把你遇到的每一个问题和解决方案都记录到你的思维导图对应节点旁边。久而久之这张图就会成为专属于你的、最强大的“错误词典”和“经验宝库”。它不再是一张冷冰冰的知识地图而是记录你成长足迹的编程手账。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门