第3章 Python核心语法速通:变量与数据类型、流程控制、函数与模块、面向对象编程基础

说实话,很多初学者一上来就啃Python语法,结果啃到一半就放弃了。我当年也是这样,总觉得语法书太枯燥。但后来我发现,学语法就像学开车——你不需要知道发动机怎么造,但得知道油门刹车怎么踩。这一章,我就带你快速过一遍Python最核心的语法,保证你听完就能上手写代码。

3.1 变量与数据类型:Python的"小盒子"

变量是什么?说白了就是一个贴了标签的盒子。你把东西放进去,再通过标签找到它。Python里不需要提前声明盒子的类型,直接往里扔就行。

name = "张三"      # 字符串
age = 25           # 整数
height = 1.75      # 浮点数
is_student = True  # 布尔值

嗯,这里要注意:Python是动态类型语言。你可以在程序运行过程中改变变量的类型。比如:

x = 10      # 整数
x = "hello" # 现在变成字符串了,没问题

我个人习惯在项目里尽量保持变量类型一致,不然代码维护起来挺头疼的。我曾经接手过一个项目,一个变量在函数里被改了七八次类型,调试的时候差点把键盘砸了。

小提示:Python里没有常量关键字,但约定俗成用全大写表示常量,比如 PI = 3.14159。虽然你仍然可以修改它,但看到全大写的变量,大家都会心照不宣地不去动它。

3.2 流程控制:让代码"有脑子"

流程控制就是让代码根据条件做不同的事。你想想看,如果代码只会从上往下跑,那跟流水账有什么区别?

3.2.1 条件判断

score = 85
if score >= 90:
    print("优秀")
elif score >= 80:
    print("良好")
else:
    print("继续努力")

这里有个坑:Python用缩进来表示代码块,而不是花括号。我刚开始学的时候,经常因为缩进不对报错。后来养成习惯,统一用4个空格,再也没出过问题。

3.2.2 循环

循环有两种:forwhile。我一般用 for 遍历已知范围,用 while 处理未知条件。

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

# while循环:直到条件不满足
count = 0
while count < 5:
    print(f"第{count+1}次循环")
    count += 1
避坑指南:我曾经写过一个死循环,因为忘记在while里更新条件变量。服务器CPU直接飙到100%,吓得我赶紧按了Ctrl+C。记住:while循环一定要有终止条件!

3.3 函数与模块:别重复造轮子

函数就是一段可重复使用的代码。模块就是一堆函数的集合。说白了,就是把你常用的功能打包好,随用随取。

3.3.1 定义函数

def greet(name, greeting="你好"):
    """这是一个打招呼的函数"""
    return f"{greeting},{name}!"

# 调用
print(greet("小明"))          # 输出:你好,小明!
print(greet("小红", "早上好")) # 输出:早上好,小红!

注意那个 greeting="你好",这叫默认参数。我在项目中经常用这个技巧,让函数更灵活。比如日志函数,默认输出到控制台,但也可以指定文件路径。

3.3.2 导入模块

# 导入整个模块
import math
print(math.sqrt(16))  # 输出:4.0

# 导入特定函数
from datetime import datetime
print(datetime.now())  # 输出当前时间

我个人建议:不要用 from module import *。为什么?因为容易命名冲突。我曾经在一个项目里同时导入了两个模块的 *,结果有个函数名冲突了,查了半天才发现是导入的问题。

3.4 面向对象编程基础:把代码"拟人化"

面向对象编程(OOP)就是把现实世界的东西抽象成代码里的"对象"。比如你有一辆车,车有颜色、品牌(属性),能跑、能停(方法)。

3.4.1 类与对象

class Car:
    def __init__(self, brand, color):
        self.brand = brand
        self.color = color
        self.speed = 0
    
    def accelerate(self, increment):
        self.speed += increment
        print(f"当前速度:{self.speed} km/h")
    
    def brake(self):
        self.speed = 0
        print("已停车")

# 创建对象
my_car = Car("特斯拉", "红色")
my_car.accelerate(50)  # 输出:当前速度:50 km/h
my_car.brake()         # 输出:已停车

你想想看,__init__ 方法就是构造函数,在创建对象时自动调用。我习惯把初始化逻辑都放在这里,避免后面忘记设置属性。

3.4.2 继承:站在巨人的肩膀上

class ElectricCar(Car):  # 继承Car类
    def __init__(self, brand, color, battery_capacity):
        super().__init__(brand, color)  # 调用父类构造函数
        self.battery = battery_capacity
    
    def charge(self):
        print(f"正在充电,电池容量:{self.battery} kWh")

# 使用
my_ev = ElectricCar("比亚迪", "白色", 60)
my_ev.accelerate(30)  # 继承的方法
my_ev.charge()        # 自己的方法
核心要点:继承让代码复用变得简单。但别滥用,我见过有人为了用继承而继承,搞出七八层继承关系,最后改一个父类方法,所有子类都受影响。记住:组合优于继承,除非真的有"is-a"关系。

3.4.3 封装与私有属性

Python里没有真正的私有属性,但约定用下划线开头表示"不要直接访问"。

class BankAccount:
    def __init__(self, owner, balance):
        self.owner = owner
        self._balance = balance  # 约定为私有
    
    def deposit(self, amount):
        if amount > 0:
            self._balance += amount
            print(f"存款成功,余额:{self._balance}")
    
    def get_balance(self):
        return self._balance

# 虽然可以访问,但不建议
account = BankAccount("张三", 1000)
print(account._balance)  # 能访问,但别这么干

嗯,这里要注意:双下划线开头的属性(比如 __balance)会被Python"名称改写",但也不是真正的私有。说白了,Python的哲学是"大家都是成年人",靠自觉。

3.5 实战小练习:学生管理系统

光说不练假把式。我们来写一个简单的学生管理系统,把今天学的都用上。

class Student:
    def __init__(self, name, student_id, grade):
        self.name = name
        self.student_id = student_id
        self.grade = grade
    
    def __str__(self):
        return f"学生:{self.name},学号:{self.student_id},年级:{self.grade}"

class StudentManager:
    def __init__(self):
        self.students = []
    
    def add_student(self, student):
        self.students.append(student)
        print(f"已添加:{student.name}")
    
    def find_by_name(self, name):
        for student in self.students:
            if student.name == name:
                return student
        return None
    
    def list_all(self):
        if not self.students:
            print("暂无学生信息")
        else:
            for student in self.students:
                print(student)

# 使用
manager = StudentManager()
manager.add_student(Student("小明", "001", "三年级"))
manager.add_student(Student("小红", "002", "四年级"))
manager.list_all()

这个例子虽然简单,但包含了类、对象、列表操作、循环、条件判断等核心语法。我在实际项目中,经常用这种模式来管理各种资源——用户、订单、商品,本质上都是"增删改查"。

我的建议:学语法最好的方式就是写小项目。哪怕是一个简单的记账本、待办事项列表,都能帮你把语法练熟。别怕写错,我写代码这么多年,照样会犯低级错误。关键是动手,动手,再动手!

好了,这一章的内容就到这里。Python语法其实不难,难的是养成好的编码习惯。下一章我们会深入Python的高级特性,比如列表推导式、装饰器、生成器,到时候你会发现,Python原来还能这么玩!