Python核心知识总结

Python 核心编程知识点与案例应用(Java 开发者专属版)

专为 Java 开发者设计:重点标注 Python 与 Java 的核心差异,所有案例均为日常开发高频场景,无任何 AI 数学相关内容。学完即可独立完成数据处理、脚本编写、工具开发等基础任务。

一、基础语法与核心概念

1. 变量与数据类型

核心差异:Python 是动态类型语言,变量无需声明类型,可随时赋值不同类型的数据;Java 是静态类型语言,变量必须先声明类型。

数据类型 说明 与 Java 对比
整数 (int) 无大小限制 Java 有 byte/short/int/long 之分
浮点数 (float) 双精度浮点数 等同于 Java 的 double
字符串 (str) 单引号 / 双引号 / 三引号均可 Java 只能用双引号,三引号用于多行字符串
布尔值 (bool) True/False(首字母大写) Java 是 true/false(小写)
空值 (None) 表示空对象 等同于 Java 的 null

案例:变量与类型转换

    # 变量定义(无需声明类型)
    name = "张三"
    age = 25
    height = 1.75
    is_student = True

    # 类型转换
    age_str = str(age)  # 整数转字符串
    height_int = int(height)  # 浮点数转整数(截断小数部分)
    print(f"姓名:{name},年龄:{age},身高:{height},是否学生:{is_student}")

    # 查看变量类型
    print(type(name))  # <class 'str'>
    print(type(age))   # <class 'int'>

2. 运算符

  • 算术运算符+ - * / //(整除)%(取余)**(幂运算)
  • 比较运算符== != > < >= <=
  • 逻辑运算符and or not(Java 是&& || !
  • 赋值运算符= += -= *= /= //= %= **=

案例:简单计算器

    a = 10
    b = 3

    print(f"加法:{a + b}")      # 13
    print(f"减法:{a - b}")      # 7
    print(f"乘法:{a * b}")      # 30
    print(f"除法:{a / b}")      # 3.3333333333333335
    print(f"整除:{a // b}")     # 3
    print(f"取余:{a % b}")      # 1
    print(f"幂运算:{a ** b}")   # 1000

3. 控制流语句

核心差异:Python 使用缩进(通常 4 个空格)表示代码块,Java 使用大括号{}

(1) 条件语句

    score = 85

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

    print(f"成绩等级:{grade}")  # 良好

(2) 循环语句

  • for 循环:用于遍历可迭代对象(列表、字典、字符串等)
  • while 循环:当条件为 True 时执行循环体

案例:遍历列表与九九乘法表

    # 遍历列表
    fruits = ["苹果", "香蕉", "橙子"]
    for fruit in fruits:
        print(f"我喜欢吃{fruit}")

    # 九九乘法表
    for i in range(1, 10):
        for j in range(1, i+1):
            print(f"{j}×{i}={i*j}", end="\t")
        print()  # 换行

二、Python 核心数据结构

核心差异:Python 内置了列表、字典、集合、元组四种核心数据结构,语法比 Java 更简洁,功能更强大。

1. 列表 (list)

特点:有序、可变、可重复,类似于 Java 的 ArrayList,但更灵活。

常用操作

]    # 创建列表
    numbers = [1, 2, 3, 4, 5]
    fruits = ["苹果", "香蕉", "橙子"]

    # 访问元素(索引从0开始)
    print(fruits[0])   # 苹果
    print(fruits[-1])  # 橙子(负索引表示从末尾开始)

    # 修改元素
    fruits[1] = "葡萄"
    print(fruits)  # ['苹果', '葡萄', '橙子']

    # 添加元素
    fruits.append("西瓜")  # 末尾添加
    fruits.insert(1, "草莓")  # 指定位置插入
    print(fruits)  # ['苹果', '草莓', '葡萄', '橙子', '西瓜']

    # 删除元素
    fruits.remove("葡萄")  # 删除指定元素
    del fruits[0]  # 删除指定索引元素
    last_fruit = fruits.pop()  # 删除并返回末尾元素
    print(fruits)  # ['草莓', '橙子']

    # 切片操作([起始:结束:步长])
    numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    print(numbers[2:5])   # [3, 4, 5]
    print(numbers[:3])    # [1, 2, 3]
    print(numbers[5:])    # [6, 7, 8, 9]
    print(numbers[::2])   # [1, 3, 5, 7, 9]
    print(numbers[::-1])  # [9, 8, 7, 6, 5, 4, 3, 2, 1](反转列表)

案例:待办事项管理器

    todo_list = []

    def add_task(task):
        todo_list.append(task)
        print(f"已添加任务:{task}")

    def remove_task(index):
        if 0 <= index < len(todo_list):
            removed_task = todo_list.pop(index)
            print(f"已删除任务:{removed_task}")
        else:
            print("任务索引无效")

    def show_tasks():
        if not todo_list:
            print("待办事项为空")
        else:
            print("待办事项列表:")
            for i, task in enumerate(todo_list):
                print(f"{i+1}. {task}")

    # 测试
    add_task("学习Python")
    add_task("写代码")
    show_tasks()
    remove_task(0)
    show_tasks()

2. 字典 (dict)

特点:键值对存储、无序(Python3.7 + 有序)、键唯一不可变,类似于 Java 的 HashMap。

常用操作

]    # 创建字典
    student = {
        "name": "张三",
        "age": 20,
        "gender": "男",
        "scores": {"数学": 90, "语文": 85, "英语": 95}
    }

    # 访问值
    print(student["name"])  # 张三
    print(student.get("age"))  # 20
    print(student.get("address", "未知"))  # 键不存在时返回默认值

    # 修改/添加键值对
    student["age"] = 21
    student["address"] = "北京市"
    print(student)

    # 删除键值对
    del student["gender"]
    age = student.pop("age")
    print(student)

    # 遍历字典
    for key in student:
        print(f"{key}: {student[key]}")

    for key, value in student.items():
        print(f"{key}: {value}")

案例:学生成绩管理系统

    students = {}

    def add_student(id, name, scores):
        students[id] = {"name": name, "scores": scores}
        print(f"已添加学生:{name}")

    def get_student(id):
        if id in students:
            student = students[id]
            print(f"学号:{id}")
            print(f"姓名:{student['name']}")
            print("成绩:")
            for subject, score in student['scores'].items():
                print(f"  {subject}:{score}")
        else:
            print("学生不存在")

    def calculate_average(id):
        if id in students:
            scores = students[id]["scores"].values()
            average = sum(scores) / len(scores)
            print(f"平均成绩:{average:.2f}")
        else:
            print("学生不存在")

    # 测试
    add_student(1001, "张三", {"数学": 90, "语文": 85, "英语": 95})
    add_student(1002, "李四", {"数学": 80, "语文": 75, "英语": 85})
    get_student(1001)
    calculate_average(1001)

3. 集合 (set)

特点:无序、不可重复,类似于 Java 的 HashSet,常用于去重和集合运算。

常用操作

    # 创建集合
    s1 = {1, 2, 3, 4, 5}
    s2 = {4, 5, 6, 7, 8}

    # 添加元素
    s1.add(6)
    print(s1)  # {1, 2, 3, 4, 5, 6}

    # 删除元素
    s1.remove(6)
    print(s1)  # {1, 2, 3, 4, 5}

    # 集合运算
    print(s1 & s2)  # 交集 {4, 5}
    print(s1 | s2)  # 并集 {1, 2, 3, 4, 5, 6, 7, 8}
    print(s1 - s2)  # 差集 {1, 2, 3}
    print(s1 ^ s2)  # 对称差集 {1, 2, 3, 6, 7, 8}

    # 列表去重
    numbers = [1, 2, 2, 3, 3, 3, 4, 5, 5]
    unique_numbers = list(set(numbers))
    print(unique_numbers)  # [1, 2, 3, 4, 5]

4. 元组 (tuple)

特点:有序、不可变、可重复,类似于不可变的列表,常用于保护数据不被修改。

常用操作

    # 创建元组
    t1 = (1, 2, 3, 4, 5)
    t2 = ("张三", 20, "男")

    # 访问元素
    print(t1[0])  # 1
    print(t2[1])  # 20

    # 元组解包
    name, age, gender = t2
    print(f"姓名:{name},年龄:{age},性别:{gender}")

    # 元组不可修改
    # t1[0] = 10  # 会报错:TypeError: 'tuple' object does not support item assignment

5. 推导式(Python 特色语法)

核心优势:用一行代码生成列表、字典、集合,比 Java 的循环写法简洁得多。

    # 列表推导式
    # 生成1-10的平方数
    squares = [x**2 for x in range(1, 11)]
    print(squares)  # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

    # 带条件的列表推导式
    # 生成1-10中的偶数
    even_numbers = [x for x in range(1, 11) if x % 2 == 0]
    print(even_numbers)  # [2, 4, 6, 8, 10]

    # 字典推导式
    # 将列表转换为字典,键为元素,值为元素的平方
    square_dict = {x: x**2 for x in range(1, 6)}
    print(square_dict)  # {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

    # 集合推导式
    # 生成1-10中奇数的平方
    odd_squares = {x**2 for x in range(1, 11) if x % 2 != 0}
    print(odd_squares)  # {1, 9, 25, 49, 81}

三、函数与模块

1. 函数定义与调用

核心差异:Python 函数是一等公民,可以作为参数传递、返回值、赋值给变量,这是 Java 没有的特性。

    # 定义函数
    def add(a, b):
        """计算两个数的和"""
        return a + b

    # 调用函数
    result = add(3, 5)
    print(result)  # 8

    # 函数作为参数传递
    def calculate(func, a, b):
        return func(a, b)

    print(calculate(add, 3, 5))  # 8

2. 函数参数

  • 位置参数:按顺序传递

  • 关键字参数:按参数名传递

  • 默认参数:定义时指定默认值

  • 可变参数*args(接收任意多个位置参数)、**kwargs(接收任意多个关键字参数)

      # 默认参数
      def greet(name, message="你好"):
          print(f"{message},{name}!")
      greet("张三")  # 你好,张三!
      greet("李四", "早上好")  # 早上好,李四!
      greet(message="晚上好", name="王五")  # 晚上好,王五!
    
      # 可变参数
      def sum_numbers(*args):
          total = 0
          for num in args:
              total += num
          return total
    
      print(sum_numbers(1, 2, 3))  # 6
      print(sum_numbers(1, 2, 3, 4, 5))  # 15
    
      def print_info(**kwargs):
          for key, value in kwargs.items():
              print(f"{key}: {value}")
    
      print_info(name="张三", age=20, gender="男")
    

3. 匿名函数 (lambda)

用于定义简单的单行函数,类似于 Java 的 Lambda 表达式。

    # 定义匿名函数
    add = lambda a, b: a + b
    print(add(3, 5))  # 8
    # 结合内置函数使用
    numbers = [1, 2, 3, 4, 5]
    squares = list(map(lambda x: x**2, numbers))
    print(squares)  # [1, 4, 9, 16, 25]

    even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
    print(even_numbers)  # [2, 4]

4. 装饰器(Python 高级特性)

作用:在不修改原函数代码的情况下,为函数添加额外功能,是 Python 面向切面编程 (AOP) 的实现方式。

案例:函数执行时间计时器

    import time
    def timer(func):
        def wrapper(*args, **kwargs):
            start_time = time.time()
            result = func(*args, **kwargs)
            end_time = time.time()
            print(f"函数{func.__name__}执行时间:{end_time - start_time:.4f}秒")
            return result
        return wrapper

    # 使用装饰器
    @timer
    def slow_function():
        time.sleep(2)
        print("函数执行完成")

    slow_function()

5. 模块与包

核心差异:Python 的模块就是一个.py文件,包是包含__init__.py文件的目录,用于组织代码。

python

    # 导入整个模块
    import math
    print(math.pi)  # 3.141592653589793
    print(math.sqrt(16))  # 4.0
    # 导入模块中的特定函数
    from math import pi, sqrt
    print(pi)  # 3.141592653589793
    print(sqrt(16))  # 4.0

    # 导入模块并起别名
    import math as m
    print(m.pi)  # 3.141592653589793

四、面向对象编程

核心差异:Python 的面向对象比 Java 更灵活,支持多继承,没有接口概念,所有属性和方法默认都是公有的。

1. 类与对象

    # 定义类
    class Person:
        # 构造方法
        def __init__(self, name, age):
            self.name = name  # 实例属性
            self.age = age
        # 实例方法
        def say_hello(self):
            print(f"大家好,我是{self.name},今年{self.age}岁")

    # 创建对象
    person1 = Person("张三", 20)
    # 访问属性        使用点号 . 来访问对象的属性
    person1.say_hello()  # 大家好,我是张三,今年20岁

    # 访问,新增和修改属性
    print(person1.name)  # 张三
    person1.phone = 10086 # 新增属性
    person1.phone = 1008611 # 修改属性
    print(person1.phone)  # 1008611
    # 删除属性
    del person1.phone
    --- 用函数的方式来访问属性
    hasattr(person1, 'age')    # 如果存在 'age' 属性返回 True。
    getattr(person1, 'age')    # 返回 'age' 属性的值
    setattr(person1, 'age', 8) # 添加属性 'age' 值为 8
    delattr(person1, 'age')    # 删除属性 'age'

2. 继承

    # 子类继承父类
    class Student(Person):
        def __init__(self, name, age, student_id):
            super().__init__(name, age)  # 调用父类构造方法
            self.student_id = student_id
        # 重写父类方法
        def say_hello(self):
            print(f"大家好,我是{self.name},今年{self.age}岁,学号是{self.student_id}")

        # 子类特有方法
        def study(self, subject):
            print(f"{self.name}正在学习{subject}")

    # 创建子类对象
    student1 = Student("李四", 18, 1001)
    student1.say_hello()  # 大家好,我是李四,今年18岁,学号是1001
    student1.study("Python")  # 李四正在学习Python

3. 魔法方法

Python 中以双下划线开头和结尾的方法,用于实现类的特殊行为。

    class Book:
        def __init__(self, title, author, price):
            self.title = title
            self.author = author
            self.price = price
        # 自定义对象的字符串表示
        def __str__(self):
            return f"《{self.title}》- {self.author},价格:{self.price}元"

        # 自定义对象的相等比较
        def __eq__(self, other):
            if isinstance(other, Book):
                return self.title == other.title and self.author == other.author
            return False

    book1 = Book("Python编程", "张三", 59.9)
    book2 = Book("Python编程", "张三", 69.9)

    print(book1)  # 《Python编程》- 张三,价格:59.9元
    print(book1 == book2)  # True(因为标题和作者相同)

常见的魔法方法

  1. 对象的“出生”与销毁
魔法方法 作用
__init__ 初始化对象时自动调用(构造函数
__del__ 对象销毁时自动调用(析构函数
__new__ 创建对象本体,比 init 更早执行

注意:平时只用重写 __init__ 就够了,__new____del__ 是进阶场景

class Dog:
    def __init__(self, name):
        print("一只狗出生了")
        self.name = name

    def __del__(self):
        print(f"{self.name} 被销毁了")

d = Dog("大黄")
  1. 对象怎么“被打印”
魔法方法 作用
__str__ 控制 print(obj) 的输出
__repr__ 控制调试时的显示,推荐写得更精准
class Book:
    def __init__(self, title):
        self.title = title

    def __str__(self):
        return f"  {self.title}"

    def __repr__(self):
        return f"Book('{self.title}')"

b = Book("Python入门")
print(b)         # 调用 __str__
print([b])       # 调用 __repr__
  1. 运算符重载,让对象也能 + - * ==
魔法方法 作用
__add__ + 运算
__sub__ - 运算
__eq__ == 比较是否相等
__lt__ < 比较大小
class Price:
    def __init__(self, yuan):
        self.yuan = yuan

    def __add__(self, other):
        return Price(self.yuan + other.yuan)

    def __eq__(self, other):
        return self.yuan == other.yuan

    def __str__(self):
        return f"{self.yuan}元"

p1 = Price(30)
p2 = Price(20)
print(p1 + p2)        # 输出 50元
print(p1 == p2)       # False
  1. 让对象支持索引、遍历、len()
魔法方法 作用
__getitem__ 支持 obj[index]
__setitem__ 支持赋值 obj[key] = val
__delitem__ 删除元素
__len__ 支持 len(obj)
contains 支持 in 判断是否包含
__iter__, __next__ 支持 for ... in 遍历
class MyList:
    def __init__(self):
        self.data = [1, 2, 3]

    def __getitem__(self, index):
        return self.data[index]

    def __len__(self):
        return len(self.data)

ml = MyList()
print(ml[0])      # 输出 1
print(len(ml))    # 输出 3
  1. 让对象能像函数一样调用
魔法方法 作用
__call__ 支持 obj() 形式调用
class Hello:
    def __call__(self, name):
        print(f"你好,{name}!")

h = Hello()
h("张三")  # 相当于调用函数
  1. 上下文管理器(配合with)
魔法方法 作用
__enter__ 进入上下文时调用
__exit__ 离开上下文时调用
class MyContext:
    def __enter__(self):
        print("进入上下文")
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        print("退出上下文")

with MyContext():
    print("处理中...")
  1. 对象的真假值和哈希值
魔法方法 作用
__bool__ 控制对象的布尔值(用于 if)
__hash__ 是否可作为字典的 key
class Empty:
    def __bool__(self):
        return False

e = Empty()
if not e:
    print("对象被认为是 False")

五、文件操作与异常处理

1. 读取键盘输入

  • raw_input 从标准输入读取一个行,并返回一个字符串(去掉结尾的换行符)

  • input 接收一个Python表达式作为输入,并将运算结果返回

2. 文件读写

核心差异:Python 推荐使用with语句(上下文管理器)自动管理文件资源,无需手动关闭文件,避免资源泄漏。

    # 写入文件
    with open("test.txt", "w", encoding="utf-8") as f:
        f.write("Hello, Python!\n")
        f.write("这是一个测试文件\n")
    # 读取文件
    with open("test.txt", "r", encoding="utf-8") as f:
        # 读取全部内容
        content = f.read()
        print(content)

    # 逐行读取
    with open("test.txt", "r", encoding="utf-8") as f:
        for line in f:
            print(line.strip())  # strip()去除换行符和空格
模式 描述
t 文本模式 (默认)。
x 写模式,新建一个文件,如果该文件已存在则会报错。
b 二进制模式。
+ 打开一个文件进行更新(可读可写)。
U 通用换行模式(不推荐)。
r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。
r+ 打开一个文件用于读写。文件指针将会放在文件的开头。
rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。
w 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
w+ 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

2. 异常处理

核心差异:Python 的异常处理语法比 Java 更简洁,支持elsefinally子句。

python

    try:
        # 可能会抛出异常的代码
        num1 = int(input("请输入第一个数:"))
        num2 = int(input("请输入第二个数:"))
        result = num1 / num2
    except ValueError:
        print("输入的不是有效的整数")
    except ZeroDivisionError:
        print("除数不能为零")
    else:
        # 没有异常时执行
        print(f"结果是:{result}")
    finally:
        # 无论是否有异常都会执行
        print("程序执行结束")

六、常用标准库

1. os 模块:操作系统接口

    import os
    # 获取当前工作目录
    print(os.getcwd())

    # 列出目录下的文件
    print(os.listdir("."))

    # 创建目录
    os.mkdir("test_dir")

    # 删除目录
    os.rmdir("test_dir")

    # 检查文件是否存在
    print(os.path.exists("test.txt"))

    # 获取文件大小
    print(os.path.getsize("test.txt"))

2. datetime 模块:日期时间处理

    from datetime import datetime, timedelta
    # 获取当前时间
    now = datetime.now()
    print(now)  # 2026-05-08 15:30:00.123456

    # 格式化时间
    print(now.strftime("%Y-%m-%d %H:%M:%S"))  # 2026-05-08 15:30:00

    # 时间计算
    tomorrow = now + timedelta(days=1)
    print(tomorrow)

    # 字符串转时间
    date_str = "2026-05-08"
    date = datetime.strptime(date_str, "%Y-%m-%d")
    print(date)

3. json 模块:JSON 数据处理

    import json
    # Python对象转JSON字符串
    student = {
        "name": "张三",
        "age": 20,
        "gender": "男"
    }
    json_str = json.dumps(student, ensure_ascii=False, indent=4)
    print(json_str)

    # JSON字符串转Python对象
    json_str = '{"name": "李四", "age": 18, "gender": "女"}'
    student = json.loads(json_str)
    print(student["name"])  # 李四

    # 写入JSON文件
    with open("student.json", "w", encoding="utf-8") as f:
        json.dump(student, f, ensure_ascii=False, indent=4)

    # 读取JSON文件
    with open("student.json", "r", encoding="utf-8") as f:
        student = json.load(f)
        print(student)

4. re 模块:正则表达式

    import re
    # 匹配手机号码
    phone_pattern = r"^1[3-9]\d{9}$"
    phone = "13812345678"
    if re.match(phone_pattern, phone):
        print("手机号码格式正确")
    else:
        print("手机号码格式错误")
    # 提取邮箱地址
    text = "我的邮箱是zhangsan@example.com,李四的邮箱是lisi@test.com"
    email_pattern = r"\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b"
    emails = re.findall(email_pattern, text)
    print(emails)  # ['zhangsan@example.com', 'lisi@test.com']
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容