学习资料
2025 冬季 InfiniTensor 训练营|Python 入门
发表于:

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 的 whileif 等后面不加括号,但需要使用冒号(:),然后通过缩进来组织代码块结构。

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 的朋友吧!
📢新一期训练营也将于近期开启报名,欢迎关注公众号,第一时间获取课程与报名信息

关注与交流