这一章开始学习 Python 的基础语法。本节会讲到 Python 代码的基本结构、标识符与关键字、变量赋值、基础数据类型、输入输出、类型转换和运算符。这些内容需要理解清楚,因为后面的条件判断、循环、函数和类都会直接用到。

一、Python 代码的基本结构
新建一个 hello.py 文件,写入下面的代码:
python
print("Hello, Python")
运行结果为:
python
Hello, Python
这行代码调用了 Python 内置的 print() 函数,将字符串输出到终端。
1. 语句与表达式
Python 程序由一条条语句组成。下面的赋值和输出都是语句:
python
price = 20
print(price)
能够计算出一个值的代码称为表达式:
python
10 + 5
price * 2
表达式可以作为语句的一部分:
python
total = price * 2
print(total)
2. 换行与分号
Python 通常一行写一条语句,行尾不需要添加分号:
python
name = "Ivan"
age = 20
虽然也可以使用分号把多条语句写在同一行,但是可读性比较差,一般不这样写:
python
name = "Ivan"; age = 20
一条语句太长时,可以放在圆括号、方括号或者花括号中换行:
python
total = (
100
+ 200
+ 300
)
也可以使用反斜杠 \ 续行,不过括号内换行更清楚,也不容易因为反斜杠后面多出空格而报错。
3. 缩进与代码块
Python 使用缩进表示代码之间的层级关系,一般使用四个空格作为一级缩进:
python
score = 85
if score >= 60:
print("考试通过")
print("当前成绩:", score)
两条 print() 语句都有四个空格缩进,所以它们都属于 if 代码块。
同一个代码块的缩进必须保持一致。不要在一个文件中混用制表符和空格,否则可能出现 IndentationError 或 TabError。
4. 注释
单行注释以 # 开头:
python
# 计算商品总价
total = price * count
也可以把注释放在代码后面:
python
timeout = 30 # 超时时间,单位为秒
三引号包起来的内容属于字符串,并不是真正的注释:
python
"""
这是一段多行字符串。
它在没有被使用时看起来像注释。
"""
函数、类和模块开头的三引号字符串可以作为文档字符串,也就是 Docstring。文档字符串会在函数章节中继续讲。

二、标识符与关键字
变量名、函数名和类名都属于标识符。Python 对标识符有下面几条基本规则:
- 可以由字母、数字和下划线组成。
- 不能以数字开头。
- 不能使用 Python 关键字。
- 区分大小写。
下面这些名称是合法的:
python
name = "Ivan"
user_name = "Ivan"
score2 = 95
_count = 10
下面这些名称不合法:
python
2score = 95 # 不能以数字开头
user-name = "Ivan" # 不能包含减号
class = "A" # class 是关键字
Python 的关键字具有固定的语法作用,例如 if、for、class、True 和 None,不能拿来作为普通变量名。可以通过 keyword 模块查看当前 Python 版本包含的全部关键字:
python
import keyword
print(keyword.kwlist)
变量和函数通常使用小写字母,并用下划线分隔多个单词:
python
user_name = "Ivan"
product_price = 49.9
file_path = "data/test.txt"
类名一般使用大驼峰形式,例如 StudentInfo。常量通常使用全大写名称,例如:
python
MAX_RETRY_COUNT = 3
DEFAULT_TIMEOUT = 30
Python 不会阻止常量被重新赋值,全大写只是一种约定。
三、变量与赋值
Python 中不需要提前声明变量。赋值语句会把右侧的对象绑定到左侧的变量名:
python
age = 20
name = "Ivan"
price = 19.9
这里的 = 是赋值运算符,并不表示数学中的相等关系。
1. 动态类型
变量本身没有固定的数据类型,它保存的是对某个对象的引用。同一个变量名可以重新绑定到其他类型的对象:
python
value = 10
print(type(value))
value = "Python"
print(type(value))
运行结果为:
python
<class 'int'>
<class 'str'>
这就是 Python 的动态类型。不过在一段代码中频繁改变变量保存的数据类型,会让代码变得难以理解,所以一般会让同一个变量保持相对稳定的含义。

2. 多重赋值
可以在一行中给多个变量赋值:
python
name, age, score = "Ivan", 20, 95.5
左右两边的数量必须一致,否则会出现解包错误。
多个变量也可以绑定到同一个值:
python
x = y = z = 0
交换两个变量时,不需要借助临时变量:
python
a = 10
b = 20
a, b = b, a
print(a, b)
输出结果为:
python
20 10
3. 删除变量名
del 可以删除一个变量名:
python
name = "Ivan"
del name
删除以后再访问 name,会出现 NameError。del 删除的是当前名称与对象之间的绑定,并不等于立即从内存中强制删除对象。
四、基础数据类型
Python 内置了多种数据类型。本章先讲数值、布尔值、字符串和空值,列表、元组、字典和集合会放到后面的章节中。

1. 整数 int
整数可以是正数、负数或者零:
python
age = 20
temperature = -5
count = 0
Python 整数没有固定的 32 位或 64 位上限,只要内存允许,就可以保存很大的整数:
python
number = 123456789012345678901234567890
除了十进制,还可以使用二进制、八进制和十六进制字面量:
python
binary_number = 0b1010
octal_number = 0o12
hex_number = 0x0A
print(binary_number, octal_number, hex_number)
三者输出的十进制结果都是 10。
较长的数字可以使用下划线分隔,下划线不会影响实际数值:
python
population = 1_400_000_000
2. 浮点数 float
带小数的数字通常是浮点数:
python
price = 19.9
score = 95.5
temperature = -3.2
浮点数也可以使用科学计数法:
python
large_number = 1.5e6
small_number = 2.5e-3
print(large_number)
print(small_number)
输出结果为:
python
1500000.0
0.0025
浮点数采用二进制近似表示,所以某些十进制小数不能被精确保存:
python
print(0.1 + 0.2)
结果为:
python
0.30000000000000004
这属于浮点数本身的表示问题。需要精确处理十进制金额时,可以使用标准库中的 Decimal。
3. 复数 complex
Python 直接支持复数,使用 j 表示虚部:
python
number = 3 + 4j
print(number.real)
print(number.imag)
输出结果为:
python
3.0
4.0
复数在普通代码中不算常见,但是它属于 Python 的基础数值类型。
4. 布尔值 bool
布尔类型只有 True 和 False 两个值,首字母必须大写:
python
is_login = True
is_finished = False
比较运算和逻辑运算通常都会得到布尔值:
python
print(10 > 5)
print(10 == 5)
输出结果为:
python
True
False
5. 字符串 str
字符串用来表示文本,可以使用单引号、双引号或者三引号:
python
name = "Ivan"
language = 'Python'
message = """这是
一段多行字符串"""
单引号和双引号没有类型上的区别。字符串的索引、切片和常用方法会在下一章详细讲。
6. 空值 None
None 表示没有值,它的类型是 NoneType:
python
result = None
print(type(result))
输出结果为:
python
<class 'NoneType'>
None、空字符串 ""、数字 0 和布尔值 False 是不同的对象,不能把它们当成同一个值。
判断一个变量是否为 None 时,通常使用 is:
python
result = None
print(result is None)
五、查看和判断数据类型
type() 可以返回对象的类型:
python
print(type(20))
print(type(19.9))
print(type("Python"))
print(type(True))
print(type(None))
输出结果为:
python
<class 'int'>
<class 'float'>
<class 'str'>
<class 'bool'>
<class 'NoneType'>
isinstance() 用来判断一个对象是否属于指定类型:
python
age = 20
print(isinstance(age, int))
print(isinstance(age, str))
输出结果为:
python
True
False
还可以同时判断多个类型:
python
value = 19.9
print(isinstance(value, (int, float)))
type() 适合直接查看对象的确切类型。isinstance() 还会考虑继承关系,因此在类型判断中更常用。继承关系会在面向对象章节中解释。
六、数据类型转换
Python 提供了与类型同名的转换函数,例如 int()、float()、str()、bool() 和 complex()。
1. 转换为整数
python
number = int("20")
print(number)
print(type(number))
输出结果为:
python
20
<class 'int'>
浮点数转换成整数时会直接舍去小数部分,并不是四舍五入:
python
print(int(3.9))
print(int(-3.9))
输出结果为:
python
3
-3
无效的字符串不能转换成整数:
python
int("20.5")
int("Python")
这两行代码都会引发 ValueError。
2. 转换为浮点数
python
price = float("19.9")
number = float(10)
print(price)
print(number)
输出结果为:
python
19.9
10.0
3. 转换为字符串
python
age = 20
age_text = str(age)
print(age_text)
print(type(age_text))
4. 转换为布尔值
下面这些值转换成布尔值时为 False:
python
print(bool(0))
print(bool(0.0))
print(bool(""))
print(bool(None))
非零数字和非空字符串通常会转换为 True:
python
print(bool(1))
print(bool(-1))
print(bool("Python"))
print(bool("False"))
字符串 "False" 仍然会得到 True,因为它是一个非空字符串,Python 不会根据字符串的字面内容自动理解真假。
七、输入与输出

1. 使用 print() 输出内容
print() 可以接收多个参数:
python
name = "Ivan"
age = 20
print("姓名:", name, "年龄:", age)
多个参数默认使用空格分隔。可以通过 sep 修改分隔符:
python
print("2026", "08", "21", sep="-")
输出结果为:
yaml
2026-08-21
print() 默认在结尾换行,可以通过 end 修改:
python
print("Hello", end=" ")
print("Python")
输出结果为:
Hello Python
使用 f-string 可以把变量或表达式插入字符串:
python
name = "Ivan"
score = 95.5
print(f"{name} 的成绩是 {score} 分")
print(f"保留一位小数:{score:.1f}")
2. 使用 input() 接收输入
input() 会暂停程序,等待用户在终端中输入内容:
python
name = input("请输入姓名:")
print(f"你好,{name}")
input() 的返回值始终是字符串。输入数字时,需要根据用途进行类型转换:
python
age = int(input("请输入年龄:"))
height = float(input("请输入身高:"))
print(type(age))
print(type(height))
如果用户输入的内容不能完成转换,程序会引发 ValueError。异常处理会在后面的章节中单独讲。
八、运算符
运算符用来完成计算、比较、赋值和逻辑判断。Python 的运算符可以分为算术运算符、比较运算符、逻辑运算符、赋值运算符、成员运算符、身份运算符和位运算符。

1. 算术运算符
| 运算符 | 含义 | 示例 | 结果 |
|---|---|---|---|
+ |
加法 | 10 + 3 |
13 |
- |
减法 | 10 - 3 |
7 |
* |
乘法 | 10 * 3 |
30 |
/ |
除法 | 10 / 3 |
3.333... |
// |
向下整除 | 10 // 3 |
3 |
% |
取余 | 10 % 3 |
1 |
** |
幂运算 | 10 ** 3 |
1000 |
/ 的结果通常是浮点数:
python
print(10 / 2)
输出结果为 5.0。
// 表示向下取整,不是简单删除小数部分:
python
print(10 // 3)
print(-10 // 3)
输出结果为:
diff
3
-4
2. 比较运算符
| 运算符 | 含义 |
|---|---|
== |
等于 |
!= |
不等于 |
> |
大于 |
< |
小于 |
>= |
大于等于 |
<= |
小于等于 |
比较运算的结果是布尔值:
python
age = 20
print(age == 20)
print(age != 20)
print(age >= 18)
Python 支持连续比较:
python
score = 85
print(60 <= score <= 100)
这相当于同时判断 score >= 60 和 score <= 100。
3. 逻辑运算符
| 运算符 | 含义 |
|---|---|
and |
两边都为真时结果为真 |
or |
至少一边为真时结果为真 |
not |
对真假结果取反 |
python
age = 20
has_ticket = True
print(age >= 18 and has_ticket)
print(age < 18 or has_ticket)
print(not has_ticket)
and 和 or 具有短路特性。and 左侧已经为假时,不再计算右侧;or 左侧已经为真时,也不再计算右侧。
python
number = 0
result = number != 0 and 10 / number > 1
print(result)
因为 number != 0 为 False,后面的 10 / number 不会执行,所以不会出现除零错误。
4. 赋值运算符
基础赋值使用 =:
python
count = 10
复合赋值会把运算和赋值写在一起:
python
count += 2 # count = count + 2
count -= 1 # count = count - 1
count *= 3 # count = count * 3
count /= 2 # count = count / 2
count //= 2 # count = count // 2
count %= 3 # count = count % 3
count **= 2 # count = count ** 2
5. 成员运算符
in 用来判断一个值是否包含在另一个对象中,not in 表示不包含:
python
text = "Python"
print("Py" in text)
print("Java" not in text)
输出结果为:
python
True
True
列表、元组、字典和集合也支持成员判断,后面讲这些数据结构时会继续使用。
6. 身份运算符
is 和 is not 判断两个变量是否指向同一个对象。它们与 == 的含义不同:
python
a = [1, 2]
b = [1, 2]
print(a == b)
print(a is b)
输出结果为:
python
True
False
a == b 比较的是内容,a is b 比较的是对象身份。判断 None 时一般使用 is None 或 is not None,不要用 is 比较普通数字和字符串的值。
!python-07-equality-identity.svg
7. 位运算符
位运算直接对整数的二进制位进行操作:
| 运算符 | 含义 |
|---|---|
& |
按位与 |
| ` | ` |
^ |
按位异或 |
~ |
按位取反 |
<< |
左移 |
>> |
右移 |
python
a = 0b1010
b = 0b1100
print(a & b)
print(a | b)
print(a ^ b)
print(a << 1)
print(a >> 1)
位运算在权限标记、协议处理和底层数据处理中比较常见。基础阶段需要知道它的写法,具体使用时再结合二进制理解。
九、运算符优先级
一个表达式中出现多个运算符时,Python 会按照优先级计算。常见运算符大致按照下面的顺序执行:
- 圆括号
() - 幂运算
** - 正负号和按位取反
+x、-x、~x - 乘除、整除和取余
*、/、//、% - 加减
+、- - 比较、成员和身份运算
notandor
例如:
python
result = 2 + 3 * 4
print(result)
乘法优先于加法,所以结果为 14。使用括号可以改变计算顺序:
python
result = (2 + 3) * 4
print(result)
结果为 20。
即使已经知道优先级,复杂表达式也建议使用括号明确计算顺序,这样更容易检查。
十、综合示例
下面的代码使用了变量、输入、类型转换、算术运算和格式化输出:
python
name = input("请输入姓名:")
chinese = float(input("请输入语文成绩:"))
math = float(input("请输入数学成绩:"))
english = float(input("请输入英语成绩:"))
total = chinese + math + english
average = total / 3
print(f"姓名:{name}")
print(f"总分:{total:.1f}")
print(f"平均分:{average:.2f}")
print(f"平均分是否达到60分:{average >= 60}")
如果输入:
请输入姓名:Ivan
请输入语文成绩:88
请输入数学成绩:92
请输入英语成绩:85
程序会输出:
python
姓名:Ivan
总分:265.0
平均分:88.33
平均分是否达到60分:True
十一、常见错误
1. 把赋值和比较写混
python
age = 20 # 赋值
age == 20 # 比较
2. 忘记转换 input() 的结果
python
age = input("请输入年龄:")
print(age + 1)
age 是字符串,不能直接与整数相加。应该写成:
python
age = int(input("请输入年龄:"))
print(age + 1)
3. 字符串与数字直接拼接
python
age = 20
print("年龄:" + age)
字符串不能直接和整数使用 + 拼接,可以转换类型或者使用 f-string:
python
print("年龄:" + str(age))
print(f"年龄:{age}")
4. 使用 is 比较值
python
value = 1000
print(value is 1000)
is 判断对象身份,普通数值比较应该使用 ==:
python
print(value == 1000)
十二、练习
练习一:计算长方形面积和周长
接收用户输入的长度和宽度,输出长方形的面积和周长。
练习二:温度转换
输入摄氏温度,按照下面的公式计算华氏温度:
华氏温度 = 摄氏温度 × 1.8 + 32
练习三:时间转换
输入一个总秒数,将它转换为几小时、几分钟、几秒。这个练习需要使用整除和取余运算。
练习四:交换变量
创建两个变量,分别保存不同的值,不使用第三个临时变量完成交换,并输出交换前后的结果。
这一章讲完了 Python 代码的基本结构,以及变量、基础数据类型和运算符。下一章继续讲字符串,包括索引、切片、转义字符、格式化和常用字符串方法。