[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"site-home-live-entry-setting":3,"site-header-contests":8,"site-header-camps":49,"study-material-detail-study-57":104},{"enabled":4,"title":5,"statusText":5,"buttonText":5,"campSlug":5,"stage":6,"classroomId":7,"hasClassroom":4},false,"",0,null,{"total":9,"list":10,"pageNum":44,"pageSize":45,"size":9,"startRow":44,"endRow":9,"pages":44,"prePage":6,"nextPage":6,"isFirstPage":46,"isLastPage":46,"hasPreviousPage":4,"hasNextPage":4,"navigatePages":47,"navigatepageNums":48,"navigateFirstPage":44,"navigateLastPage":44},3,[11,25,35],{"slug":12,"title":13,"logo":7,"liveUrl":14,"prize":15,"sponsor":16,"description":17,"organizer":18,"startTime":19,"endTime":20,"registrationDeadline":21,"status":22,"dashboardVisibility":23,"createdAt":24},"spring2026","2026春季启元人工智能大赛","https:\u002F\u002Fwww.bilibili.com\u002Fblackboard\u002Flive\u002Flive-activity-player.html?cid=1822703816&quality=0","200,000","麒麟软件有限公司","“2026春季启元人工智能大赛”是由启元实验室主办的面向全国人工智能领域开发者、科研人员及高校学生的权威赛事。大赛旨在促进与培养具备工程实践能力和创新能力的优秀人工智能领域开发者、推广国产软硬件技术与生态、助力国家人工智能产业高质量发展。\n各参赛选手需在规定的比赛周期内，依据赛事规则选定赛题并完成相应挑战，优胜者将共同角逐总额20万元的赛事奖金池，并且还将有机会获得实习和知名企业优质岗位内推资格。","启元实验室","2026-04-19 16:00:00","2026-07-13 16:00:00","2026-06-16 16:00:00","ongoing","private","2026-04-16 08:00:00",{"slug":26,"title":27,"logo":7,"liveUrl":14,"prize":28,"sponsor":7,"description":29,"organizer":18,"startTime":30,"endTime":31,"registrationDeadline":32,"status":33,"dashboardVisibility":23,"createdAt":34},"autumn2025","2025秋季启元人工智能大赛","150,000","“2025秋季启元人工智能大赛”是由启元实验室主办的面向全国人工智能领域开发者、科研人员及高校学生的权威赛事。大赛旨在促进与培养具备工程实践能力和创新能力的优秀人工智能领域开发者、推广国产软硬件技术与生态、助力国家人工智能产业高质量发展。","2025-11-08 08:00:00","2026-01-13 08:00:00","2025-12-30 08:00:00","ended","2025-11-03 08:00:00",{"slug":36,"title":37,"logo":7,"liveUrl":14,"prize":38,"sponsor":7,"description":39,"organizer":18,"startTime":40,"endTime":41,"registrationDeadline":42,"status":33,"dashboardVisibility":23,"createdAt":43},"summer2025","启元人工智能大赛(系统方向)","80,000","启元人工智能大赛由启元实验室主办，其中系统赛道基于启元实验室九源软件栈的相关开源项目，通过拉动开源社区力量，一方面促进国产智能计算生态的发展，另一方面也为人工智能系统方向的学生及从业者提供一个实践平台。","2025-07-08 08:00:00","2025-08-25 08:00:00","2025-07-22 08:00:00","2025-06-22 08:00:00",1,5,true,8,[44],{"total":45,"list":50,"pageNum":44,"pageSize":45,"size":45,"startRow":44,"endRow":45,"pages":44,"prePage":6,"nextPage":6,"isFirstPage":46,"isLastPage":46,"hasPreviousPage":4,"hasNextPage":4,"navigatePages":47,"navigatepageNums":103,"navigateFirstPage":44,"navigateLastPage":44},[51,62,73,84,94],{"id":52,"slug":53,"title":54,"logo":55,"publicLiveEmbedUrl":14,"description":56,"introduction":57,"organizer":18,"coOrganizer":5,"sponsor":16,"startTime":58,"endTime":59,"status":22,"dashboardVisibility":60,"createdAt":58,"updatedAt":61},"019eeeff-6b00-7d55-a629-efafded3e232","summer2026","2026年夏季InfiniTensor大模型与人工智能系统训练营","https:\u002F\u002Foss.infinitensor.com\u002Fprod\u002Fuploads\u002F2026-06\u002F019eef7f-7816-7828-9309-79c2c61dd568.jpg?Expires=1792752839&OSSAccessKeyId=LTAI5t9R6uzvTa69CT92cFvV&Signature=mI4adTQzTPRyYrPmMuEsZWwmTNo%3D","由启元实验室发起的InfiniTensor大模型与人工智能系统训练营，面向开源社区、高校及产业界伙伴开放。活动以「普及AI全栈知识技术、培养工程实践与创新型人才、推广国产软硬件技术生态」为核心目标，助力国家人工智能产业高质量发展。","...","2026-06-22 08:00:00","2026-10-19 08:00:00","public","2026-10-12 08:00:00",{"id":63,"slug":64,"title":65,"logo":66,"publicLiveEmbedUrl":7,"description":67,"introduction":57,"organizer":18,"coOrganizer":5,"sponsor":68,"startTime":69,"endTime":70,"status":33,"dashboardVisibility":23,"createdAt":71,"updatedAt":72},"019af3f3-e06a-7245-aa8d-37dc99a69c73","winter2025","2025年冬季InfiniTensor大模型与人工智能系统训练营","https:\u002F\u002Foss.infinitensor.com\u002Fprod\u002Fuploads\u002F2025-12\u002F019afc69-b7ca-7805-91fb-605429671c01.png?Expires=1792752839&OSSAccessKeyId=LTAI5t9R6uzvTa69CT92cFvV&Signature=8YWKiH9EYPM3GQM%2F7JdCBPynFmw%3D","由启元实验室发起的InfiniTensor大模型与人工智能系统训练营，面向开源社区、高校及产业界伙伴开放。活动以「普及AI全栈知识技术、培养工程实践与创新型人才、推广国产软硬件技术生态」为核心目标，助力国家人工智能产业高质量发展。 \n","新华三技术有限公司","2025-12-25 08:00:00","2026-03-27 08:00:00","2025-12-06 08:00:00","2026-10-22 20:24:30",{"id":74,"slug":36,"title":75,"logo":76,"publicLiveEmbedUrl":7,"description":77,"introduction":57,"organizer":18,"coOrganizer":5,"sponsor":78,"startTime":79,"endTime":80,"status":81,"dashboardVisibility":23,"createdAt":82,"updatedAt":83},"01980342-208c-7803-b3f3-19e1d31960ba","2025年夏季InfiniTensor大模型与人工智能系统训练营","https:\u002F\u002Foss.infinitensor.com\u002Fprod\u002Fuploads\u002F2025-07\u002F0198045e-28fe-78f0-95fe-23835ce58395.jpg?Expires=1792752839&OSSAccessKeyId=LTAI5t9R6uzvTa69CT92cFvV&Signature=JY%2B%2B2oyU0ZlhO2Io1fpbwb5rDUc%3D","InfiniTensor大模型与人工智能系统训练营由启元实验室及清华大学 AI 系统方向团队发起，面向开源社区、高校和产业界，普及人工智能各方面知识和技术，培养相关人才。训练营联合开源项目开发者、学术界大牛、工业界资深工程师参与授课与项目指导。课程采用「线上直播授课 + 在线答疑 + 项目实践辅导 」的方式进行，确保每位同学都能获得充分成长。训练营全程免费，通过视频、直播课、习题和项目实践，在人工智能飞速发展的背景下，为学员提供一窥深层技术的机会。","北京积算科技有限公司","2025-07-14 08:00:00","2025-09-30 08:00:00","upcoming","2025-07-13 08:00:00","2026-10-22 20:24:58",{"id":85,"slug":86,"title":87,"logo":88,"publicLiveEmbedUrl":7,"description":89,"introduction":57,"organizer":18,"coOrganizer":5,"sponsor":5,"startTime":90,"endTime":91,"status":81,"dashboardVisibility":23,"createdAt":92,"updatedAt":93},"01980cf9-a7d8-7796-ae86-0bbe05334add","winter2024","2024年冬季InfiniTensor大模型与人工智能系统训练营","https:\u002F\u002Ftesting-cdn.infinitensor.com\u002Fuploads\u002F2025-07\u002F01981269-ce23-7624-a287-9f07dd0d85f6.jpg","InfiniTensor大模型与人工智能系统训练营由清华大学发起，面向开源社区、高校和产业界，普及人工智能各方面知识和技术，培养相关人才。训练营全程免费，通过视频、直播课、习题和项目实践，在人工智能飞速发展的背景下，为学员提供一窥深层技术的机会。报名学员请阅读“导学”课程页的训练营介绍。","2025-01-05 08:00:00","2025-03-22 08:00:00","2025-07-15 08:00:00","2026-10-22 20:24:39",{"id":95,"slug":96,"title":97,"logo":98,"publicLiveEmbedUrl":7,"description":99,"introduction":57,"organizer":18,"coOrganizer":5,"sponsor":5,"startTime":100,"endTime":101,"status":81,"dashboardVisibility":23,"createdAt":92,"updatedAt":102},"01980c20-363a-7dc3-8f5a-58a68e08dcc4","summer2024","2024年夏季InfiniTensor大模型与人工智能系统训练营","https:\u002F\u002Ftesting-cdn.infinitensor.com\u002Fuploads\u002F2025-07\u002F01981269-fbfa-788a-afcd-17fa9be74ff9.jpg","InfiniTensor大模型与人工智能系统训练营由清华大学发起，面向开源社区和高校，普及人工智能各方面知识和技术，培养相关人才。训练营全程免费，通过课程、习题和项目实践，在人工智能飞速发展的背景下，为学员提供一窥深层技术的机会。","2024-07-20 08:00:00","2024-09-29 08:00:00","2026-10-22 20:24:49",[44],{"currentItem":105,"processedData":125},{"img":106,"keywords":107,"treeType":44,"description":108,"showStatus":44,"updateTime":109,"type":110,"title":111,"content":112,"nextArticle":113,"createTime":109,"sortOrder":117,"canonicalPath":118,"id":119,"contentType":120,"prevArticle":121},"https:\u002F\u002Foss.infinitensor.com\u002Fprod\u002Fimages\u002FKnowledge_Base\u002FKB_57_fm.jpg?Expires=1792752839&OSSAccessKeyId=LTAI5t9R6uzvTa69CT92cFvV&Signature=CNJcE5%2F%2FenDlbMgIwQZsxwZQoL8%3D","Python 入门,InfiniTensor 训练营,Python 数据结构,Python 函数,正则表达式,Python 类与对象","2025 冬季 InfiniTensor 训练营推出 Python 入门课，面向零基础学员，讲解命令行操作、变量与数据类型、列表 \u002F 字典 \u002F 元组等数据结构、循环判断、正则表达式、函数及类与对象等 Python 核心基础。","2026-10-22 20:38:11",2,"2025 冬季 InfiniTensor 训练营｜Python 入门","![](https:\u002F\u002Foss.infinitensor.com\u002Fprod\u002Fimages\u002FKnowledge_Base\u002FKB_57_zw01.jpg?Expires=1792752839&OSSAccessKeyId=LTAI5t9R6uzvTa69CT92cFvV&Signature=3ByG%2FmIPlyWoGfPtA5HDcwq%2FAuw%3D)\r\n\r\n\u003Cspan style=\"font-size:14px;color:#777;\">本节课是面向零基础学员的 Python 入门课程。如果你已经学习过之前的 C++ 实践课，本节部分内容会有所重复，但课程仍会从基础角度重新讲解。\r\n无论是刚接触编程，还是有 C++ 基础想快速迁移技能学习 Python，这节课都适合你。\u003C\u002Fspan>\r\n\r\n## 命令行基础：学会跟电脑\"说话\"\r\n\r\n影视作品中，黑客电脑上出现的黑框框界面就是**命令行**，**是一种不用鼠标、用文字指令跟计算机交互的方式**。比图形界面（GUI）能做更多事情，也是编程必须掌握的工具。\r\n\r\n几个最常用的指令：\r\n\r\n- `ls`：列出当前文件夹中所有内容\r\n- `cd playground`：进入指定的文件夹（以 playground 为例）\r\n- `cd ~`：返回主目录\r\n- `mkdir magic`：创建新文件夹（以 magic 为例，mkdir 是 make directory 的缩写，directory 意为文件夹）\r\n\r\n## 代码编辑器与 Python 文件\r\n### 代码编辑器\r\n命令行里自带编辑器（如 vim、emacs），但现在更主流的是带有图形界面的编辑器——VS Code。装好后，在命令行输入 `code 文件夹名`，就能用 VS Code 打开指定文件夹。\r\n\r\n### Python 文件后缀\r\nPython 文件的后缀是 `.py`，原理和 Word 的 `.doc`、Excel 的 `.xlsx` 一样——**操作系统通过文件后缀识别部分文件类型，千万别随便改后缀**，改了系统可能无法正确识别文件。\r\n\r\n## print 输出与 Python 运行机制\r\n### 第一个 Python 程序\r\n在新建的 `.py` 文件中，调用 `print` 函数，传入字符串 `hello world`，即可在命令行中打印输出内容。交互分为输入和输出两部分，此处属于输出操作。\r\n\r\n```python\r\n# main.py\r\nprint(\"hello world\")\r\n```\r\n在命令行输入 `python main.py`，即可执行，屏幕上会打印出 `hello world`。前提是你的电脑已经装好了 Python。\r\n\r\n### 编译型语言与解释型语言\r\n编程语言可以粗略分为两类：编译型语言和解释型语言。\r\n\r\n- **C\u002FC++ 是编译型**：代码要先经过编译器编译成二进制文件，才能运行。**优点是快，缺点是写起来麻烦**。打印 `hello world` 要引入头文件、写 `main` 函数、用 `std::cout`……\r\n- **Python 通常被归类为解释型语言**：以 CPython 为例，源代码会先编译为字节码，再由 Python 虚拟机执行。\r\n\r\n不过现在界限已经没那么绝对了。很多解释型语言引入了 **JIT**（即时编译） 机制——会在程序运行过程中识别频繁执行的热点代码，并将其编译为机器码，从而减少后续执行这些代码时的开销。\r\n\r\n## 变量与数据类型\r\nPython 中的变量无需声明类型，直接使用赋值语句即可定义。\r\n\r\n在 C++ 里，需要先声明类型 `int x = 0;`，但在 Python 里，直接 `x = 0` 搞定\r\n\r\n>如果直接打印一个没定义过的变量，解释器会报错：`name 'x' is not defined`。先赋值，后使用。\r\n\r\n```python\r\nx = 0        # 赋值为整数\r\nprint(x)     # 输出：0\r\n\r\nx = 3.14     # 赋值为浮点数，完全没问题\r\nprint(x)     # 输出：3.14\r\n```\r\n这就是**动态类型**——变量本质上只是一个\"名字\"，可以绑定到任意对象上。x 最初被赋值为整数 0，随后也可以被赋值为浮点数 3.14，而不会报错。Python 里所有数据都是对象（object），变量是对象的引用，解释器自动处理类型。\r\n\r\n>动态类型的特性使得编程更加灵活，但运行时要额外处理类型的动态变化，所以运行速度不如 C++ 这种静态类型语言快。\r\n\r\n## 数据结构\r\n\r\n| 结构 | Python | C++ 对应 | 特点 |\r\n| --- | --- | --- | --- |\r\n| 列表 | `list` | `vector` | 动态数组，可增删改 |\r\n| 字典 | `dict` | `unordered_map` | 存储键值对（key-value pair） |\r\n| 元组 | `tuple` | 无直接对应 | 不可变，创建后不能改 |\r\n\r\n### 列表（List）\r\n使用**方括号**创建，比 C++ 中的 `vector` 更加丰富，例如 `append`（对应 C++ 的 `push_back`）用于在列表末尾添加元素：\r\n\r\n```Python\r\n# 创建空列表\r\nx = []\r\n\r\n# 向列表添加元素\r\nx.append(1)\r\nx.append(3)\r\nprint(x)  # 输出：[1, 3]\r\n```\r\n\r\n### 字典（Dictionary \u002F dict）\r\n使用**花括号**创建，通过冒号建立键与值之间的对应关系,通过键来查找对应的值：\r\n\r\n```Python\r\n# 创建字典：人名对应年龄\r\nages = {\"Mike\": 21, \"Alice\": 23}\r\nprint(ages[\"Mike\"])   # 输出：21\r\nprint(ages[\"Alice\"])  # 输出：23\r\n```\r\n\r\n### 元组（Tuple）\r\n使用**小括号**创建，元组是不可变类型（immutable），创建之后无法修改；而列表是可变类型，可以动态添加或删除元素。\r\n\r\n```Python\r\n# 创建元组\r\nx = (1, 2, 3)\r\n\r\n# 创建列表\r\ny = [1, 2, 3]\r\n\r\n# 列表可以调用 append 方法\r\ny.append(4)\r\nprint(y)         # 输出：[1, 2, 3, 4]\r\n\r\n# 元组没有 append 方法\r\n# x.append(4)    # 会报错\r\n```\r\n\r\n不可变类型（如元组）可以当字典的键（key），可变类型（如列表）不行。 因为 key 必须不可变，键的对象放入字典后被修改，会导致键的查找失败。**写代码时优先用不可变类型**，能减少很多因误修改数据引发的 bug。\r\n\r\n\r\n## 循环与条件判断\r\n### while 循环\r\n`while` 循环在条件为真时重复执行代码块。**Python 中的 True 和 False 首字母大写**，这是与 C++（小写 true \u002F false）的一个区别。\r\n\r\n```Python\r\n# while 循环示例\r\nwhile True:\r\n    line = input(\"请输入：\")\r\n    print(line)\r\n```\r\n\r\n### 缩进（Indentation）\r\nPython 通过缩进来划分代码块，不需要使用花括号。官方推荐的**缩进方式是 4 个空格**。在同一缩进层级中的代码属于同一个代码块。\r\n\r\n```Python\r\nwhile True:\r\n    line = input(\"请输入：\")\r\n    if line == \"1\":\r\n        print(\"one\")\r\n    else:\r\n        print(line)\r\n```\r\n>⚠️Python 的 `while`、`if` 等后面不加括号，但需要使用冒号（:），然后通过缩进来组织代码块结构。\r\n\r\n### for 循环\r\n`for` 循环用于遍历序列中的每一个元素，语法接近自然语言，非常简洁。\r\n\r\n```Python\r\n# for 循环遍历列表\r\nx = [1, 3, 5, 7, 9]\r\nfor item in x:\r\n    print(item)\r\n```\r\n\r\n## 正则表达式与字符串处理\r\n### 正则表达式（re）\r\nPython 标准库的 `re` 模块提供正则表达式支持，通过一个字符串模式来描述需要匹配的内容，常用于字符串的查找、替换和拆分操作。类似于 Word 文档中的“查找替换”，但功能更加强大。\r\n\r\n### 字符串拆分示例\r\n比如要拆分一个输入字符串 (1+1)，可以用正则表达式拆出括号、加号和数字，某些字符具有特殊含义（如括号表示捕获组），如果需要匹配这些字符本身，需要使用反斜杠（）进行转义：\r\n\r\n```Python\r\nimport re\r\n\r\nline = input(\"请输入表达式：\")\r\n\r\n# 使用正则表达式拆分字符串\r\n# \\( 匹配左括号，\\+ 匹配加号，) 匹配右括号\r\n# | 表示「或」\r\npattern = r\"((|\\+|[0-9]+|))\"\r\n\r\ntokens = re.split(pattern, line)\r\nprint(tokens)\r\n```\r\n>在 Python 字符串前加 r（raw string）可以避免反斜杠被当作转义字符处理，是编写正则表达式时的常用写法。\r\n\r\n### 字符串格式化（f-string）\r\nPython 支持多种字符串格式化方式，其中 `f-string`（格式化字符串字面值）是最简洁的一种。在字符串前加上字母 f，即可在字符串中直接嵌入变量或表达式，使用花括号括起来。\r\n\r\n```Python\r\nx = 1\r\n\r\n# 使用 f-string 格式化字符串\r\nresult = f\"x等于{x}\"\r\nprint(result)  # 输出：x等于1\r\n```\r\n\r\n### list comprehension\r\n**列表推导式**（list comprehension）是 Python 中一种简洁的列表构造方式，可以在一行代码中完成列表的创建和过滤操作。\r\n\r\n```Python\r\nimport re\r\n\r\nline = \"(1+1)\"\r\npattern = r\"((|\\+|[0-9]+|))\"\r\n\r\n# 列表推导式：过滤空字符串，构造 tokens 列表\r\ntokens = [token for token in re.split(pattern, line) if token.strip()]\r\nprint(tokens)  # 输出：['(', '1', '+', '1', ')']\r\n```\r\n\r\n## 函数定义\r\n用 `def` 关键字定义函数，把逻辑封装起来。传入一个字符串，返回拆分后的 `token` 列表。\r\n\r\n```Python\r\nimport re\r\n\r\ndef tokenize(line):\r\n    pattern = r\"((|\\+|[0-9]+|))\"\r\n    tokens = [token for token in re.split(pattern, line) if token.strip()]\r\n    return tokens\r\n\r\nresult = tokenize(\"(1+1)\")\r\nprint(result)  # 输出：['(', '1', '+', '1', ')']\r\n```\r\n在此基础上可以实现简单的表达式计算：\r\n\r\n```Python\r\ndef calculate(line):\r\n    tokens = tokenize(line)\r\n    if tokens[1] == \"+\":\r\n        result = float(tokens[0]) + float(tokens[2])\r\n    elif tokens[1] == \"-\":\r\n        result = float(tokens[0]) - float(tokens[2])\r\n    else:\r\n        result = None\r\n    return result\r\n\r\nprint(calculate(\"3.14-2\"))\r\n```\r\n\r\n> ⚠️在解释器交互模式下改了代码，可以通过重新执行函数或类的定义来更新代码。\r\n\r\n\r\n## 类与对象\r\n### 类的定义\r\n用 `class` 关键字定义类。如果类体暂时为空，必须用 `pass` 占位，否则会报错（函数定义也是如此，空函数体同样需要 pass 语句）：\r\n\r\n```Python\r\n# 定义一个空的 Animal 类\r\nclass Animal:\r\n    pass\r\n\r\n# 定义有内容的类\r\nclass Animal:\r\n    def __str__(self):\r\n        return \"Animal\"\r\n\r\n    def speak(self):\r\n        pass  # 占位，暂不实现\r\n```\r\n\r\n### 继承\r\nPython 支持类的继承。子类在定义时将父类放在括号中，即可继承父类的属性和方法。如果子类中定义了与父类同名的方法，则子类的方法会覆盖（override）父类的方法。\r\n\r\n```Python\r\n# Animal 类\r\nclass Animal:\r\n    def __str__(self):\r\n        return \"Animal\"\r\n    def speak(self):\r\n        pass\r\n\r\n# Cat 类，继承自 Animal\r\nclass Cat(Animal):\r\n    def __str__(self):\r\n        return \"Cat\"\r\n    def speak(self):\r\n        return \"Meow\"\r\n\r\ncat = Cat()\r\nprint(cat)          # 输出：Cat（调用了子类覆盖后的 __str__）\r\nprint(cat.speak())  # 输出：Meow\r\n```\r\n\r\n### 魔术方法（Magic Method）\r\n魔术方法（或特殊方法）是以双下划线开头和结尾，如 `__str__`，是 Python 对象预定义的方法，会在特定场景下自动调用。。`print()` 时 Python 会自动调用该对象的 `__str__`方法，将其转成字符串再输出。\r\n\r\n\r\n## 注释：写给人看的代码说明\r\n以井号（`#`）开头，从井号开始到行尾的内容都会被解释器忽略。注释是给人看的，用于说明代码的含义。这与 C++ 中使用 `\u002F\u002F` 添加单行注释是类似的作用。\r\n```Python\r\n# 这是一个注释\r\n# 注释的内容解释器不会执行\r\n\r\nx = 42  # 行内注释：给变量 x 赋值为 42\r\n```\r\n\r\n## 课程总结\r\n本节课介绍了 Python 编程的基础知识，涵盖以下内容：\r\n- **变量**：无需声明类型，直接赋值即可定义。\r\n- **输入与输出**：`input()` 函数用于获取用户输入，`print()` 函数用于输出内容。\r\n- **字符串**：字符串的基本操作以及格式化方法（`f-string`）。\r\n- **函数的定义**：使用 `def` 关键字定义函数，使用 `return` 返回值。\r\n- **数据结构**：列表（`list`）、元组（`tuple`）、字典（`dict`）的特点与使用方法。\r\n- **循环与判断**：`while` 循环、`for` 循环、`if` 条件判断的语法结构。\r\n- **正则表达式**：使用 `re` 模块进行字符串的匹配与拆分。\r\n- **类与对象**：类的定义、继承机制、魔术方法（如 `__str__`）的作用。\r\n- **注释**：使用井号（`#`）添加代码注释。\r\n\r\nPython 的语言特性远不止于此。Python 拥有非常庞大的标准库和第三方库生态，许多库的内容需要单独学习，无法在一节课中全部介绍。\r\n\r\n建议在学习完基础语法后，根据自己的方向（如数据分析、Web 开发、人工智能等）继续深入学习相关的库和框架。\r\n\r\n## 更多课程细节查看\r\n本次课程回放可访问 InfiniTensor 官网：https:\u002F\u002Fwww.infinitensor.com 查看，或点击 **【阅读原文】** 跳转至 InfiniTensor 官网。\r\n\r\n>觉得有用就转发给也在学 Python 的朋友吧！\r\n📢**新一期训练营也将于近期开启报名**，欢迎关注公众号，第一时间获取课程与报名信息\r\n\r\n## 关注与交流\r\n![](https:\u002F\u002Foss.infinitensor.com\u002Fprod\u002Fimages\u002Fportal_news\u002Fnews_ewm02.jpg?Expires=1792752839&OSSAccessKeyId=LTAI5t9R6uzvTa69CT92cFvV&Signature=XFWVl4UMEW2H5Tflh0hUKDLyUVI%3D)",{"publishTime":7,"createTime":109,"canonicalPath":114,"id":115,"title":116},"\u002Fstudy-material\u002Fstudy-56","study-56","2025 冬季 InfiniTensor 训练营｜C++ 实践课（三）",52,"\u002Fstudy-material\u002Fstudy-57","study-57","markdown",{"publishTime":7,"createTime":109,"canonicalPath":122,"id":123,"title":124},"\u002Fstudy-material\u002Fstudy-58","study-58","2026 夏季 InfiniTensor 训练营 CUDA 编程 1：并行编程导论与 CUDA 入门",{"htmlContent":126,"headings":127},"\u003Cp>\u003Cimg src=\"https:\u002F\u002Foss.infinitensor.com\u002Fprod\u002Fimages\u002FKnowledge_Base\u002FKB_57_zw01.jpg?Expires=1792752839&OSSAccessKeyId=LTAI5t9R6uzvTa69CT92cFvV&Signature=3ByG%2FmIPlyWoGfPtA5HDcwq%2FAuw%3D\" alt=\"\">\u003C\u002Fp>\n\u003Cp>\u003Cspan style=\"font-size:14px;color:#777;\">本节课是面向零基础学员的 Python 入门课程。如果你已经学习过之前的 C++ 实践课，本节部分内容会有所重复，但课程仍会从基础角度重新讲解。\u003Cbr>无论是刚接触编程，还是有 C++ 基础想快速迁移技能学习 Python，这节课都适合你。\u003C\u002Fspan>\u003C\u002Fp>\n\u003Ch2 id=\"命令行基础-学会跟电脑-quot-说话-quot\">\u003Ca class=\"anchor\" href=\"#命令行基础-学会跟电脑-quot-说话-quot\" aria-label=\"跳转到标题：命令行基础：学会跟电脑&amp;quot;说话&amp;quot;\">\u003Cspan class=\"octicon octicon-link\">\u003C\u002Fspan>\u003C\u002Fa>命令行基础：学会跟电脑&quot;说话&quot;\u003C\u002Fh2>\u003Cp>影视作品中，黑客电脑上出现的黑框框界面就是\u003Cstrong>命令行\u003C\u002Fstrong>，\u003Cstrong>是一种不用鼠标、用文字指令跟计算机交互的方式\u003C\u002Fstrong>。比图形界面（GUI）能做更多事情，也是编程必须掌握的工具。\u003C\u002Fp>\n\u003Cp>几个最常用的指令：\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>ls\u003C\u002Fcode>：列出当前文件夹中所有内容\u003C\u002Fli>\n\u003Cli>\u003Ccode>cd playground\u003C\u002Fcode>：进入指定的文件夹（以 playground 为例）\u003C\u002Fli>\n\u003Cli>\u003Ccode>cd ~\u003C\u002Fcode>：返回主目录\u003C\u002Fli>\n\u003Cli>\u003Ccode>mkdir magic\u003C\u002Fcode>：创建新文件夹（以 magic 为例，mkdir 是 make directory 的缩写，directory 意为文件夹）\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"代码编辑器与-python-文件\">\u003Ca class=\"anchor\" href=\"#代码编辑器与-python-文件\" aria-label=\"跳转到标题：代码编辑器与 Python 文件\">\u003Cspan class=\"octicon octicon-link\">\u003C\u002Fspan>\u003C\u002Fa>代码编辑器与 Python 文件\u003C\u002Fh2>\u003Ch3 id=\"代码编辑器\">\u003Ca class=\"anchor\" href=\"#代码编辑器\" aria-label=\"跳转到标题：代码编辑器\">\u003Cspan class=\"octicon octicon-link\">\u003C\u002Fspan>\u003C\u002Fa>代码编辑器\u003C\u002Fh3>\u003Cp>命令行里自带编辑器（如 vim、emacs），但现在更主流的是带有图形界面的编辑器——VS Code。装好后，在命令行输入 \u003Ccode>code 文件夹名\u003C\u002Fcode>，就能用 VS Code 打开指定文件夹。\u003C\u002Fp>\n\u003Ch3 id=\"python-文件后缀\">\u003Ca class=\"anchor\" href=\"#python-文件后缀\" aria-label=\"跳转到标题：Python 文件后缀\">\u003Cspan class=\"octicon octicon-link\">\u003C\u002Fspan>\u003C\u002Fa>Python 文件后缀\u003C\u002Fh3>\u003Cp>Python 文件的后缀是 \u003Ccode>.py\u003C\u002Fcode>，原理和 Word 的 \u003Ccode>.doc\u003C\u002Fcode>、Excel 的 \u003Ccode>.xlsx\u003C\u002Fcode> 一样——\u003Cstrong>操作系统通过文件后缀识别部分文件类型，千万别随便改后缀\u003C\u002Fstrong>，改了系统可能无法正确识别文件。\u003C\u002Fp>\n\u003Ch2 id=\"print-输出与-python-运行机制\">\u003Ca class=\"anchor\" href=\"#print-输出与-python-运行机制\" aria-label=\"跳转到标题：print 输出与 Python 运行机制\">\u003Cspan class=\"octicon octicon-link\">\u003C\u002Fspan>\u003C\u002Fa>print 输出与 Python 运行机制\u003C\u002Fh2>\u003Ch3 id=\"第一个-python-程序\">\u003Ca class=\"anchor\" href=\"#第一个-python-程序\" aria-label=\"跳转到标题：第一个 Python 程序\">\u003Cspan class=\"octicon octicon-link\">\u003C\u002Fspan>\u003C\u002Fa>第一个 Python 程序\u003C\u002Fh3>\u003Cp>在新建的 \u003Ccode>.py\u003C\u002Fcode> 文件中，调用 \u003Ccode>print\u003C\u002Fcode> 函数，传入字符串 \u003Ccode>hello world\u003C\u002Fcode>，即可在命令行中打印输出内容。交互分为输入和输出两部分，此处属于输出操作。\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-python\"># main.py\nprint(&quot;hello world&quot;)\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>在命令行输入 \u003Ccode>python main.py\u003C\u002Fcode>，即可执行，屏幕上会打印出 \u003Ccode>hello world\u003C\u002Fcode>。前提是你的电脑已经装好了 Python。\u003C\u002Fp>\n\u003Ch3 id=\"编译型语言与解释型语言\">\u003Ca class=\"anchor\" href=\"#编译型语言与解释型语言\" aria-label=\"跳转到标题：编译型语言与解释型语言\">\u003Cspan class=\"octicon octicon-link\">\u003C\u002Fspan>\u003C\u002Fa>编译型语言与解释型语言\u003C\u002Fh3>\u003Cp>编程语言可以粗略分为两类：编译型语言和解释型语言。\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>C\u002FC++ 是编译型\u003C\u002Fstrong>：代码要先经过编译器编译成二进制文件，才能运行。\u003Cstrong>优点是快，缺点是写起来麻烦\u003C\u002Fstrong>。打印 \u003Ccode>hello world\u003C\u002Fcode> 要引入头文件、写 \u003Ccode>main\u003C\u002Fcode> 函数、用 \u003Ccode>std::cout\u003C\u002Fcode>……\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Python 通常被归类为解释型语言\u003C\u002Fstrong>：以 CPython 为例，源代码会先编译为字节码，再由 Python 虚拟机执行。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>不过现在界限已经没那么绝对了。很多解释型语言引入了 \u003Cstrong>JIT\u003C\u002Fstrong>（即时编译） 机制——会在程序运行过程中识别频繁执行的热点代码，并将其编译为机器码，从而减少后续执行这些代码时的开销。\u003C\u002Fp>\n\u003Ch2 id=\"变量与数据类型\">\u003Ca class=\"anchor\" href=\"#变量与数据类型\" aria-label=\"跳转到标题：变量与数据类型\">\u003Cspan class=\"octicon octicon-link\">\u003C\u002Fspan>\u003C\u002Fa>变量与数据类型\u003C\u002Fh2>\u003Cp>Python 中的变量无需声明类型，直接使用赋值语句即可定义。\u003C\u002Fp>\n\u003Cp>在 C++ 里，需要先声明类型 \u003Ccode>int x = 0;\u003C\u002Fcode>，但在 Python 里，直接 \u003Ccode>x = 0\u003C\u002Fcode> 搞定\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>如果直接打印一个没定义过的变量，解释器会报错：\u003Ccode>name &#39;x&#39; is not defined\u003C\u002Fcode>。先赋值，后使用。\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cpre>\u003Ccode class=\"language-python\">x = 0        # 赋值为整数\nprint(x)     # 输出：0\n\nx = 3.14     # 赋值为浮点数，完全没问题\nprint(x)     # 输出：3.14\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>这就是\u003Cstrong>动态类型\u003C\u002Fstrong>——变量本质上只是一个&quot;名字&quot;，可以绑定到任意对象上。x 最初被赋值为整数 0，随后也可以被赋值为浮点数 3.14，而不会报错。Python 里所有数据都是对象（object），变量是对象的引用，解释器自动处理类型。\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>动态类型的特性使得编程更加灵活，但运行时要额外处理类型的动态变化，所以运行速度不如 C++ 这种静态类型语言快。\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Ch2 id=\"数据结构\">\u003Ca class=\"anchor\" href=\"#数据结构\" aria-label=\"跳转到标题：数据结构\">\u003Cspan class=\"octicon octicon-link\">\u003C\u002Fspan>\u003C\u002Fa>数据结构\u003C\u002Fh2>\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>结构\u003C\u002Fth>\n\u003Cth>Python\u003C\u002Fth>\n\u003Cth>C++ 对应\u003C\u002Fth>\n\u003Cth>特点\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>列表\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>list\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>vector\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>动态数组，可增删改\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>字典\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>dict\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>unordered_map\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>存储键值对（key-value pair）\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>元组\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>tuple\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>无直接对应\u003C\u002Ftd>\n\u003Ctd>不可变，创建后不能改\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Ch3 id=\"列表-list\">\u003Ca class=\"anchor\" href=\"#列表-list\" aria-label=\"跳转到标题：列表（List）\">\u003Cspan class=\"octicon octicon-link\">\u003C\u002Fspan>\u003C\u002Fa>列表（List）\u003C\u002Fh3>\u003Cp>使用\u003Cstrong>方括号\u003C\u002Fstrong>创建，比 C++ 中的 \u003Ccode>vector\u003C\u002Fcode> 更加丰富，例如 \u003Ccode>append\u003C\u002Fcode>（对应 C++ 的 \u003Ccode>push_back\u003C\u002Fcode>）用于在列表末尾添加元素：\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-Python\"># 创建空列表\nx = []\n\n# 向列表添加元素\nx.append(1)\nx.append(3)\nprint(x)  # 输出：[1, 3]\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3 id=\"字典-dictionary-dict\">\u003Ca class=\"anchor\" href=\"#字典-dictionary-dict\" aria-label=\"跳转到标题：字典（Dictionary \u002F dict）\">\u003Cspan class=\"octicon octicon-link\">\u003C\u002Fspan>\u003C\u002Fa>字典（Dictionary \u002F dict）\u003C\u002Fh3>\u003Cp>使用\u003Cstrong>花括号\u003C\u002Fstrong>创建，通过冒号建立键与值之间的对应关系,通过键来查找对应的值：\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-Python\"># 创建字典：人名对应年龄\nages = {&quot;Mike&quot;: 21, &quot;Alice&quot;: 23}\nprint(ages[&quot;Mike&quot;])   # 输出：21\nprint(ages[&quot;Alice&quot;])  # 输出：23\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3 id=\"元组-tuple\">\u003Ca class=\"anchor\" href=\"#元组-tuple\" aria-label=\"跳转到标题：元组（Tuple）\">\u003Cspan class=\"octicon octicon-link\">\u003C\u002Fspan>\u003C\u002Fa>元组（Tuple）\u003C\u002Fh3>\u003Cp>使用\u003Cstrong>小括号\u003C\u002Fstrong>创建，元组是不可变类型（immutable），创建之后无法修改；而列表是可变类型，可以动态添加或删除元素。\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-Python\"># 创建元组\nx = (1, 2, 3)\n\n# 创建列表\ny = [1, 2, 3]\n\n# 列表可以调用 append 方法\ny.append(4)\nprint(y)         # 输出：[1, 2, 3, 4]\n\n# 元组没有 append 方法\n# x.append(4)    # 会报错\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>不可变类型（如元组）可以当字典的键（key），可变类型（如列表）不行。 因为 key 必须不可变，键的对象放入字典后被修改，会导致键的查找失败。\u003Cstrong>写代码时优先用不可变类型\u003C\u002Fstrong>，能减少很多因误修改数据引发的 bug。\u003C\u002Fp>\n\u003Ch2 id=\"循环与条件判断\">\u003Ca class=\"anchor\" href=\"#循环与条件判断\" aria-label=\"跳转到标题：循环与条件判断\">\u003Cspan class=\"octicon octicon-link\">\u003C\u002Fspan>\u003C\u002Fa>循环与条件判断\u003C\u002Fh2>\u003Ch3 id=\"while-循环\">\u003Ca class=\"anchor\" href=\"#while-循环\" aria-label=\"跳转到标题：while 循环\">\u003Cspan class=\"octicon octicon-link\">\u003C\u002Fspan>\u003C\u002Fa>while 循环\u003C\u002Fh3>\u003Cp>\u003Ccode>while\u003C\u002Fcode> 循环在条件为真时重复执行代码块。\u003Cstrong>Python 中的 True 和 False 首字母大写\u003C\u002Fstrong>，这是与 C++（小写 true \u002F false）的一个区别。\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-Python\"># while 循环示例\nwhile True:\n    line = input(&quot;请输入：&quot;)\n    print(line)\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3 id=\"缩进-indentation\">\u003Ca class=\"anchor\" href=\"#缩进-indentation\" aria-label=\"跳转到标题：缩进（Indentation）\">\u003Cspan class=\"octicon octicon-link\">\u003C\u002Fspan>\u003C\u002Fa>缩进（Indentation）\u003C\u002Fh3>\u003Cp>Python 通过缩进来划分代码块，不需要使用花括号。官方推荐的\u003Cstrong>缩进方式是 4 个空格\u003C\u002Fstrong>。在同一缩进层级中的代码属于同一个代码块。\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-Python\">while True:\n    line = input(&quot;请输入：&quot;)\n    if line == &quot;1&quot;:\n        print(&quot;one&quot;)\n    else:\n        print(line)\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cblockquote>\n\u003Cp>⚠️Python 的 \u003Ccode>while\u003C\u002Fcode>、\u003Ccode>if\u003C\u002Fcode> 等后面不加括号，但需要使用冒号（:），然后通过缩进来组织代码块结构。\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Ch3 id=\"for-循环\">\u003Ca class=\"anchor\" href=\"#for-循环\" aria-label=\"跳转到标题：for 循环\">\u003Cspan class=\"octicon octicon-link\">\u003C\u002Fspan>\u003C\u002Fa>for 循环\u003C\u002Fh3>\u003Cp>\u003Ccode>for\u003C\u002Fcode> 循环用于遍历序列中的每一个元素，语法接近自然语言，非常简洁。\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-Python\"># for 循环遍历列表\nx = [1, 3, 5, 7, 9]\nfor item in x:\n    print(item)\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2 id=\"正则表达式与字符串处理\">\u003Ca class=\"anchor\" href=\"#正则表达式与字符串处理\" aria-label=\"跳转到标题：正则表达式与字符串处理\">\u003Cspan class=\"octicon octicon-link\">\u003C\u002Fspan>\u003C\u002Fa>正则表达式与字符串处理\u003C\u002Fh2>\u003Ch3 id=\"正则表达式-re\">\u003Ca class=\"anchor\" href=\"#正则表达式-re\" aria-label=\"跳转到标题：正则表达式（re）\">\u003Cspan class=\"octicon octicon-link\">\u003C\u002Fspan>\u003C\u002Fa>正则表达式（re）\u003C\u002Fh3>\u003Cp>Python 标准库的 \u003Ccode>re\u003C\u002Fcode> 模块提供正则表达式支持，通过一个字符串模式来描述需要匹配的内容，常用于字符串的查找、替换和拆分操作。类似于 Word 文档中的“查找替换”，但功能更加强大。\u003C\u002Fp>\n\u003Ch3 id=\"字符串拆分示例\">\u003Ca class=\"anchor\" href=\"#字符串拆分示例\" aria-label=\"跳转到标题：字符串拆分示例\">\u003Cspan class=\"octicon octicon-link\">\u003C\u002Fspan>\u003C\u002Fa>字符串拆分示例\u003C\u002Fh3>\u003Cp>比如要拆分一个输入字符串 (1+1)，可以用正则表达式拆出括号、加号和数字，某些字符具有特殊含义（如括号表示捕获组），如果需要匹配这些字符本身，需要使用反斜杠（）进行转义：\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-Python\">import re\n\nline = input(&quot;请输入表达式：&quot;)\n\n# 使用正则表达式拆分字符串\n# \\( 匹配左括号，\\+ 匹配加号，) 匹配右括号\n# | 表示「或」\npattern = r&quot;((|\\+|[0-9]+|))&quot;\n\ntokens = re.split(pattern, line)\nprint(tokens)\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cblockquote>\n\u003Cp>在 Python 字符串前加 r（raw string）可以避免反斜杠被当作转义字符处理，是编写正则表达式时的常用写法。\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Ch3 id=\"字符串格式化-f-string\">\u003Ca class=\"anchor\" href=\"#字符串格式化-f-string\" aria-label=\"跳转到标题：字符串格式化（f-string）\">\u003Cspan class=\"octicon octicon-link\">\u003C\u002Fspan>\u003C\u002Fa>字符串格式化（f-string）\u003C\u002Fh3>\u003Cp>Python 支持多种字符串格式化方式，其中 \u003Ccode>f-string\u003C\u002Fcode>（格式化字符串字面值）是最简洁的一种。在字符串前加上字母 f，即可在字符串中直接嵌入变量或表达式，使用花括号括起来。\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-Python\">x = 1\n\n# 使用 f-string 格式化字符串\nresult = f&quot;x等于{x}&quot;\nprint(result)  # 输出：x等于1\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3 id=\"list-comprehension\">\u003Ca class=\"anchor\" href=\"#list-comprehension\" aria-label=\"跳转到标题：list comprehension\">\u003Cspan class=\"octicon octicon-link\">\u003C\u002Fspan>\u003C\u002Fa>list comprehension\u003C\u002Fh3>\u003Cp>\u003Cstrong>列表推导式\u003C\u002Fstrong>（list comprehension）是 Python 中一种简洁的列表构造方式，可以在一行代码中完成列表的创建和过滤操作。\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-Python\">import re\n\nline = &quot;(1+1)&quot;\npattern = r&quot;((|\\+|[0-9]+|))&quot;\n\n# 列表推导式：过滤空字符串，构造 tokens 列表\ntokens = [token for token in re.split(pattern, line) if token.strip()]\nprint(tokens)  # 输出：[&#39;(&#39;, &#39;1&#39;, &#39;+&#39;, &#39;1&#39;, &#39;)&#39;]\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2 id=\"函数定义\">\u003Ca class=\"anchor\" href=\"#函数定义\" aria-label=\"跳转到标题：函数定义\">\u003Cspan class=\"octicon octicon-link\">\u003C\u002Fspan>\u003C\u002Fa>函数定义\u003C\u002Fh2>\u003Cp>用 \u003Ccode>def\u003C\u002Fcode> 关键字定义函数，把逻辑封装起来。传入一个字符串，返回拆分后的 \u003Ccode>token\u003C\u002Fcode> 列表。\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-Python\">import re\n\ndef tokenize(line):\n    pattern = r&quot;((|\\+|[0-9]+|))&quot;\n    tokens = [token for token in re.split(pattern, line) if token.strip()]\n    return tokens\n\nresult = tokenize(&quot;(1+1)&quot;)\nprint(result)  # 输出：[&#39;(&#39;, &#39;1&#39;, &#39;+&#39;, &#39;1&#39;, &#39;)&#39;]\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>在此基础上可以实现简单的表达式计算：\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-Python\">def calculate(line):\n    tokens = tokenize(line)\n    if tokens[1] == &quot;+&quot;:\n        result = float(tokens[0]) + float(tokens[2])\n    elif tokens[1] == &quot;-&quot;:\n        result = float(tokens[0]) - float(tokens[2])\n    else:\n        result = None\n    return result\n\nprint(calculate(&quot;3.14-2&quot;))\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cblockquote>\n\u003Cp>⚠️在解释器交互模式下改了代码，可以通过重新执行函数或类的定义来更新代码。\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Ch2 id=\"类与对象\">\u003Ca class=\"anchor\" href=\"#类与对象\" aria-label=\"跳转到标题：类与对象\">\u003Cspan class=\"octicon octicon-link\">\u003C\u002Fspan>\u003C\u002Fa>类与对象\u003C\u002Fh2>\u003Ch3 id=\"类的定义\">\u003Ca class=\"anchor\" href=\"#类的定义\" aria-label=\"跳转到标题：类的定义\">\u003Cspan class=\"octicon octicon-link\">\u003C\u002Fspan>\u003C\u002Fa>类的定义\u003C\u002Fh3>\u003Cp>用 \u003Ccode>class\u003C\u002Fcode> 关键字定义类。如果类体暂时为空，必须用 \u003Ccode>pass\u003C\u002Fcode> 占位，否则会报错（函数定义也是如此，空函数体同样需要 pass 语句）：\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-Python\"># 定义一个空的 Animal 类\nclass Animal:\n    pass\n\n# 定义有内容的类\nclass Animal:\n    def __str__(self):\n        return &quot;Animal&quot;\n\n    def speak(self):\n        pass  # 占位，暂不实现\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3 id=\"继承\">\u003Ca class=\"anchor\" href=\"#继承\" aria-label=\"跳转到标题：继承\">\u003Cspan class=\"octicon octicon-link\">\u003C\u002Fspan>\u003C\u002Fa>继承\u003C\u002Fh3>\u003Cp>Python 支持类的继承。子类在定义时将父类放在括号中，即可继承父类的属性和方法。如果子类中定义了与父类同名的方法，则子类的方法会覆盖（override）父类的方法。\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-Python\"># Animal 类\nclass Animal:\n    def __str__(self):\n        return &quot;Animal&quot;\n    def speak(self):\n        pass\n\n# Cat 类，继承自 Animal\nclass Cat(Animal):\n    def __str__(self):\n        return &quot;Cat&quot;\n    def speak(self):\n        return &quot;Meow&quot;\n\ncat = Cat()\nprint(cat)          # 输出：Cat（调用了子类覆盖后的 __str__）\nprint(cat.speak())  # 输出：Meow\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3 id=\"魔术方法-magic-method\">\u003Ca class=\"anchor\" href=\"#魔术方法-magic-method\" aria-label=\"跳转到标题：魔术方法（Magic Method）\">\u003Cspan class=\"octicon octicon-link\">\u003C\u002Fspan>\u003C\u002Fa>魔术方法（Magic Method）\u003C\u002Fh3>\u003Cp>魔术方法（或特殊方法）是以双下划线开头和结尾，如 \u003Ccode>__str__\u003C\u002Fcode>，是 Python 对象预定义的方法，会在特定场景下自动调用。。\u003Ccode>print()\u003C\u002Fcode> 时 Python 会自动调用该对象的 \u003Ccode>__str__\u003C\u002Fcode>方法，将其转成字符串再输出。\u003C\u002Fp>\n\u003Ch2 id=\"注释-写给人看的代码说明\">\u003Ca class=\"anchor\" href=\"#注释-写给人看的代码说明\" aria-label=\"跳转到标题：注释：写给人看的代码说明\">\u003Cspan class=\"octicon octicon-link\">\u003C\u002Fspan>\u003C\u002Fa>注释：写给人看的代码说明\u003C\u002Fh2>\u003Cp>以井号（\u003Ccode>#\u003C\u002Fcode>）开头，从井号开始到行尾的内容都会被解释器忽略。注释是给人看的，用于说明代码的含义。这与 C++ 中使用 \u003Ccode>\u002F\u002F\u003C\u002Fcode> 添加单行注释是类似的作用。\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-Python\"># 这是一个注释\n# 注释的内容解释器不会执行\n\nx = 42  # 行内注释：给变量 x 赋值为 42\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2 id=\"课程总结\">\u003Ca class=\"anchor\" href=\"#课程总结\" aria-label=\"跳转到标题：课程总结\">\u003Cspan class=\"octicon octicon-link\">\u003C\u002Fspan>\u003C\u002Fa>课程总结\u003C\u002Fh2>\u003Cp>本节课介绍了 Python 编程的基础知识，涵盖以下内容：\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>变量\u003C\u002Fstrong>：无需声明类型，直接赋值即可定义。\u003C\u002Fli>\n\u003Cli>\u003Cstrong>输入与输出\u003C\u002Fstrong>：\u003Ccode>input()\u003C\u002Fcode> 函数用于获取用户输入，\u003Ccode>print()\u003C\u002Fcode> 函数用于输出内容。\u003C\u002Fli>\n\u003Cli>\u003Cstrong>字符串\u003C\u002Fstrong>：字符串的基本操作以及格式化方法（\u003Ccode>f-string\u003C\u002Fcode>）。\u003C\u002Fli>\n\u003Cli>\u003Cstrong>函数的定义\u003C\u002Fstrong>：使用 \u003Ccode>def\u003C\u002Fcode> 关键字定义函数，使用 \u003Ccode>return\u003C\u002Fcode> 返回值。\u003C\u002Fli>\n\u003Cli>\u003Cstrong>数据结构\u003C\u002Fstrong>：列表（\u003Ccode>list\u003C\u002Fcode>）、元组（\u003Ccode>tuple\u003C\u002Fcode>）、字典（\u003Ccode>dict\u003C\u002Fcode>）的特点与使用方法。\u003C\u002Fli>\n\u003Cli>\u003Cstrong>循环与判断\u003C\u002Fstrong>：\u003Ccode>while\u003C\u002Fcode> 循环、\u003Ccode>for\u003C\u002Fcode> 循环、\u003Ccode>if\u003C\u002Fcode> 条件判断的语法结构。\u003C\u002Fli>\n\u003Cli>\u003Cstrong>正则表达式\u003C\u002Fstrong>：使用 \u003Ccode>re\u003C\u002Fcode> 模块进行字符串的匹配与拆分。\u003C\u002Fli>\n\u003Cli>\u003Cstrong>类与对象\u003C\u002Fstrong>：类的定义、继承机制、魔术方法（如 \u003Ccode>__str__\u003C\u002Fcode>）的作用。\u003C\u002Fli>\n\u003Cli>\u003Cstrong>注释\u003C\u002Fstrong>：使用井号（\u003Ccode>#\u003C\u002Fcode>）添加代码注释。\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Python 的语言特性远不止于此。Python 拥有非常庞大的标准库和第三方库生态，许多库的内容需要单独学习，无法在一节课中全部介绍。\u003C\u002Fp>\n\u003Cp>建议在学习完基础语法后，根据自己的方向（如数据分析、Web 开发、人工智能等）继续深入学习相关的库和框架。\u003C\u002Fp>\n\u003Ch2 id=\"更多课程细节查看\">\u003Ca class=\"anchor\" href=\"#更多课程细节查看\" aria-label=\"跳转到标题：更多课程细节查看\">\u003Cspan class=\"octicon octicon-link\">\u003C\u002Fspan>\u003C\u002Fa>更多课程细节查看\u003C\u002Fh2>\u003Cp>本次课程回放可访问 InfiniTensor 官网：\u003Ca href=\"https:\u002F\u002Fwww.infinitensor.com\">https:\u002F\u002Fwww.infinitensor.com\u003C\u002Fa> 查看，或点击 \u003Cstrong>【阅读原文】\u003C\u002Fstrong> 跳转至 InfiniTensor 官网。\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>觉得有用就转发给也在学 Python 的朋友吧！\u003Cbr>📢\u003Cstrong>新一期训练营也将于近期开启报名\u003C\u002Fstrong>，欢迎关注公众号，第一时间获取课程与报名信息\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Ch2 id=\"关注与交流\">\u003Ca class=\"anchor\" href=\"#关注与交流\" aria-label=\"跳转到标题：关注与交流\">\u003Cspan class=\"octicon octicon-link\">\u003C\u002Fspan>\u003C\u002Fa>关注与交流\u003C\u002Fh2>\u003Cp>\u003Cimg src=\"https:\u002F\u002Foss.infinitensor.com\u002Fprod\u002Fimages\u002Fportal_news\u002Fnews_ewm02.jpg?Expires=1792752839&OSSAccessKeyId=LTAI5t9R6uzvTa69CT92cFvV&Signature=XFWVl4UMEW2H5Tflh0hUKDLyUVI%3D\" alt=\"\">\u003C\u002Fp>\n",[128,131,134,136,139,142,145,147,149,151,154,157,160,162,165,168,171,173,176,178,181,184,186,188,190,192,195,198,200,202],{"id":129,"text":130,"level":110},"命令行基础-学会跟电脑-quot-说话-quot","命令行基础：学会跟电脑&quot;说话&quot;",{"id":132,"text":133,"level":110},"代码编辑器与-python-文件","代码编辑器与 Python 文件",{"id":135,"text":135,"level":9},"代码编辑器",{"id":137,"text":138,"level":9},"python-文件后缀","Python 文件后缀",{"id":140,"text":141,"level":110},"print-输出与-python-运行机制","print 输出与 Python 运行机制",{"id":143,"text":144,"level":9},"第一个-python-程序","第一个 Python 程序",{"id":146,"text":146,"level":9},"编译型语言与解释型语言",{"id":148,"text":148,"level":110},"变量与数据类型",{"id":150,"text":150,"level":110},"数据结构",{"id":152,"text":153,"level":9},"列表-list","列表（List）",{"id":155,"text":156,"level":9},"字典-dictionary-dict","字典（Dictionary \u002F dict）",{"id":158,"text":159,"level":9},"元组-tuple","元组（Tuple）",{"id":161,"text":161,"level":110},"循环与条件判断",{"id":163,"text":164,"level":9},"while-循环","while 循环",{"id":166,"text":167,"level":9},"缩进-indentation","缩进（Indentation）",{"id":169,"text":170,"level":9},"for-循环","for 循环",{"id":172,"text":172,"level":110},"正则表达式与字符串处理",{"id":174,"text":175,"level":9},"正则表达式-re","正则表达式（re）",{"id":177,"text":177,"level":9},"字符串拆分示例",{"id":179,"text":180,"level":9},"字符串格式化-f-string","字符串格式化（f-string）",{"id":182,"text":183,"level":9},"list-comprehension","list comprehension",{"id":185,"text":185,"level":110},"函数定义",{"id":187,"text":187,"level":110},"类与对象",{"id":189,"text":189,"level":9},"类的定义",{"id":191,"text":191,"level":9},"继承",{"id":193,"text":194,"level":9},"魔术方法-magic-method","魔术方法（Magic Method）",{"id":196,"text":197,"level":110},"注释-写给人看的代码说明","注释：写给人看的代码说明",{"id":199,"text":199,"level":110},"课程总结",{"id":201,"text":201,"level":110},"更多课程细节查看",{"id":203,"text":203,"level":110},"关注与交流"]