2、Python核心语法速通:变量与数据类型、列表与字典操作、函数与模块化编程、文件读写与异常处理

说实话,很多初学者一上来就啃厚厚的语法书,结果没几天就放弃了。我当年也是这样。后来我发现,学Python语法不用面面俱到,抓住最核心的几块就够了。今天咱们就直奔主题,把数据科学里最常用的语法过一遍。

2.1 变量与数据类型:先搞清楚你的数据长什么样

Python里的变量,说白了就是个标签。你把数据贴个名字,方便后面调用。不用像C语言那样先声明类型,直接赋值就行。

# 这就是变量
name = "小明"
age = 25
height = 1.75
is_student = True

这里有几个常见的数据类型,我列个表给你看:

类型 例子 说明
int 25, -3, 0 整数,没有小数点
float 3.14, -0.5, 1.0 浮点数,带小数点
str "hello", 'Python' 字符串,用引号包着
bool True, False 布尔值,注意首字母大写
NoneType None 空值,表示什么都没有
我的小习惯:变量名尽量用英文,别用拼音。比如用 user_name 而不是 yonghuming。我在项目里见过一堆拼音变量,三个月后自己都看不懂了。

还有个容易踩坑的地方——类型转换。比如从文件读到的数字其实是字符串,你得手动转一下:

# 字符串转整数
price_str = "99.8"
price = float(price_str)  # 变成 99.8

# 整数转字符串
count = 10
message = "总共" + str(count) + "个"  # 变成 "总共10个"
我曾经犯过的错:直接用 int("3.14") 会报错!因为字符串里带小数点,得先用 float() 转成浮点数,再转整数。

2.2 列表与字典操作:数据科学的两大法宝

做数据分析,天天跟列表和字典打交道。这两个东西用好了,效率翻倍。

列表:有序的集合

列表就像个购物清单,按顺序放东西。你可以往里面加、删、改、查。

# 创建列表
fruits = ["苹果", "香蕉", "橘子"]

# 常用操作
fruits.append("葡萄")      # 末尾添加
fruits.insert(1, "草莓")   # 指定位置插入
fruits.remove("香蕉")      # 删除指定元素
popped = fruits.pop()      # 弹出最后一个元素
print(fruits[0])           # 访问第一个元素
print(fruits[-1])          # 访问最后一个元素
print(len(fruits))         # 获取长度

列表推导式是我特别喜欢的一个特性,一行代码搞定循环:

# 普通写法
squares = []
for i in range(10):
    squares.append(i ** 2)

# 列表推导式(推荐)
squares = [i ** 2 for i in range(10)]

# 带条件的推导式
even_squares = [i ** 2 for i in range(10) if i % 2 == 0]

字典:键值对的映射

字典就像个通讯录,通过名字(键)找到电话(值)。在数据处理里,字典常用来存结构化数据。

# 创建字典
student = {
    "name": "张三",
    "age": 20,
    "scores": [85, 92, 78]
}

# 常用操作
print(student["name"])           # 获取值
student["grade"] = "大二"        # 添加新键值对
student["age"] = 21              # 修改值
del student["scores"]            # 删除键值对

# 安全获取(不存在时返回默认值)
grade = student.get("grade", "未知")

# 遍历字典
for key, value in student.items():
    print(f"{key}: {value}")
实战经验:我在处理CSV文件时,经常把每一行数据转成字典,字段名做键,字段值做值。这样后面操作起来特别方便,代码可读性也高。

2.3 函数与模块化编程:别重复造轮子

写代码最忌讳的就是复制粘贴。把重复的逻辑封装成函数,这是专业程序员的基本素养。

定义函数

def calculate_bmi(weight, height):
    """计算BMI指数"""
    bmi = weight / (height ** 2)
    return bmi

# 调用函数
my_bmi = calculate_bmi(70, 1.75)
print(f"你的BMI是: {my_bmi:.2f}")

函数有几个要点我提醒一下:

  • 参数默认值:给参数设个默认值,调用时可以省略
  • 返回值:可以返回多个值,实际上是个元组
  • 文档字符串:函数开头用三引号写说明,方便别人(包括未来的你)理解
def create_user(name, age=18, city="北京"):
    """创建用户信息字典
    
    参数:
        name: 用户名
        age: 年龄,默认18
        city: 城市,默认北京
    
    返回:
        包含用户信息的字典
    """
    return {
        "name": name,
        "age": age,
        "city": city
    }

# 不同调用方式
user1 = create_user("小明")
user2 = create_user("小红", 20, "上海")
user3 = create_user("小刚", city="广州")

模块化:把代码分门别类

一个文件写几千行代码,找起来太痛苦了。我习惯把相关功能放到不同文件里。

# 假设有个文件叫 data_utils.py
def load_data(filepath):
    print(f"加载数据: {filepath}")
    # 实际加载逻辑...

def clean_data(data):
    print("清洗数据...")
    # 实际清洗逻辑...

# 在另一个文件里导入使用
import data_utils

data = data_utils.load_data("sales.csv")
clean_data = data_utils.clean_data(data)
我的建议:每个模块只做一件事。比如 data_loader.py 只管加载数据,data_cleaner.py 只管清洗。这样出了问题,定位也快。

2.4 文件读写与异常处理:让程序更健壮

数据科学离不开文件操作。读CSV、写JSON、保存模型,都得跟文件打交道。同时,程序跑着跑着出错了怎么办?异常处理就是你的安全网。

文件读写

Python里最推荐用 with 语句,它会自动帮你关闭文件,省心。

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

# 逐行读取(适合大文件)
with open("data.txt", "r", encoding="utf-8") as f:
    for line in f:
        print(line.strip())  # strip()去掉换行符

# 写入文件
with open("output.txt", "w", encoding="utf-8") as f:
    f.write("第一行\n")
    f.write("第二行\n")

# 追加写入
with open("output.txt", "a", encoding="utf-8") as f:
    f.write("追加的内容\n")

文件模式我整理了一下:

模式 说明
'r' 只读,文件必须存在
'w' 写入,会覆盖原有内容
'a' 追加,在末尾添加内容
'r+' 读写,文件必须存在
我曾经踩过的坑:用 'w' 模式打开文件时,如果文件不存在会新建,但如果文件存在,里面的内容会被清空!有一次我不小心把重要的配置文件覆盖了,从那以后我写文件前都会先检查一下。

异常处理:别让程序崩掉

程序运行中会遇到各种意外:文件找不到、网络超时、除数为零……用 try-except 来兜底。

try:
    # 可能会出错的代码
    with open("config.json", "r") as f:
        config = f.read()
    number = int(config)
    result = 100 / number
    
except FileNotFoundError:
    print("配置文件不存在,使用默认配置")
    config = '{"setting": "default"}'
    
except ValueError:
    print("配置文件内容不是有效的数字")
    
except ZeroDivisionError:
    print("配置文件中数字不能为0")
    
except Exception as e:
    print(f"发生了未知错误: {e}")
    
else:
    # 没有异常时执行
    print("一切正常!")
    
finally:
    # 不管有没有异常都会执行
    print("清理资源...")

异常处理的几个要点:

  • 精确捕获:尽量指定异常类型,别一股脑用 except:
  • 多个except:按顺序捕获,子类在前,父类在后
  • else和finally:else在无异常时执行,finally总是执行
  • 主动抛出:raise 主动触发异常
def divide_numbers(a, b):
    if b == 0:
        raise ValueError("除数不能为0")
    return a / b

try:
    result = divide_numbers(10, 0)
except ValueError as e:
    print(f"计算错误: {e}")
实战经验:我在做数据清洗时,经常遇到脏数据。比如某列应该是数字,但有些行是空字符串。这时候用 try-except 跳过这些行,比一个个检查高效得多。

好了,Python核心语法就讲这么多。你想想看,变量、列表、字典、函数、文件、异常——这些就是数据科学里最常用的语法了。别贪多,先把这些练熟,后面学Pandas、NumPy就轻松多了。