Python基础知识点全解析:从入门到精通

一、Python 环境搭建与入门

1.1 安装 Python

  • 官网下载 :访问 Python 官网,根据系统(Windows/macOS/Linux)下载对应版本(建议选择 3.8+ 稳定版)

  • 验证安装

    bash 复制代码
    python --version
    # 或
    python3 --version

1.2 开发工具选择

工具 特点 推荐场景
IDLE Python 自带轻量级 IDE 写小脚本、快速验证
VS Code 微软开源,插件丰富 强烈推荐,适合绝大多数开发者
PyCharm JetBrains 专业 IDE 大型项目开发(社区版免费)

1.3 第一个 Python 程序

创建 hello.py

python 复制代码
# 这是一行注释(用 # 开头)
print("Hello, Python!")  # 输出语句

运行:

bash 复制代码
python hello.py

输出结果:

复制代码
Hello, Python!

二、变量与数据类型

2.1 变量的本质与命名规则

变量:内存中存储数据的"容器",通过变量名访问数据。

命名规则:

  • 只能包含字母、数字、下划线(_),且不能以数字开头
  • 区分大小写Namename 是不同变量)
  • 不能使用 Python 关键字(如 iffordef 等)
  • 建议遵循 snake_case (如 user_name),类名使用 大驼峰 (如 StudentInfo

2.2 基础数据类型

Python 内置 6 种基础数据类型,可通过 type() 函数查看:

类型 描述 示例
int 整数,支持任意大整数 5, -3, 1000
float 浮点数(双精度) 3.14, -2.5
bool 布尔值 True, False
str 字符串 'hello', "Python"
NoneType 空值 x = None
complex 复数 3+4j

2.3 字符串进阶操作

2.3.1 字符串拼接与格式化
python 复制代码
name = "张三"
age = 20

# 方式1:+ 拼接(需转换非字符串类型)
info = "姓名:" + name + ",年龄:" + str(age)

# 方式2:f-string(Python 3.6+ 推荐,自动转换类型)
info = f"姓名:{name},年龄:{age}"

# 方式3:format() 方法
print("姓名:{},分数:{}".format("李四", 95))

# 方式4:% 格式化(旧语法)
print("圆周率:%.2f" % 3.14159)  # 输出:圆周率:3.14
2.3.2 字符串常用方法
方法 功能 示例
len(s) 返回长度 len("abc")3
s.upper() 转大写 "hello".upper()"HELLO"
s.lower() 转小写 "WORLD".lower()"world"
s.strip() 去除首尾空格 " test ".strip()"test"
s.split(sep) 按分隔符分割 "a,b,c".split(",")["a","b","c"]
s.replace(old, new) 替换 "apple".replace("a", "A")"Apple"
s.startswith() 判断是否以某字符串开头 "hello".startswith("he")True
s.endswith() 判断是否以某字符串结尾 "hello".endswith("lo")True

三、运算符与表达式

3.1 算术运算符

运算符 描述 示例 结果
+ 加法 5 + 3 8
- 减法 7 - 2 5
* 乘法 4 * 6 24
/ 除法(浮点) 10 / 3 3.333...
// 整除 10 // 3 3
% 取余 10 % 3 1
** 幂运算 2 ** 3 8

3.2 比较运算符

返回布尔值(True/False):

运算符 描述
== 等于
!= 不等于
> 大于
< 小于
>= 大于等于
<= 小于等于

3.3 逻辑运算符

运算符 描述 示例 结果
and 逻辑与(全真为真) (5 > 3) and (2 < 4) True
or 逻辑或(有真为真) (5 < 3) or (2 > 4) False
not 逻辑非(取反) not (5 == 3) True

3.4 成员与身份运算符

python 复制代码
# 成员运算符
"a" in "abc"        # True
"d" not in "abc"    # True

# 身份运算符(判断内存地址是否相同)
a = [1, 2]
b = [1, 2]
a is b              # False(不同对象)
a == b              # True(值相等)

四、流程控制:条件与循环

4.1 条件语句(if-elif-else)

python 复制代码
score = 85

if score >= 90:
    print("优秀")
elif score >= 80:
    print("良好")
elif score >= 60:
    print("及格")
else:
    print("不及格")

三元运算符(条件表达式):

python 复制代码
status = "成年" if age >= 18 else "未成年"

4.2 循环语句

4.2.1 for 循环
python 复制代码
# 遍历列表
fruits = ["苹果", "香蕉", "橘子"]
for fruit in fruits:
    print(fruit)

# 遍历字符串
for char in "Python":
    print(char)

# 遍历字典
person = {"name": "张三", "age": 20}
for key, value in person.items():
    print(f"{key}: {value}")

# range() 生成数字序列
for i in range(5):      # 0, 1, 2, 3, 4
    print(i)
4.2.2 while 循环
python 复制代码
count = 0
while count < 5:
    print(f"当前计数:{count}")
    count += 1

4.3 循环控制语句

关键字 作用
break 终止当前循环,跳出循环体
continue 跳过当前迭代,进入下一次循环
else 循环正常结束 后执行(被 break 终止则不执行)
python 复制代码
# 示例:寻找第一个偶数
numbers = [1, 3, 5, 7, 8, 9]
for num in numbers:
    if num % 2 == 0:
        print(f"找到偶数:{num}")
        break
else:
    print("未找到偶数")  # 若循环未被 break 则执行

五、函数:代码复用的核心

5.1 函数定义与调用

python 复制代码
def 函数名(参数1, 参数2=默认值):
    """函数文档字符串(说明功能、参数、返回值)"""
    代码块
    return 返回值  # 可选,无 return 则返回 None

5.2 参数类型

5.2.1 位置参数(必传)
python 复制代码
def add(a, b):
    return a + b

add(3, 5)  # 输出 8
5.2.2 默认参数(可选)
python 复制代码
def greet(name, msg="早上好"):
    print(f"{name},{msg}!")

greet("张三")              # 张三,早上好!
greet("李四", "晚上好")     # 李四,晚上好!
5.2.3 可变参数(*args)

接收任意数量的位置参数,存储为元组

python 复制代码
def sum_numbers(*args):
    return sum(args)

sum_numbers(1, 2, 3, 4)  # 输出 10
5.2.4 关键字参数(**kwargs)

接收任意数量的键值对参数,存储为字典

python 复制代码
def print_info(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

print_info(name="张三", age=20, city="北京")

5.3 lambda 表达式(匿名函数)

用于快速定义简单函数:

python 复制代码
# 普通函数
def square(x):
    return x ** 2

# lambda 等价写法
square = lambda x: x ** 2
print(square(5))  # 输出 25

# 结合函数式编程
numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x**2, numbers))  # [1, 4, 9, 16, 25]

# 使用 lambda 排序
users = [{"name": "张三", "age": 30}, {"name": "李四", "age": 25}]
sorted_users = sorted(users, key=lambda user: user["age"])

六、数据结构:列表、元组、字典、集合

6.1 列表(list):有序可变容器

python 复制代码
nums = [1, 2, 3]
操作 示例 结果
索引访问 nums[0] 1
切片 nums[1:3] [2, 3]
修改元素 nums[0] = 10 [10, 2, 3]
末尾添加 nums.append(4) [10, 2, 3, 4]
指定位置插入 nums.insert(1, 9) [10, 9, 2, 3, 4]
删除(按值) nums.remove(9) [10, 2, 3, 4]
删除(按索引) nums.pop(0) [2, 3, 4]
排序 nums.sort() 升序排列
反转 nums.reverse() 反转列表

列表推导式(高效生成列表):

python 复制代码
# 生成 0-9 的平方列表
squares = [x**2 for x in range(10)]  # [0, 1, 4, 9, ..., 81]

# 筛选偶数的平方
even_squares = [x**2 for x in range(10) if x % 2 == 0]  # [0, 4, 16, 36, 64]

# 嵌套列表转平面列表
matrix = [[1, 2], [3, 4], [5, 6]]
flattened = [num for row in matrix for num in row]  # [1, 2, 3, 4, 5, 6]

6.2 元组(tuple):有序不可变容器

python 复制代码
t = (1, "a", True)
# t[0] = 2  # 报错:TypeError,元素不可修改

# 单元素元组需要逗号
single = (42,)      # 元组
not_tuple = (42)    # 整数

# 元组解包
coordinates = (10, 20)
x, y = coordinates  # x=10, y=20

6.3 字典(dict):键值对映射

python 复制代码
person = {"name": "张三", "age": 20}
操作 示例 结果
访问值 person["name"] "张三"
安全访问 person.get("email", "未设置") "未设置"
添加/修改 person["age"] = 26 更新值
删除 del person["age"] 删除键值对
获取所有键 person.keys() dict_keys(['name'])
获取所有值 person.values() dict_values(['张三'])
获取键值对 person.items() dict_items([('name', '张三')])

字典推导式:

python 复制代码
# 生成字母与其 ASCII 码的字典
ascii_dict = {char: ord(char) for char in "abc"}  # {'a': 97, 'b': 98, 'c': 99}

6.4 集合(set):无序唯一元素容器

python 复制代码
s1 = {1, 2, 3}
s2 = {2, 3, 4}

# 交集
print(s1 & s2)  # {2, 3}

# 并集
print(s1 | s2)  # {1, 2, 3, 4}

# 差集
print(s1 - s2)  # {1}

七、异常处理:让程序更健壮

7.1 异常捕获(try-except)

python 复制代码
try:
    num = int(input("请输入一个整数:"))
    result = 10 / num
    print(f"结果是:{result}")
except ValueError:
    print("输入无效,请输入整数!")
except ZeroDivisionError:
    print("不能除以零!")
except Exception as e:
    print(f"发生错误:{e}")
finally:
    print("无论是否异常,都会执行(常用于资源释放)")

7.2 自定义异常

python 复制代码
class AgeError(Exception):
    def __init__(self, message):
        super().__init__(message)

def check_age(age):
    if age < 0:
        raise AgeError("年龄不能为负数!")
    elif age > 150:
        raise AgeError("年龄不合理!")

try:
    check_age(-5)
except AgeError as e:
    print(e)  # 年龄不能为负数!

八、模块与包:代码组织的艺术

8.1 导入模块的方式

python 复制代码
# 方式1:导入整个模块
import math
print(math.sqrt(16))  # 4.0

# 方式2:导入指定函数
from math import sqrt
print(sqrt(16))  # 4.0

# 方式3:重命名模块
import numpy as np

# 方式4:导入多个函数
from math import sin, cos, tan

8.2 包(Package)

包是包含多个模块的文件夹,需创建 __init__.py 文件(可空)标识为包:

复制代码
my_package/
├── __init__.py
├── module1.py
└── module2.py

8.3 模块搜索路径

  1. 当前目录
  2. 环境变量 PYTHONPATH 中的路径
  3. Python 安装的默认库路径(如 site-packages

九、文件操作:数据的持久化

9.1 文件打开模式

模式 描述
r 只读(默认),文件不存在报错
w 只写(覆盖),不存在则创建
a 追加写,不存在则创建
r+ 读写(从开头开始)
w+ 读写(覆盖原有内容)
a+ 读写(追加到末尾)
b 二进制模式(如 rb, wb

9.2 文件读写示例

python 复制代码
# 写入文件(覆盖模式)
with open("demo.txt", "w", encoding="utf-8") as f:
    f.write("Hello\n")
    f.write("Python\n")

# 读取文件(逐行读取,内存友好)
with open("demo.txt", "r", encoding="utf-8") as f:
    for line in f:
        print(line.strip())  # strip() 移除行尾换行符

9.3 CSV 文件处理

python 复制代码
import csv

# 写入 CSV
with open("users.csv", "w", newline="", encoding="utf-8") as file:
    writer = csv.writer(file)
    writer.writerow(["姓名", "年龄", "城市"])
    writer.writerow(["张三", 25, "北京"])

# 读取 CSV
with open("users.csv", "r", encoding="utf-8") as file:
    reader = csv.DictReader(file)
    for row in reader:
        print(f"{row['姓名']} 来自 {row['城市']}")

9.4 文件路径处理(pathlib)

python 复制代码
from pathlib import Path

path = Path("data") / "users.txt"  # 自动处理路径分隔符
if not path.exists():
    path.parent.mkdir(parents=True)

十、面向对象编程(OOP)

10.1 类与对象

python 复制代码
class Person:
    # 类属性(所有实例共享)
    species = "人类"

    # 构造方法(初始化实例属性)
    def __init__(self, name, age):
        self.name = name  # 实例属性
        self.age = age

    # 实例方法
    def introduce(self):
        print(f"我是{self.name},{self.age}岁,属于{self.species}。")

# 创建对象(实例化)
p1 = Person("张三", 20)
p1.introduce()  # 我是张三,20岁,属于人类。

10.2 继承与多态

python 复制代码
# 父类(基类)
class Animal:
    def __init__(self, name):
        self.name = name
    
    def make_sound(self):
        raise NotImplementedError("子类必须实现此方法")

# 子类(派生类)
class Dog(Animal):
    def make_sound(self):
        return "汪汪!"

class Cat(Animal):
    def make_sound(self):
        return "喵喵~"

# 多态示例
def animal_speak(animal):
    print(f"{animal.name} 说:{animal.make_sound()}")

dog = Dog("旺财")
cat = Cat("咪咪")
animal_speak(dog)  # 旺财 说:汪汪!
animal_speak(cat)  # 咪咪 说:喵喵~

10.3 封装与访问控制

python 复制代码
class Account:
    def __init__(self, balance):
        self.__balance = balance  # 私有属性(双下划线)
        self._owner = "张三"       # 保护属性(单下划线,约定不直接访问)

    def get_balance(self):
        return self.__balance  # 公有方法访问私有属性

acc = Account(1000)
# print(acc.__balance)  # 报错:AttributeError
print(acc.get_balance())  # 1000

十一、30个实用技巧速查

1-5:基础数据类型技巧

python 复制代码
# 1. 多变量赋值
x, y, z = 1, 2, 3

# 2. 交换变量值(无需临时变量)
a, b = 5, 10
a, b = b, a  # a=10, b=5

# 3. 常量约定(Python 无真正常量)
MAX_USERS = 100  # 全大写表示不应修改

# 4. 链式比较
if 1 < x < 10:  # 等价于 x > 1 and x < 10

# 5. 布尔值转换规则
print(bool(0))      # False
print(bool(1))      # True
print(bool(""))     # False
print(bool("text")) # True

6-10:数据结构技巧

python 复制代码
# 6. 列表切片高级用法
nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
last_three = nums[-3:]      # [7, 8, 9]
reversed_list = nums[::-1]  # 反转
every_second = nums[::2]    # [0, 2, 4, 6, 8]

# 7. 字典 get 方法(安全访问)
email = user.get("email", "未设置")  # 键不存在返回默认值

# 8. 集合去重
numbers = [1, 2, 2, 3, 3, 3]
unique = list(set(numbers))  # [1, 2, 3]

# 9. 元组解包
r, g, b = (255, 0, 0)

# 10. 枚举遍历(获取索引和值)
for index, value in enumerate(["a", "b", "c"]):
    print(index, value)

11-15:控制流技巧

python 复制代码
# 11. for-else 结构(循环正常完成时执行)
for i in range(3):
    print(i)
else:
    print("循环正常完成,未被 break")

# 12. 条件表达式(三元运算符)
status = "成年" if age >= 18 else "未成年"

# 13. 真值判断(非空即真)
name = ""
if not name:  # 空字符串视为 False
    print("名字未设置")

# 14. 字典推导式
square_dict = {n: n**2 for n in range(5) if n % 2 == 0}

# 15. 同时遍历多个列表
names = ["张三", "李四"]
ages = [20, 25]
for name, age in zip(names, ages):
    print(f"{name}: {age}")

16-20:函数技巧

python 复制代码
# 16. 多返回值(实际是返回元组)
def get_dimensions(width, height):
    return width * height, 2 * (width + height)

area, perimeter = get_dimensions(5, 3)

# 17. 函数文档字符串
def greet(name):
    """向指定的人问好"""
    return f"你好,{name}!"

# 18. 全局变量修改
count = 0
def increment():
    global count
    count += 1

# 19. 参数类型提示(Python 3.5+)
def add(a: int, b: int) -> int:
    return a + b

# 20. 装饰器基础
import functools
def my_decorator(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        print("调用前")
        result = func(*args, **kwargs)
        print("调用后")
        return result
    return wrapper

21-25:文件与异常技巧

python 复制代码
# 21. with 语句自动管理资源
with open("file.txt", "r", encoding="utf-8") as f:
    content = f.read()

# 22. 捕获多个异常
except (FileNotFoundError, PermissionError) as e:
    print(f"文件错误:{e}")

# 23. 抛出异常
def validate_age(age):
    if age < 0:
        raise ValueError("年龄不能为负数")

# 24. 自定义异常类
class ValidationError(Exception):
    pass

# 25. 使用 pathlib 处理路径
from pathlib import Path
path = Path.home() / "documents" / "file.txt"

26-30:模块与OOP技巧

python 复制代码
# 26. 导入模块别名
import datetime as dt
from math import sqrt as square_root

# 27. 检查对象类型
print(isinstance(dog, Animal))  # True
print(type(dog).__name__)       # "Dog"

# 28. 类属性和实例属性
class Config:
    version = "1.0"  # 类属性(共享)
    
    def __init__(self):
        self.name = "实例属性"

# 29. 类方法 vs 静态方法
class MyClass:
    @classmethod
    def class_method(cls):
        pass
    
    @staticmethod
    def static_method():
        pass

# 30. 魔术方法(双下划线方法)
class Vector:
    def __init__(self, x, y):
        self.x = x
        self.y = y
    
    def __add__(self, other):  # 重载 + 运算符
        return Vector(self.x + other.x, self.y + other.y)
    
    def __str__(self):  # 自定义字符串表示
        return f"Vector({self.x}, {self.y})"

学习建议

  1. 多敲代码:每学一个知识点,立刻动手编写示例并调试,不要只看不练
  2. 善用官方文档 :熟练后多查阅 Python 官方文档,学习标准库
  3. 参与项目实践:从简单项目(如学生信息管理系统、爬虫、数据分析)开始巩固
  4. 理解"Pythonic":遵循 PEP 8 规范,写出简洁优雅的代码
  5. 建立知识体系:将零散知识点串联,形成完整的知识网络

结语:Python 的魅力在于其简洁与强大。本文系统梳理了从入门到进阶的核心知识点,但"纸上得来终觉浅",唯有持续实践,方能真正掌握这门语言。愿你在 Python 编程之路上越走越远!

相关推荐
m0_602857762 小时前
mysql如何编写递归存储过程_mysql max_sp_recursion_depth设置
jvm·数据库·python
2401_846339562 小时前
CSS开发规范如何制定_以BEM命名法为基础构建规范体系
jvm·数据库·python
AI人工智能+电脑小能手2 小时前
【大白话说Java面试题】【Java基础篇】第17题:HashMap的加载因子为什么是0.75而不是1或0.5
java·开发语言·算法·哈希算法·散列表
PSLoverS2 小时前
CSS如何实现自适应宽度的标签页_利用CSS变量计算Tab宽度
jvm·数据库·python
2301_787312432 小时前
MySQL版本迁移中如何处理全局变量_手动比对新旧配置文件
jvm·数据库·python
AKA__Zas2 小时前
初识多线程(初初识)
java·服务器·开发语言·学习方法
LiAo_1996_Y2 小时前
JavaScript中利用宏任务拆分阻塞任务的实操案例
jvm·数据库·python
qq_349317482 小时前
如何在 Go 中安全高效地将 SSH 公钥复制到远程服务器
jvm·数据库·python
zhangrelay2 小时前
三分钟云课实践速通--概率统计--python版
linux·开发语言·笔记·python·学习·ubuntu