Python: Python 语法与变量

现在开始编写真正的 Python 代码了。先来掌握最基础的规则:缩进注释变量

1. 缩进规则

Python 最鲜明的特点——它用缩进来划分代码块,而不是花括号 {}

TEXT 📖 仅展示
# ✅ 正确:同一个代码块内缩进保持一致
if 3 > 1:
    print("3 大于 1")
    print("这一行也在 if 代码块内")

# ❌ 错误:缩进不一致
if 3 > 1:
    print("3 大于 1")
  print("缩进错误!")  # IndentationError
⚠️ 黄金法则:缩进永远用 4 个空格,不要用 Tab。大多数编辑器(VS Code、PyCharm)会自动把 Tab 键转换成 4 个空格。

缩进不仅适用于 if 语句,还适用于所有代码块——循环、函数、类等等:

PYTHON
# for 循环中的缩进
for i in range(3):
    print(i)          # 这一行在循环内
    print("---")      # 这一行也在循环内
print("完成")         # 这一行不在循环内

2. 注释

注释是写给看的——Python 会完全忽略它们。

(1) 单行注释:#

PYTHON
# 这是单行注释
print("Hello")  # 代码后面的注释

# 多行注释使用多个 # 符号
# 这是第二行
# 这是第三行

(2) 多行字符串注释:""" """''' '''

严格来说这些是字符串,但常被当作多行注释来用:

PYTHON
"""
这是一个多行注释
常用于编写函数说明
或者临时屏蔽大段代码
"""
print("上面的多行字符串不会执行")

3. 变量

Python 的变量不需要声明类型——直接赋值就能用:

PYTHON
name = "Alice"    # str
age = 25          # int
height = 1.75     # float
is_student = True  # bool

(1) 变量命名规则

规则 正确 ✅ 错误 ❌
只能包含字母、数字和下划线 my_name my-name
不能以数字开头 var1 1var
区分大小写 nameName 是不同的 -
不能是关键字 - ifforclass

(2) 命名规范(PEP 8)

PYTHON
# ✅ 变量:小写加下划线(snake_case)
user_name = "Alice"
total_price = 99.9
max_value = 100

# ✅ 常量:全大写加下划线
PI = 3.14159
MAX_SIZE = 1024

# ❌ 不推荐
userName = "Alice"     # CamelCase(Java 风格)
UserName = "Alice"     # 看起来像类名

(3) 多变量赋值

Python 允许在一行里给多个变量赋值:

PYTHON
# 一次给多个变量赋值
a, b, c = 1, 2, 3
print(a, b, c)  # 1 2 3

# 交换两个变量(其他语言需要借助临时变量)
x, y = 10, 20
x, y = y, x
print(x, y)  # 20 10

# 给多个变量赋相同的值
m = n = p = 0
print(m, n, p)  # 0 0 0

▶ 示例:变量类型与交换(难度 ⭐)

PYTHON
# 定义不同类型的变量
name = "Alice"
age = 25
height = 1.68
is_student = True

# 打印变量信息
print(f"{name} 今年 {age} 岁,身高 {height}m")
print(f"学生身份:{is_student}")

# 交换两个变量
a, b = 10, 20
print(f"交换前:a={a}, b={b}")
a, b = b, a
print(f"交换后:a={a}, b={b}")

# 检查类型
print(f"name 的类型:{type(name)}")
print(f"age 的类型:{type(age)}")
print(f"height 的类型:{type(height)}")
▶ 试一试

Output:

TEXT 📖 仅展示
Alice is 25 years old, 1.68m tall
Student status: True
Before: a=10, b=20
After: a=20, b=10
name type: <class 'str'>
age type: <class 'int'>
height type: <class 'float'>

4. type() 函数

▶ 示例:变量类型探索(难度 ⭐)

PYTHON
# 探索不同的类型和类型转换
x = 42
y = 3.14
z = "Hello"
w = True

print(f"x = {x}, 类型 = {type(x).__name__}")
print(f"y = {y}, 类型 = {type(y).__name__}")
print(f"z = {z}, 类型 = {type(z).__name__}")
print(f"w = {w}, 类型 = {type(w).__name__}")

# 类型转换
print(f"\nint(y) = {int(y)}")
print(f"float(x) = {float(x)}")
print(f"str(x) = {str(x)}")
print(f"bool(0) = {bool(0)}, bool(1) = {bool(1)}")

# 动态类型:变量的类型可以改变
var = 100
print(f"\nvar = {var}, 类型 = {type(var).__name__}")
var = "现在是个字符串"
print(f"var = {var}, 类型 = {type(var).__name__}")
▶ 试一试

Output:

TEXT 📖 仅展示
x = 42, type = int
y = 3.14, type = float
z = Hello, type = str
w = True, type = bool

int(y) = 3
float(x) = 42.0
str(x) = 42
bool(0) = False, bool(1) = True

var = 100, type = int
var = now a string, type = str

▶ 示例:变量赋值技巧(难度 ⭐)

PYTHON
# 多重赋值
a, b, c = 10, 20, 30
print(f"a={a}, b={b}, c={c}")

# 无需临时变量即可交换
x, y = 100, 200
print(f"交换前:x={x}, y={y}")
x, y = y, x
print(f"交换后:x={x}, y={y}")

# 给多个变量赋相同的值
p = q = r = 0
print(f"p={p}, q={q}, r={r}")

# 解包列表
colors = ["red", "green", "blue"]
first, second, third = colors
print(f"第一个:{first},第二个:{second},第三个:{third}")
▶ 试一试

Output:

TEXT 📖 仅展示
a=10, b=20, c=30
Before swap: x=100, y=200
After swap: x=200, y=100
p=0, q=0, r=0
First: red, Second: green, Third: blue

4. type() 函数

type() 来检查变量的类型:

PYTHON
print(type(10))       # <class 'int'>
print(type(3.14))     # <class 'float'>
print(type("Hello"))  # <class 'str'>
print(type(True))     # <class 'bool'>

# 变量重新赋值后类型可以改变(动态类型)
x = 10
print(type(x))  # <class 'int'>
x = "Hello"
print(type(x))  # <class 'str'>  ← 类型变了

5. 常见错误

PYTHON
# IndentationError:缩进错误
print("缩进多了")
  print("这一行多了一个空格")  # ❌

# NameError:变量未定义
print(z)  # ❌ z 从未被赋值

# SyntaxError:语法错误
print("Hello)  # ❌ 引号没有闭合

❓ 常见问题

Q 为什么 Python 用缩进而不是像其他语言那样用花括号 {}
A Python 之父 Guido van Rossum 认为,代码首先应该便于人类阅读。缩进在视觉上就能体现代码结构——你的眼睛本来就看得到它,何必再多加符号呢?这强制了格式统一,也消灭了整类 bug(漏掉花括号、括号不匹配)。这是一种设计哲学:"优美胜于丑陋。"
Q 我把 Tab 和空格混用了——代码看起来没问题,却抛出 IndentationError,为什么?
A Python 把 Tab 和空格当成不同的字符。一行用 Tab 缩进,和一行用 4 个空格缩进,人眼看是一样的,但 Python 认为它们不一样。解决办法:把编辑器配置成用空格替换 Tab(VS Code 默认就这样)。可以用 python -m tabnanny myfile.py 来扫描混用缩进的情况。
Q Python 的动态类型和 Java 这类语言的静态类型有什么区别?重要吗?
A 在静态类型语言里,你要事先声明变量的类型(int x = 5;),而且之后不能改。在 Python 里,类型在运行时才确定,而且可以变(x = 5; x = "hello" 都行)。动态类型更灵活、写起来更快,但类型错误要到运行时才暴露。对初学者来说,动态类型意味着更少的样板代码;对大型项目来说,静态类型能更早地发现 bug。
Q 我一直遇到 NameError: name 'xxx' is not defined,怎么解决?
A NameError 表示 Python 找不到这个名字的变量。常见原因:① 变量名拼错了(Python 区分大小写——Namename);② 在赋值之前就使用了变量;③ 变量定义在函数或循环内部,你却在外面访问它。快速排查法:在报错的那一行前面加个 print(),看看那一刻到底有哪些变量存在。
Q === 有什么区别?我总是搞混。
A = 是赋值——把值放进变量(x = 5 意思是"x 现在存的是 5")。== 是比较——它在问"这两个相等吗?"(x == 5 返回 TrueFalse)。可以把 = 想象成指向左边的箭头(x ← 5),把 == 想象成检查两边的天平。这是初学者最常见的错误之一——把本应写的 if x == 5: 写成了 if x = 5:

📖 小节

📝 作业

  1. 写一段代码,定义三个变量:city(城市名)、year(年份)、score(分数 88.5),并用 print() 打印出来
  2. 交换两个变量 a = 5b = 10,让 a 变成 10,b 变成 5
  3. type() 检查 True"123"3.0 的类型
  4. 故意写一段有缩进错误的代码,看看 Python 抛出什么错误,并把错误信息截图
Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏