Python 基础语法(一):变量、数据类型与运算符

这一章开始学习 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 代码块。

同一个代码块的缩进必须保持一致。不要在一个文件中混用制表符和空格,否则可能出现 IndentationErrorTabError

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 的关键字具有固定的语法作用,例如 ifforclassTrueNone,不能拿来作为普通变量名。可以通过 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,会出现 NameErrordel 删除的是当前名称与对象之间的绑定,并不等于立即从内存中强制删除对象。

四、基础数据类型

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

布尔类型只有 TrueFalse 两个值,首字母必须大写:

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 >= 60score <= 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)

andor 具有短路特性。and 左侧已经为假时,不再计算右侧;or 左侧已经为真时,也不再计算右侧。

python 复制代码
number = 0

result = number != 0 and 10 / number > 1
print(result)

因为 number != 0False,后面的 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. 身份运算符

isis 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 Noneis 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 会按照优先级计算。常见运算符大致按照下面的顺序执行:

  1. 圆括号 ()
  2. 幂运算 **
  3. 正负号和按位取反 +x-x~x
  4. 乘除、整除和取余 *///%
  5. 加减 +-
  6. 比较、成员和身份运算
  7. not
  8. and
  9. or

例如:

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 代码的基本结构,以及变量、基础数据类型和运算符。下一章继续讲字符串,包括索引、切片、转义字符、格式化和常用字符串方法。

相关推荐
程序员三藏2 小时前
浅谈性能测试
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·性能测试
l1258652 小时前
# RAG向量数据库优化实战:HNSW索引调参与生产级性能设计
数据库·python·mysql·langchain
meilindehuzi_a3 小时前
Python 基础语法(1):常量、变量、类型、输入输出与运算符
开发语言·python
Zane19943 小时前
调用了 async 函数却没执行?一文讲透协程、event loop 与 await
后端·python
OPEN-F3 小时前
Python进阶教程:装饰器与生成器深入
开发语言·python
zhipujiaoyu3 小时前
2026年大数据专科何去何从?就业前景、发展趋势全揭秘!
大数据·python
l1258653 小时前
# RAG噪声知识库治理:一致性与可信度的四层防线设计
数据库·人工智能·python·自然语言处理·langchain
zoujiahui_20183 小时前
别再只写 np.random.seed() 了:default_rng 与 np.random、random 到底差在哪?
python
Patrick在香港3 小时前
Claude Agent 进阶:4 种工具调用编排模式,让 0820 那 13 个 endpoint 并行起来
python·ai·ai编程