第3章 Python核心语法速通:变量与数据类型、流程控制、函数与模块、面向对象编程基础
说实话,很多初学者一上来就啃Python语法,结果啃到一半就放弃了。我当年也是这样,总觉得语法书太枯燥。但后来我发现,学语法就像学开车——你不需要知道发动机怎么造,但得知道油门刹车怎么踩。这一章,我就带你快速过一遍Python最核心的语法,保证你听完就能上手写代码。
3.1 变量与数据类型:Python的"小盒子"
变量是什么?说白了就是一个贴了标签的盒子。你把东西放进去,再通过标签找到它。Python里不需要提前声明盒子的类型,直接往里扔就行。
name = "张三" # 字符串
age = 25 # 整数
height = 1.75 # 浮点数
is_student = True # 布尔值
嗯,这里要注意:Python是动态类型语言。你可以在程序运行过程中改变变量的类型。比如:
x = 10 # 整数
x = "hello" # 现在变成字符串了,没问题
我个人习惯在项目里尽量保持变量类型一致,不然代码维护起来挺头疼的。我曾经接手过一个项目,一个变量在函数里被改了七八次类型,调试的时候差点把键盘砸了。
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 循环
循环有两种:for 和 while。我一般用 for 遍历已知范围,用 while 处理未知条件。
# for循环:遍历列表
fruits = ["苹果", "香蕉", "橘子"]
for fruit in fruits:
print(f"我喜欢吃{fruit}")
# while循环:直到条件不满足
count = 0
while count < 5:
print(f"第{count+1}次循环")
count += 1
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() # 自己的方法
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原来还能这么玩!