第三单元:函数与模块

掌握Python函数和模块的使用

专为小白设计,从零开始学习函数与模块

📚 单元介绍

欢迎来到Python函数与模块单元!在本单元中,你将学习如何使用函数来组织代码,以及如何使用模块来重用代码。

函数是一段可重用的代码,它可以接收输入参数并返回输出结果。模块是一个包含Python定义和语句的文件,它可以被其他程序导入和使用。掌握函数和模块的使用是编写高质量Python代码的关键。

🎯 学习目标

  • 掌握函数的定义和调用
  • 学习函数参数的传递方式
  • 理解函数的返回值
  • 了解局部变量和全局变量
  • 学习模块的导入和使用
  • 掌握标准库的基本使用

📖 知识点讲解

1. 函数定义和调用

函数是一段可重用的代码块,通过def关键字定义。

# 定义函数
def greet(name):
    """打印问候信息"""
    print(f"你好,{name}!")

# 调用函数
greet("小明")  # 你好,小明!

# 带返回值的函数
def add(a, b):
    """计算两个数的和"""
    return a + b

# 调用带返回值的函数
result = add(3, 5)
print(result)  # 8

# 带默认参数的函数
def greet(name, greeting="你好"):
    """打印问候信息,默认问候语为"你好""""
    print(f"{greeting},{name}!")

# 调用带默认参数的函数
greet("小明")  # 你好,小明!
greet("小明", "早上好")  # 早上好,小明!

2. 函数参数传递

Python支持多种参数传递方式,包括位置参数、关键字参数、可变参数等。

# 位置参数
def describe_pet(animal_type, pet_name):
    """描述宠物"""
    print(f"我有一只{animal_type}。")
    print(f"它的名字叫{pet_name}。")

# 按位置传递参数
describe_pet("狗", "旺财")

# 关键字参数
describe_pet(animal_type="猫", pet_name="咪咪")
describe_pet(pet_name="花花", animal_type="兔子")

# 可变参数(*args)
def sum_numbers(*numbers):
    """计算任意数量数字的和"""
    total = 0
    for number in numbers:
        total += number
    return total

# 调用可变参数函数
print(sum_numbers(1, 2, 3))  # 6
print(sum_numbers(1, 2, 3, 4, 5))  # 15

# 关键字可变参数(**kwargs)
def build_profile(first, last, **user_info):
    """构建用户资料"""
    profile = {"first_name": first, "last_name": last}
    for key, value in user_info.items():
        profile[key] = value
    return profile

# 调用关键字可变参数函数
user_profile = build_profile("张", "三", age=18, city="北京", job="学生")
print(user_profile)

3. 局部变量和全局变量

局部变量是在函数内部定义的变量,只能在函数内部使用。全局变量是在函数外部定义的变量,可以在整个程序中使用。

# 全局变量
message = "Hello, global!"

def show_message():
    # 局部变量
    local_message = "Hello, local!"
    print(local_message)  # 访问局部变量
    print(message)  # 访问全局变量

show_message()
print(message)  # 访问全局变量
# print(local_message)  # 这会报错,因为局部变量在函数外部不可访问

# 修改全局变量
def modify_global():
    global message  # 声明要修改全局变量
    message = "Hello, modified!"
    print(message)

modify_global()
print(message)  # 输出修改后的全局变量

4. 模块的导入和使用

模块是一个包含Python定义和语句的文件,它可以被其他程序导入和使用。

# 导入整个模块
import math

# 使用模块中的函数
print(math.sqrt(16))  # 4.0
print(math.pi)  # 3.141592653589793

# 导入模块中的特定函数
from math import sqrt, pi

print(sqrt(25))  # 5.0
print(pi)  # 3.141592653589793

# 导入模块中的所有函数
from math import *

print(sin(0))  # 0.0
print(cos(0))  # 1.0

# 给模块指定别名
import math as m

print(m.sqrt(36))  # 6.0

# 给导入的函数指定别名
from math import sqrt as square_root

print(square_root(49))  # 7.0

5. 标准库的使用

Python标准库包含许多有用的模块,可以帮助我们完成各种任务。

# 使用random模块
import random

# 生成随机整数
print(random.randint(1, 10))  # 生成1-10之间的随机整数

# 从列表中随机选择一个元素
fruits = ["苹果", "香蕉", "橙子", "葡萄"]
print(random.choice(fruits))  # 随机选择一个水果

# 打乱列表
random.shuffle(fruits)
print(fruits)  # 打乱后的列表

# 使用datetime模块
import datetime

# 获取当前日期和时间
now = datetime.datetime.now()
print(now)  # 输出当前日期和时间

# 格式化日期
print(now.strftime("%Y-%m-%d %H:%M:%S"))  # 格式化为年-月-日 时:分:秒

# 使用os模块
import os

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

# 列出目录中的文件和文件夹
print(os.listdir("."))  # 列出当前目录中的内容

# 使用sys模块
import sys

# 打印Python版本
print(sys.version)  # 输出Python版本

# 打印命令行参数
print(sys.argv)  # 输出命令行参数

6. 自定义模块

你可以创建自己的模块,然后在其他程序中导入和使用。

# 假设我们创建了一个名为mymodule.py的文件,内容如下:
'''
# mymodule.py
def greet(name):
    """打印问候信息"""
    return f"你好,{name}!"

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

PI = 3.141592653589793
'''

# 在另一个文件中导入和使用
# import mymodule
# 
# print(mymodule.greet("小明"))  # 你好,小明!
# print(mymodule.add(3, 5))  # 8
# print(mymodule.PI)  # 3.141592653589793

# 或者
# from mymodule import greet, add, PI
# 
# print(greet("小明"))  # 你好,小明!
# print(add(3, 5))  # 8
# print(PI)  # 3.141592653589793

💻 实践练习

练习1:函数定义和调用

编写一个函数,计算两个数的乘积,并调用该函数计算不同数值的乘积。

练习2:函数参数

编写一个函数,计算矩形的面积,函数接收长度和宽度作为参数,并返回面积。

练习3:可变参数

编写一个函数,计算任意数量数字的平均值。

练习4:模块使用

使用random模块生成一个随机密码,密码长度为8位,包含大小写字母和数字。

练习5:自定义模块

创建一个名为calculator.py的模块,包含加、减、乘、除四个函数,然后在另一个文件中导入并使用这些函数。

📦 学习资源

📖

推荐书籍

《Python编程:从入门到实践》

《Python基础教程》

🌐

在线资源

Python官方文档 - 函数

菜鸟教程 - Python函数

💻

开发工具

Anaconda

Jupyter Notebook