Skip to content

Python 语法基础

概要

Python 是一门强调可读性与开发效率的通用编程语言,常用于脚本自动化、Web 开发、数据分析与 AI 等场景。它是动态类型语言,写起来更灵活,但也更需要良好的命名、结构与测试来保证可维护性。

一、数据类型

Python 的常用内置类型可以按“数值 / 序列 / 映射 / 集合 / 布尔 / 二进制 / 特殊值”来理解。

类型名称说明示例是否可变是否有序
int整数不带小数的数字10-
float浮点数带小数的数字3.14-
bool布尔值真或假True-
complex复数复数类型1+2j-
str字符串文本数据"hello"
list列表有序可修改集合[1, 2, 3]
tuple元组有序不可修改集合(1, 2, 3)
set集合无序且元素唯一{1, 2, 3}
dict字典键值对数据结构{"name": "Tom"}
NoneType空类型表示空值None-
python
# 1. int(整数)
a = 100
b = -50
print(type(a))

# 2. float(浮点数)
pi = 3.14159
print(type(pi))

# 3. complex(复数)
c = 1 + 2j
print(type(c))

# 4. bool(布尔值)
flag = True
print(type(flag))
python
name = "Python"

# 1. 重复
print("Hi" * 3)

# 2. 索引
s = "Python"
print(s[0])   # P
print(s[-1])  # n

# 3. 切片
print(s[0:3])  # Pyt

# 常用方法
s = "hello"
print(s.upper())
print(s.capitalize())
print(s.replace("h", "H"))
python
# 特点:有序、可修改、可重复、支持不同类型
nums = [1, 2, 3]
names = ["Tom", "Jack"]
mixed = [1, "Hello", True]

# 1. 添加元素
nums.append(4)
# 2. 插入元素
nums.insert(1, 100)
# 3. 删除元素
nums.remove(2)
# 4. 访问元素
print(nums[0])
# 5. 遍历列表
for item in nums:
    print(item)
python
# 特点:有序、不可修改、可重复
t = (1, 2, 3)
t = (10,)

print(t[0])
python
# 集合是无序、不重复的数据类型。
s = {1, 2, 3}

# 1. 添加元素
s.add(4)
# 2. 删除元素
s.remove(2)
# 3. 集合运算
a = {1, 2, 3}
b = {3, 4, 5}

print(a & b)  # 交集
print(a | b)  # 并集
print(a - b)  # 差集
python
# 特点:键值对结构、键不能重复、可修改
user = {
  "name": "Tom",
  "age": 18
}

# 1. 获取值
print(user["name"])
# 2. 添加/修改
user["gender"] = "male"
# 3. 删除
del user["age"]
# 4. 遍历字典
for k, v in user.items():
    print(k, v)

二、变量声明与类型转换

Python 通过赋值来绑定变量名,不需要显式声明类型;“常量”通常用全大写命名来表达约定(语言层面不会强制禁止修改)。

python
x = 10         # int
y = 3.14       # float
is_active = True  # bool
name = "xiaoxiao"
age = 18
print(f'name is {name}, age is {age}')

# 常量(命名约定)
PI = 3.14159     # 常量:圆周率
MAX_USERS = 100  # 常量:最大用户数
python
int()  # 转换为一个整数
float() # 转化为一个浮点数
str()  # 转换为一个字符串
eval(str) # 用来计算在字符串中的有效python表达式,并返回一个对象
tuple(s) # 将序列s转换为一个元组
list(s)  # 将序列s转换为一个列表
chr(x)   # 将一个整数转换为一个字符

三、流程控制

流程控制用于决定代码执行顺序,常见结构包括条件分支、循环、循环控制语句,以及异常处理。

1. 条件语句(if / elif / else)

python
if condition:
    # 如果 condition 为 True,执行这里的代码
elif another_condition:
    # 如果另一条件为 True,执行这里的代码
else:
    # 如果以上条件都不满足,执行这里的代码

2. 循环语句(for / while)

python
for i in range(5):  # 0, 1, 2, 3, 4
    print(i)
python
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
    print(fruit)
python
count = 0
while count < 5:
    print(count)
    count += 1

3. 循环控制语句(break / continue / pass)

python
for i in range(5):
    if i == 3:
        break
    print(i)
python
for i in range(5):
    if i == 3:
        continue
    print(i)
python
if 3 > 2:
    pass  # 占位符

4. 嵌套控制结构

python
age = 25
if age > 18:
    if age < 30:
        print("成年人且年龄在 18 到 30 之间")
    else:
        print("成年人但超过 30 岁")
else:
    print("未成年")
python
for i in range(3):
    for j in range(2):
        print(f"i = {i}, j = {j}")

5. 条件表达式(三元表达式)

python
# 基础语法
x if condition else y

age = 18
status = "成年人" if age >= 18 else "未成年"
print(status)

6. 异常处理(try / except / else / finally)

python
try:
    # 可能引发异常的代码
except ExceptionType as e:
    # 异常处理代码
else:
    # 如果没有异常发生,执行此块代码
finally:
    # 无论是否发生异常,最终都会执行这块代码
python
try:
    x = 10 / 0
except ZeroDivisionError:
    print("不能除以零")
else:
    print("没有错误发生")
finally:
    print("此代码总会执行")

四、函数

函数用于复用逻辑与组织代码。Python 用 def 定义函数,参数支持位置参数、默认参数、可变参数(*args / **kwargs)与关键字参数;也支持 lambda 匿名函数。

1. 定义函数与返回值

python
def function_name(parameters):
    # 函数体
    return value  # 可选返回值
python
def greet(name):
    print(f"Hello, {name}!")

greet("Alice")
greet("Bob")
python
def add(a, b):
    return a + b

result = add(3, 5)
print(result)  # 8

2. 参数

python
def subtract(a, b):
    return a - b

print(subtract(10, 3))  # 7
python
def greet2(name, greeting = "Hello"):
    print(f"{greeting}, {name}!")

greet2("Alice")
greet2("Bob", "Hi")
python
# 可变数量的参数 *args
def sum_numbers(*args):
    type(args) # 以元组形式接收
    return sum(args)

print(sum_numbers(1, 2, 3))         # 6
print(sum_numbers(1, 2, 3, 4, 5))   # 15

# 关键字参数 **kwargs
def greet_person(**kwargs):
    type(kwargs) # 以字典形式接收
    print(f"Hello {kwargs['name']}! Your age is {kwargs['age']}.")

greet_person(name="Alice", age=30)
python
def person_info(name, age):
    print(f"Name: {name}, Age: {age}")

person_info(name="Alice", age=25)

3. 匿名函数(lambda)

python
# 基础语法 函数名 = lambda 形参: 返回值
add2 = lambda x, y: x + y
print(add2(3, 5))  # 8

points = [(2, 3), (1, 1), (4, 5)]
points.sort(key=lambda x: x[1])
print(points)  # [(1, 1), (2, 3), (4, 5)]

4. 函数作用域(局部 / 全局)

python
x = 10  # 全局变量

def foo():
    x = 5  # 局部变量
    print(x)

foo()     # 5
print(x)  # 10
python
x = 10

def modify_global():
    global x
    x = 20

modify_global()
print(x)  # 20

5. 函数文档字符串(docstring)

python
def greet3(name):
    """
    该函数接受一个名字作为参数,并打印问候语。
    参数:
        name: 字符串,表示被问候的人的名字
    """
    print(f"Hello, {name}!")

help(greet3)

6. 递归函数

python
def factorial(n):
    if n == 0:
        return 1
    else:
        return n * factorial(n - 1)

print(factorial(5))  # 120

7. 异常模块与包

python
def func():
    raise Exception("抛出了一个问题")
func()
python
# 1. 内置模块

# 2. 第三方模块
import 模块名
from 模块名 import 功能名
from 模块名 import *

调用:模块名.功能名

# 3. 自定义模块

五、列表与序列进阶

1. 列表切片

切片语法 [start:stop:step] 适用于 list、tuple、str 等序列类型,左闭右开。

python
nums = [0, 1, 2, 3, 4, 5]

print(nums[1:4])    # [1, 2, 3] — 索引 1 到 3
print(nums[:3])     # [0, 1, 2] — 省略 start 从 0 开始
print(nums[3:])     # [3, 4, 5] — 省略 stop 到末尾
print(nums[::2])    # [0, 2, 4] — 步长为 2,隔一个取一个
print(nums[::-1])   # [5, 4, 3, 2, 1, 0] — 负步长倒序

# 浅拷贝(等价于 nums.copy())
copy = nums[:]

2. 推导式

Python 提供三种推导式,用简洁的表达式构造集合。

python
# 基础:[表达式 for 变量 in 可迭代对象]
squares = [x**2 for x in range(6)]     # [0, 1, 4, 9, 16, 25]

# 带 if 过滤
evens = [x for x in range(10) if x % 2 == 0]  # [0, 2, 4, 6, 8]

# 带 if-else 三元
labels = ["偶数" if x % 2 == 0 else "奇数" for x in range(4)]

# 嵌套循环
pairs = [(x, y) for x in "AB" for y in "12"]
python
# {键表达式: 值表达式 for ...}
squares_dict = {x: x**2 for x in range(4)}
# {0: 0, 1: 1, 2: 4, 3: 9}

# 反转键值
d = {"a": 1, "b": 2}
reversed_d = {v: k for k, v in d.items()}
# {1: 'a', 2: 'b'}
python
# {表达式 for ...}
unique_lengths = {len(w) for w in ["a", "bb", "ccc", "bb"]}
# {1, 2, 3}

3. 解包(unpacking)

将序列中的元素一次性赋值给多个变量,或用 * 收集剩余元素。

python
# 元组/列表解包
a, b, c = (1, 2, 3)         # a=1, b=2, c=3
first, *rest = [1, 2, 3, 4] # first=1, rest=[2, 3, 4]
*head, last = [1, 2, 3, 4]  # head=[1, 2, 3], last=4

# * 合并列表
a, b = [1, 2], [3, 4]
merged = [*a, *b]           # [1, 2, 3, 4]

六、常用内置函数

Python 内置了大量开箱即用的函数,无需 import 即可使用。以下按用途分组列出最常用的:

python
nums = [3, 7, 2, 9, 4]

len(nums)      # 5 — 序列长度
max(nums)      # 9 — 最大值
min(nums)      # 2 — 最小值
sum(nums)      # 25 — 求和
any(nums)      # True — 任一为真?
all(nums)      # True — 全部为真?
python
nums = [3, 7, 2, 9, 4]

sorted(nums)              # [2, 3, 4, 7, 9] — 返回新列表
sorted(nums, reverse=True) # [9, 7, 4, 3, 2] — 降序
list(reversed(nums))       # [4, 9, 2, 7, 3] — 反转

# key 参数:按自定义规则排序
words = ["apple", "kiwi", "banana"]
sorted(words, key=len)    # ['kiwi', 'apple', 'banana'] — 按长度
python
nums = [1, 2, 3, 4, 5]

# map:对每个元素执行同一操作
list(map(str, nums))       # ['1', '2', '3', '4', '5']

# filter:保留满足条件的元素
list(filter(lambda x: x > 2, nums))  # [3, 4, 5]

# 注意:map/filter 返回迭代器,需用 list() 转换
python
type(42)          # <class 'int'>
isinstance(42, int)  # True
isinstance(42, (int, float))  # True — 支持多类型

# 进制转换
bin(10)   # '0b1010' — 转二进制
hex(255)  # '0xff'   — 转十六进制
oct(8)    # '0o10'   — 转八进制

# 字符与编码
ord('A')   # 65
chr(65)    # 'A'
python
# range:生成整数序列
list(range(5))       # [0, 1, 2, 3, 4]
list(range(2, 7))    # [2, 3, 4, 5, 6]
list(range(0, 10, 2)) # [0, 2, 4, 6, 8] — 步长为 2

# enumerate:带索引遍历
for i, v in enumerate(['a', 'b', 'c']):
    print(i, v)

# zip:并行迭代
for a, b in zip([1, 2], ['x', 'y']):
    print(a, b)

七、文件操作

Python 通过内置的 open() 函数读写文件,配合 with 语句可自动关闭文件,避免资源泄漏。

1. 文件打开模式

模式说明
'r'只读(默认),文件不存在则报错
'w'写入(覆盖),文件不存在则创建
'a'追加写入,文件不存在则创建
'r+'读写,文件必须存在
'b'二进制模式,如 'rb''wb'

2. 读文件

python
# with 语句:离开代码块自动关闭文件
with open("example.txt", "r", encoding="utf-8") as f:
    content = f.read()       # 一次性读取全部
    # line = f.readline()    # 读取一行
    # lines = f.readlines()  # 读取所有行,返回列表

# 逐行读取(推荐:大文件不会撑爆内存)
with open("example.txt", "r", encoding="utf-8") as f:
    for line in f:
        print(line.strip())

3. 写文件

python
# 覆盖写入
with open("output.txt", "w", encoding="utf-8") as f:
    f.write("Hello\n")
    f.write("World\n")

# 追加写入
with open("output.txt", "a", encoding="utf-8") as f:
    f.write("追加的一行\n")

小结

📖 相关资源

CC BY-NC-SA 4.0 协议