2025 冬季 InfiniTensor 训练营|Python 入门

本节课是面向零基础学员的 Python 入门课程。如果你已经学习过之前的 C++ 实践课,本节部分内容会有所重复,但课程仍会从基础角度重新讲解。
无论是刚接触编程,还是有 C++ 基础想快速迁移技能学习 Python,这节课都适合你。
命令行基础:学会跟电脑"说话"
影视作品中,黑客电脑上出现的黑框框界面就是命令行,是一种不用鼠标、用文字指令跟计算机交互的方式。比图形界面(GUI)能做更多事情,也是编程必须掌握的工具。
几个最常用的指令:
ls:列出当前文件夹中所有内容cd playground:进入指定的文件夹(以 playground 为例)cd ~:返回主目录mkdir magic:创建新文件夹(以 magic 为例,mkdir 是 make directory 的缩写,directory 意为文件夹)
代码编辑器与 Python 文件
代码编辑器
命令行里自带编辑器(如 vim、emacs),但现在更主流的是带有图形界面的编辑器——VS Code。装好后,在命令行输入 code 文件夹名,就能用 VS Code 打开指定文件夹。
Python 文件后缀
Python 文件的后缀是 .py,原理和 Word 的 .doc、Excel 的 .xlsx 一样——操作系统通过文件后缀识别部分文件类型,千万别随便改后缀,改了系统可能无法正确识别文件。
print 输出与 Python 运行机制
第一个 Python 程序
在新建的 .py 文件中,调用 print 函数,传入字符串 hello world,即可在命令行中打印输出内容。交互分为输入和输出两部分,此处属于输出操作。
# main.py
print("hello world")
在命令行输入 python main.py,即可执行,屏幕上会打印出 hello world。前提是你的电脑已经装好了 Python。
编译型语言与解释型语言
编程语言可以粗略分为两类:编译型语言和解释型语言。
- C/C++ 是编译型:代码要先经过编译器编译成二进制文件,才能运行。优点是快,缺点是写起来麻烦。打印
hello world要引入头文件、写main函数、用std::cout…… - Python 通常被归类为解释型语言:以 CPython 为例,源代码会先编译为字节码,再由 Python 虚拟机执行。
不过现在界限已经没那么绝对了。很多解释型语言引入了 JIT(即时编译) 机制——会在程序运行过程中识别频繁执行的热点代码,并将其编译为机器码,从而减少后续执行这些代码时的开销。
变量与数据类型
Python 中的变量无需声明类型,直接使用赋值语句即可定义。
在 C++ 里,需要先声明类型 int x = 0;,但在 Python 里,直接 x = 0 搞定
如果直接打印一个没定义过的变量,解释器会报错:
name 'x' is not defined。先赋值,后使用。
x = 0 # 赋值为整数
print(x) # 输出:0
x = 3.14 # 赋值为浮点数,完全没问题
print(x) # 输出:3.14
这就是动态类型——变量本质上只是一个"名字",可以绑定到任意对象上。x 最初被赋值为整数 0,随后也可以被赋值为浮点数 3.14,而不会报错。Python 里所有数据都是对象(object),变量是对象的引用,解释器自动处理类型。
动态类型的特性使得编程更加灵活,但运行时要额外处理类型的动态变化,所以运行速度不如 C++ 这种静态类型语言快。
数据结构
| 结构 | Python | C++ 对应 | 特点 |
|---|---|---|---|
| 列表 | list |
vector |
动态数组,可增删改 |
| 字典 | dict |
unordered_map |
存储键值对(key-value pair) |
| 元组 | tuple |
无直接对应 | 不可变,创建后不能改 |
列表(List)
使用方括号创建,比 C++ 中的 vector 更加丰富,例如 append(对应 C++ 的 push_back)用于在列表末尾添加元素:
# 创建空列表
x = []
# 向列表添加元素
x.append(1)
x.append(3)
print(x) # 输出:[1, 3]
字典(Dictionary / dict)
使用花括号创建,通过冒号建立键与值之间的对应关系,通过键来查找对应的值:
# 创建字典:人名对应年龄
ages = {"Mike": 21, "Alice": 23}
print(ages["Mike"]) # 输出:21
print(ages["Alice"]) # 输出:23
元组(Tuple)
使用小括号创建,元组是不可变类型(immutable),创建之后无法修改;而列表是可变类型,可以动态添加或删除元素。
# 创建元组
x = (1, 2, 3)
# 创建列表
y = [1, 2, 3]
# 列表可以调用 append 方法
y.append(4)
print(y) # 输出:[1, 2, 3, 4]
# 元组没有 append 方法
# x.append(4) # 会报错
不可变类型(如元组)可以当字典的键(key),可变类型(如列表)不行。 因为 key 必须不可变,键的对象放入字典后被修改,会导致键的查找失败。写代码时优先用不可变类型,能减少很多因误修改数据引发的 bug。
循环与条件判断
while 循环
while 循环在条件为真时重复执行代码块。Python 中的 True 和 False 首字母大写,这是与 C++(小写 true / false)的一个区别。
# while 循环示例
while True:
line = input("请输入:")
print(line)
缩进(Indentation)
Python 通过缩进来划分代码块,不需要使用花括号。官方推荐的缩进方式是 4 个空格。在同一缩进层级中的代码属于同一个代码块。
while True:
line = input("请输入:")
if line == "1":
print("one")
else:
print(line)
⚠️Python 的
while、if等后面不加括号,但需要使用冒号(:),然后通过缩进来组织代码块结构。
for 循环
for 循环用于遍历序列中的每一个元素,语法接近自然语言,非常简洁。
# for 循环遍历列表
x = [1, 3, 5, 7, 9]
for item in x:
print(item)
正则表达式与字符串处理
正则表达式(re)
Python 标准库的 re 模块提供正则表达式支持,通过一个字符串模式来描述需要匹配的内容,常用于字符串的查找、替换和拆分操作。类似于 Word 文档中的“查找替换”,但功能更加强大。
字符串拆分示例
比如要拆分一个输入字符串 (1+1),可以用正则表达式拆出括号、加号和数字,某些字符具有特殊含义(如括号表示捕获组),如果需要匹配这些字符本身,需要使用反斜杠()进行转义:
import re
line = input("请输入表达式:")
# 使用正则表达式拆分字符串
# \( 匹配左括号,\+ 匹配加号,) 匹配右括号
# | 表示「或」
pattern = r"((|\+|[0-9]+|))"
tokens = re.split(pattern, line)
print(tokens)
在 Python 字符串前加 r(raw string)可以避免反斜杠被当作转义字符处理,是编写正则表达式时的常用写法。
字符串格式化(f-string)
Python 支持多种字符串格式化方式,其中 f-string(格式化字符串字面值)是最简洁的一种。在字符串前加上字母 f,即可在字符串中直接嵌入变量或表达式,使用花括号括起来。
x = 1
# 使用 f-string 格式化字符串
result = f"x等于{x}"
print(result) # 输出:x等于1
list comprehension
列表推导式(list comprehension)是 Python 中一种简洁的列表构造方式,可以在一行代码中完成列表的创建和过滤操作。
import re
line = "(1+1)"
pattern = r"((|\+|[0-9]+|))"
# 列表推导式:过滤空字符串,构造 tokens 列表
tokens = [token for token in re.split(pattern, line) if token.strip()]
print(tokens) # 输出:['(', '1', '+', '1', ')']
函数定义
用 def 关键字定义函数,把逻辑封装起来。传入一个字符串,返回拆分后的 token 列表。
import re
def tokenize(line):
pattern = r"((|\+|[0-9]+|))"
tokens = [token for token in re.split(pattern, line) if token.strip()]
return tokens
result = tokenize("(1+1)")
print(result) # 输出:['(', '1', '+', '1', ')']
在此基础上可以实现简单的表达式计算:
def calculate(line):
tokens = tokenize(line)
if tokens[1] == "+":
result = float(tokens[0]) + float(tokens[2])
elif tokens[1] == "-":
result = float(tokens[0]) - float(tokens[2])
else:
result = None
return result
print(calculate("3.14-2"))
⚠️在解释器交互模式下改了代码,可以通过重新执行函数或类的定义来更新代码。
类与对象
类的定义
用 class 关键字定义类。如果类体暂时为空,必须用 pass 占位,否则会报错(函数定义也是如此,空函数体同样需要 pass 语句):
# 定义一个空的 Animal 类
class Animal:
pass
# 定义有内容的类
class Animal:
def __str__(self):
return "Animal"
def speak(self):
pass # 占位,暂不实现
继承
Python 支持类的继承。子类在定义时将父类放在括号中,即可继承父类的属性和方法。如果子类中定义了与父类同名的方法,则子类的方法会覆盖(override)父类的方法。
# Animal 类
class Animal:
def __str__(self):
return "Animal"
def speak(self):
pass
# Cat 类,继承自 Animal
class Cat(Animal):
def __str__(self):
return "Cat"
def speak(self):
return "Meow"
cat = Cat()
print(cat) # 输出:Cat(调用了子类覆盖后的 __str__)
print(cat.speak()) # 输出:Meow
魔术方法(Magic Method)
魔术方法(或特殊方法)是以双下划线开头和结尾,如 __str__,是 Python 对象预定义的方法,会在特定场景下自动调用。。print() 时 Python 会自动调用该对象的 __str__方法,将其转成字符串再输出。
注释:写给人看的代码说明
以井号(#)开头,从井号开始到行尾的内容都会被解释器忽略。注释是给人看的,用于说明代码的含义。这与 C++ 中使用 // 添加单行注释是类似的作用。
# 这是一个注释
# 注释的内容解释器不会执行
x = 42 # 行内注释:给变量 x 赋值为 42
课程总结
本节课介绍了 Python 编程的基础知识,涵盖以下内容:
- 变量:无需声明类型,直接赋值即可定义。
- 输入与输出:
input()函数用于获取用户输入,print()函数用于输出内容。 - 字符串:字符串的基本操作以及格式化方法(
f-string)。 - 函数的定义:使用
def关键字定义函数,使用return返回值。 - 数据结构:列表(
list)、元组(tuple)、字典(dict)的特点与使用方法。 - 循环与判断:
while循环、for循环、if条件判断的语法结构。 - 正则表达式:使用
re模块进行字符串的匹配与拆分。 - 类与对象:类的定义、继承机制、魔术方法(如
__str__)的作用。 - 注释:使用井号(
#)添加代码注释。
Python 的语言特性远不止于此。Python 拥有非常庞大的标准库和第三方库生态,许多库的内容需要单独学习,无法在一节课中全部介绍。
建议在学习完基础语法后,根据自己的方向(如数据分析、Web 开发、人工智能等)继续深入学习相关的库和框架。
更多课程细节查看
本次课程回放可访问 InfiniTensor 官网:https://www.infinitensor.com 查看,或点击 【阅读原文】 跳转至 InfiniTensor 官网。
觉得有用就转发给也在学 Python 的朋友吧!
📢新一期训练营也将于近期开启报名,欢迎关注公众号,第一时间获取课程与报名信息
关注与交流

