课程 4:Python入门

课程目录

基础篇

进阶篇

📋 课程总结

1. 编程基础概念

1.1 什么是编程

编程是使用计算机语言编写指令,让计算机按照我们的想法执行任务的过程。就像人类使用语言交流一样,我们需要用编程语言与计算机"对话",告诉它要做什么、怎么做。

编程就像做菜

想象一下做菜的过程:

编程的基本概念

编程学习建议

编程学习是一个循序渐进的过程,需要持续练习和实践。

初学者阶段
进阶阶段
学习建议

1.2 编程语言分类

编程语言有很多种,可以按照不同的方式进行分类:

按执行方式分类

按编程思想分类

按应用领域分类

1.3 为什么选择Python

Python是一门非常适合初学者的编程语言,具有以下优势:

Python的优势

代码对比示例

Python的语法比其他语言更简洁:

# Python(简洁)
name = "Alice"
age = 25
print(f"Hello, {name}! You are {age} years old.")

# Java(相对复杂)
String name = "Alice";
int age = 25;
System.out.println("Hello, " + name + "! You are " + age + " years old.");

# C++(更复杂)
#include <iostream>
#include <string>
using namespace std;
int main() {
    string name = "Alice";
    int age = 25;
    cout << "Hello, " << name << "! You are " << age << " years old." << endl;
    return 0;
}

# C#(相对复杂)
using System;
class Program {
    static void Main() {
        string name = "Alice";
        int age = 25;
        Console.WriteLine($"Hello, {name}! You are {age} years old.");
    }
}

# C(最复杂)
#include <stdio.h>
int main() {
    char name[] = "Alice";
    int age = 25;
    printf("Hello, %s! You are %d years old.\n", name, age);
    return 0;
}

1.4 Python应用领域

Python是一门功能强大的编程语言,在各个领域都有广泛的应用:

Web开发

代表公司:Instagram、Pinterest、YouTube

数据科学与分析

代表公司:Netflix、Spotify、Uber

人工智能与机器学习

代表公司:Google、OpenAI、Tesla

自动化与脚本

应用场景:DevOps、运维自动化、办公自动化

游戏开发

代表作品:EVE Online、Civilization IV

科学计算

应用领域:NASA、CERN、学术研究

1.5 编程思维培养

学习编程不仅仅是学习语法,更重要的是培养编程思维。编程思维是一种解决问题的思维方式,它能够帮助我们更有效地分析问题、设计解决方案并实现目标。

编程思维要点

逻辑思维

逻辑思维是编程的基础,要求按照严格的逻辑顺序来分析和解决问题。

# 逻辑思维示例
if temperature > 30:
    print("天气炎热")
elif temperature > 20:
    print("天气温暖")
else:
    print("天气凉爽")

抽象思维

抽象思维是将复杂问题简化为可管理的概念和模型的能力。

# 抽象思维示例
class Student:
    def __init__(self, name, age):
        self.name = name
        self.age = age
# 将学生抽象为对象

系统思维

系统思维考虑问题的整体性和各部分之间的关系,注重系统的整体功能。

# 系统思维示例
def process_data(data):
    cleaned = clean_data(data)
    analyzed = analyze_data(cleaned)
    return generate_report(analyzed)
# 系统化的数据处理流程

编程思维培养方法

问题分解法

将复杂问题分解为更小、更易管理的子问题。

# 问题分解示例
# 开发购物网站
1. 用户注册系统
2. 商品展示模块
3. 购物车功能
4. 支付系统集成

模式识别法

识别问题中的重复模式和规律,应用已知的解决方案。

# 模式识别示例
# 排序问题解决
1. 识别数据特征
2. 选择排序算法
3. 实现优化
4. 性能测试

逆向思维法

从目标结果出发,逆向推导解决方案。

# 逆向思维示例
# 实现登录功能
1. 需要验证密码
2. 需要获取用户信息
3. 需要数据库连接
4. 需要前端界面

原型迭代法

快速构建原型,通过迭代改进来完善解决方案。

# 原型迭代示例
# 产品开发流程
1. MVP版本
2. 用户测试
3. 功能优化
4. 最终版本

2.1 Python简介

Python是一门易于上手、功能强大的编程语言。它拥有高效的高级数据结构,并采用了一种简单而有效的面向对象编程范式。Python简洁优雅的语法、动态类型以及其解释型语言的特性,使它成为在各大主流平台上进行脚本编写与快速应用开发的理想选择。

详情请阅读Python官方文档或Python指南点击查看

2.2 标识符命名规则

标识符是用来给变量、函数、类等命名的"名字"。良好的命名习惯不仅能提高代码的可读性,还能减少错误和提高开发效率。

基本命名规则

# 基本命名规则示例
# 正确的命名
user_name = "Alice"
total_score = 95
is_valid = True

# 错误的命名
# 1user = "Bob"  # 不能以数字开头
# user-name = "Charlie"  # 不能包含连字符

类名命名(PascalCase)

类名采用大驼峰命名法,每个单词的首字母都大写。

# 类名示例
class Student:
    pass

class UserAuthenticationManager:
    pass

class DatabaseConnectionPool:
    pass

变量和函数命名(snake_case)

变量名和函数名采用小写字母加下划线的命名方式。

# 变量和函数示例
user_name = "Alice"
total_score = 95

def calculate_average_score(scores):
    return sum(scores) / len(scores)

def get_user_by_id(user_id):
    pass

常量命名(UPPER_CASE)

常量采用全大写字母加下划线的命名方式。

# 常量示例
PI = 3.14159
MAX_RETRY_ATTEMPTS = 3
DEFAULT_DATABASE_URL = "localhost:5432"
API_VERSION = "v1.0"
SUPPORTED_LANGUAGES = ["en", "zh", "es"]

特殊命名约定

Python中有一些特殊的命名约定,用于表示特定的含义。

# 特殊命名示例
class MyClass:
    def __init__(self):
        self._private_var = 10
        self.__mangled_name = 20
    
    def __str__(self):
        return "MyClass instance"

3. 变量与数据类型

3.1 变量基础

变量是用来存储数据的"名字",它代表了内存中的一个值。通过变量名,我们可以方便地访问、修改和使用数据。变量就像一个标签,把某个值贴上一个名字,后续可以通过这个名字反复引用和操作该值。

变量基本概念

# 变量赋值与类型自动推断
a = 10           # int 整型
a = "hello"      # str 字符串
a = 3.14         # float 浮点型

# 合法命名
user_name = "Tom"
score_1 = 99

# 不合法命名(会报错)
# 1score = 100
# user-age = 20
# for = 5

# 全局变量与局部变量
x = 100  # 全局变量
def foo():
    y = 200  # 局部变量
    print(x, y)
foo()
# print(y)  # 报错,y只在foo函数内有效

💡 小贴士:变量名要有实际意义,避免使用 abtemp 这类无意义命名。

3.2 基本数据类型

Python提供了丰富的基本数据类型,每种类型都有其特定的用途和操作方式。了解这些数据类型是掌握Python编程的基础。

数字类型(int, float, bool)

a = 10         # int
b = 3.14       # float
flag = True    # bool
print(a + b)   # 13.14
print(flag and (a > 5))  # True

💡 提示:数字类型可直接参与算术运算,bool本质上是int的子类。

字符串类型(str)

s = "Hello, Python!"
print(s[0])           # H
print(s[7:13])        # Python
print(s.lower())      # hello, python!
print(s.replace("Python", "World"))  # Hello, World!

💡 提示:字符串不可变,拼接和修改会生成新对象。

元组类型(tuple)

t = (1, 2, 3)
print(t[1])         # 2
t2 = ("Alice", 18, True)
# 单元素元组要加逗号
t3 = (5,)

💡 提示:元组内容不可变,但可包含可变对象(如列表)。

列表类型(list)

lst = [1, 2, 3]
lst.append(4)
lst[0] = 10
print(lst)        # [10, 2, 3, 4]
print(lst[1:3])   # [2, 3]

💡 提示:列表是最常用的可变序列类型,支持嵌套和多种内置方法。

集合类型(set)

s = {1, 2, 3, 2}
print(s)           # {1, 2, 3}
s.add(4)
s.remove(2)
print(3 in s)      # True

💡 提示:集合中的元素必须可哈希(不可变类型),集合本身可变。

字典类型(dict)

d = {"name": "Tom", "age": 18}
print(d["name"])
d["score"] = 95
del d["age"]
print(d)

💡 提示:字典的键必须可哈希(不可变类型),值可为任意对象。

4. Python内存管理机制

4.1 内存布局

在Python中,对象是对数据的抽象。程序中的所有数据都是通过对象或对象之间的关系来表示的。无论是数字、字符串、列表,还是你自己定义的类型,统统都是对象。甚至连代码本身,在某种意义上也可以被当作对象来看待。

栈(Stack)

堆(Heap)

引用计数(Reference Counting)

垃圾回收(Garbage Collection)

内存优化机制

Python程序内存布局 内核空间 (Kernel Space) 操作系统内核,用户程序无法直接访问 栈 (Stack) 函数调用、局部变量、参数传递 向下增长,LIFO结构 内存映射区域 (Memory Mapped) 共享库、文件映射、动态链接库 堆 (Heap) 动态分配的对象、Python对象数据 向上增长,垃圾回收管理 数据段 (Data Segment) 全局变量、静态变量、常量数据 BSS段 (Block Started by Symbol) 未初始化的全局变量,启动时初始化为0 代码段 (Code Segment) Python字节码、函数定义、类定义 只读区域,程序运行期间不变 高地址 低地址

教学模型说明

注意:上图是简化的教学模型,用于理解基本概念。实际Python内存管理更加复杂。

Python特有内存管理特性

Python内存安全特性

3.2 引用机制

引用(Reference)是Python中变量与对象之间的连接桥梁,它本质上是一个内存地址,指向堆中实际存储数据的对象。

引用的特点

变量名 (栈中) x y name 引用 (内存地址) 0x7f8b2c 0x7f8f2d 0x9a4f1d 对象 (堆中) 地址: 0x7f8b2c 值: 42 类型: int 引用计数: 2 地址: 0x9a4f1d 值: "Alice" 类型: str 引用计数: 1
变量名存储引用(内存地址),引用指向堆中的实际对象。多个变量可以引用同一个对象。
栈(Stack) 存储变量名和引用 x → 0x7f8b2c y → 0x7f8b2c name → 0x9a4f1d numbers → 0xb2c8e9 堆(Heap) 存储实际对象数据 地址: 0x7f8b2c 值: 42 类型: int 引用计数: 3 地址: 0x9a4f1d 值: "Alice" 类型: str 引用计数: 1 地址: 0x8a9d3e 值: 1 类型: int 引用计数: 1 地址: 0x9bae4f 值: 2 类型: int 引用计数: 1 地址: 0xb2c8e9 值: [1, 2, 42] 类型: list 引用计数: 1 元素: [0x8a9d3e, 0x9bae4f, 0x7f8b2c]

栈操作演示 - LIFO (后进先出)

通过交互式演示了解栈的LIFO(后进先出)特性,观察元素如何入栈和出栈。

LIFO原理

Last In, First Out - 最后进入的元素最先被移除。就像叠盘子一样,最后放上去的盘子会最先被取走。

栈操作演示

📊 栈内容: [变量a, 变量b, 变量c] | 🎯 栈顶: 变量c

5. 流程控制

掌握Python的流程控制语句,包括条件判断、循环结构和控制语句,实现程序的逻辑控制。

5.1 条件语句(if/elif/else)

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

💡 提示:条件判断支持任意复杂的逻辑表达式。

补充:结构化匹配 match(Python 3.10+)

status = "success"
match status:
    case "success":
        print("操作成功")
    case "fail":
        print("操作失败")
    case _:
        print("未知状态")

💡 提示:match语句仅支持Python 3.10及以上版本,case _ 表示默认分支。

5.2 循环结构(for/while)

# for循环遍历列表
for name in ["Tom", "Alice", "Bob"]:
    print(name)

# for循环遍历区间
for i in range(3):
    print(i)  # 输出0,1,2

# while循环
count = 0
while count < 3:
    print(count)
    count += 1

💡 提示:for循环适合遍历,while循环适合条件驱动。

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

# break/continue/pass 示例
    for i in range(5):
        if i == 2:
            continue  # 跳过2
        if i == 4:
            break     # 提前结束循环
        print(i)

    for i in range(3):
    pass  # 什么都不做

💡 提示:合理使用循环控制语句可提升代码灵活性和可读性。

6. 函数编程

掌握Python函数编程的核心概念,包括函数定义、参数传递、作用域、闭包等,提升代码复用性和可维护性。

6.1 函数基础

函数用于封装可复用的代码块,使用 def 关键字定义。可以有参数和返回值,提升代码复用性和可维护性。

# 定义和调用函数
def add(a, b):
    """返回a和b的和"""
    return a + b

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

6.2 参数与返回值

def get_name_and_age():
    return "Tom", 18

name, age = get_name_and_age()
print(name, age)

6.3 默认参数与可变参数

def greet(name, msg="你好"):
    print(msg, name)

greet("Alice")
greet("Bob", "Hi")

def add_all(*args):
    return sum(args)

print(add_all(1, 2, 3))

6.4 作用域与闭包

x = 10
def foo():
    global x
    x = 20

foo()
print(x)  # 20

6.5 lambda表达式(匿名函数)

lambda 定义简单匿名函数,常用于排序、过滤等场景。

f = lambda x, y: x + y
print(f(2, 3))

nums = [3, 1, 2]
nums.sort(key=lambda x: -x)
print(nums)

6.6 常见错误与建议

def bad_default(arg=[]):
    arg.append(1)
    return arg

# 正确示例
def good_default(arg=None):
    if arg is None:
        arg = []
    arg.append(1)
    return arg

7. 面向对象编程基础

掌握Python面向对象编程的核心概念,包括类、对象、继承、多态和特殊方法,构建结构化的程序。

7.1 类和对象的概念

面向对象编程(OOP)是Python的核心特性之一。类(Class)是创建对象的模板,对象是类的实例。

面向对象的核心概念

# 基本类定义示例
class Student:
    """学生类"""
    
    def __init__(self, name, age, student_id):
        self.name = name          # 实例属性
        self.age = age
        self.student_id = student_id
        self.courses = []         # 课程列表
    
    def introduce(self):
        return f"我叫{self.name},今年{self.age}岁"

# 创建对象实例
student1 = Student("张三", 20, "2023001")
print(student1.introduce())

7.2 继承和多态

继承允许我们创建一个继承另一个类属性和方法的新类。多态允许不同类的对象对同一方法有不同的实现。

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    def work(self):
        return "我在工作"

class Student(Person):
    def work(self):
        return "我在学习"  # 重写父类方法

# 多态调用
student = Student("小明", 18)
print(student.work())  # 我在学习

7.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}"
    
    def __eq__(self, other):
        return self.title == other.title
    
    def __lt__(self, other):
        return self.price < other.price

# 使用示例
book1 = Book("Python编程", "张三", 59)
print(book1)  # 调用__str__

8. Python高级特性

探索Python的高级语法特性,包括列表推导式、生成器、装饰器等,提升代码的简洁性和效率。

8.1 列表推导式和生成器

列表推导式是Python中创建列表的简洁方式,生成器可以高效处理大量数据。

# 列表推导式示例
# 基本语法:[表达式 for 变量 in 可迭代对象 if 条件]

squares = [x**2 for x in range(1, 11)]
print(squares)  # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

even_squares = [x**2 for x in range(1, 11) if x % 2 == 0]
print(even_squares)  # [4, 16, 36, 64, 100]

# 生成器表达式(内存效率高)
sum_squares = sum(x**2 for x in range(1000000))

8.2 装饰器

装饰器是Python中的高级特性,用于修改或增强函数的功能。

# 基本装饰器
def timer(func):
    """计时装饰器"""
    def wrapper(*args, **kwargs):
        import time
        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():
    import time
    time.sleep(1)
    return "完成"

8.3 上下文管理器

上下文管理器用于管理资源的获取和释放,使用with语句。

class FileManager:
    def __init__(self, filename, mode):
        self.filename = filename
        self.mode = mode
    
    def __enter__(self):
        self.file = open(self.filename, self.mode)
        return self.file
    
    def __exit__(self, exc_type, exc_val, exc_tb):
        if self.file:
            self.file.close()

# 使用自定义上下文管理器
with FileManager("test.txt", "w") as f:
    f.write("Hello, World!")

9. 异常处理进阶

掌握Python完整的异常处理机制,包括自定义异常类和异常处理最佳实践。

9.1 完整的异常处理体系

Python提供了完整的异常处理机制,包括try、except、else、finally等关键字。

def divide_numbers(a, b):
    try:
        result = a / b
    except ZeroDivisionError as e:
        print(f"除零错误:{e}")
        return None
    else:
        print("计算成功,没有异常发生")
        return result
    finally:
        print("无论是否发生异常,这里都会执行")

9.2 自定义异常类

创建自定义异常类,提供更精确的错误信息和处理机制。

class ValidationError(Exception):
    """自定义验证异常"""
    def __init__(self, message, field=None):
        self.message = message
        self.field = field
        super().__init__(self.message)

def validate_age(age):
    if age < 0 or age > 150:
        raise ValidationError("年龄必须在0-150之间", "age")

10. 文件操作

掌握Python文件操作的核心技能,包括文本文件读写、二进制文件处理、异常处理和路径操作。

10.1 基本文件操作

Python使用 open() 函数进行文件读写。

常用文件模式说明

# 写文件
with open("test.txt", "w", encoding="utf-8") as f:
    f.write("Hello, world!\n")
    f.write("第二行内容\n")

# 读文件
with open("test.txt", "r", encoding="utf-8") as f:
    content = f.read()
    print(content)

10.2 文件异常处理

文件操作常见异常包括文件不存在、权限不足等。可用 try...except 捕获异常:

try:
    with open("not_exist.txt", "r", encoding="utf-8") as f:
        data = f.read()
except FileNotFoundError:
    print("文件不存在!")
except PermissionError:
    print("没有权限访问该文件")

10.3 二进制文件操作

处理图片、音频等非文本文件时,需用二进制模式:

# 读取二进制文件
with open("image.png", "rb") as f:
    data = f.read()

# 写入二进制文件
with open("copy.png", "wb") as f:
    f.write(data)

10.4 文件路径与os模块

跨平台处理文件路径,推荐用 osos.path

import os

# 拼接路径
file_path = os.path.join("data", "file.txt")

# 判断文件是否存在
print(os.path.exists(file_path))
print(os.path.isfile(file_path))

重要提示

11. 标准库和第三方库

探索Python丰富的标准库和第三方库,扩展程序功能,提高开发效率。

11.1 常用标准库模块

Python标准库提供了丰富的功能模块,无需安装即可使用。

import json
import csv
import re
import sqlite3
from collections import defaultdict, Counter
from datetime import datetime, timedelta

# JSON处理
data = {"name": "张三", "age": 25}
json_str = json.dumps(data, ensure_ascii=False)
print(json_str)

11.2 虚拟环境和包管理

虚拟环境是Python项目开发的重要工具,用于隔离不同项目的依赖。

虚拟环境使用步骤

  1. 创建虚拟环境:python -m venv myenv
  2. 激活虚拟环境:
    • Windows: myenv\Scripts\activate
    • Linux/Mac: source myenv/bin/activate
  3. 安装包:pip install package_name
  4. 退出虚拟环境:deactivate

课程总结

学习成果

后续学习建议

课程小结:本课程系统梳理了Python编程的基础知识与核心能力,帮助你建立了坚实的编程思维和实践基础。希望你能将所学应用于实际,持续进步,迈向更高阶的编程世界!