函数与模块
Python 中,函数是组织代码的重要方式,可以将重复的代码封装起来,提升代码的复用性和可读性。模块则是更高层次的组织结构,用来将相关的代码打包在一起,方便管理和使用。本节将介绍函数与模块的定义、使用及相关操作。
1. 函数
1.1 定义函数
函数是使用 def
关键字定义的。函数可以接受参数并返回值。下面是一个简单的函数定义示例:
def greet(name):
"""该函数用于打印问候语"""
print(f"Hello, {name}!")
调用函数:
greet("Alice") # 输出:Hello, Alice!
1.2 函数的返回值
函数可以使用 return
语句返回一个值。如果没有 return
语句,函数将返回 None
。
def add(a, b):
"""该函数返回两个数的和"""
return a + b
result = add(3, 5)
print(result) # 输出:8
1.3 函数参数
1.3.1 位置参数
最常见的参数类型,按顺序传递给函数。
def multiply(x, y):
return x * y
print(multiply(2, 3)) # 输出:6
1.3.2 关键字参数
通过键值对形式传递参数,可以打乱参数的顺序。
def describe_person(name, age):
print(f"Name: {name}, Age: {age}")
describe_person(age=25, name="Bob") # 输出:Name: Bob, Age: 25
1.3.3 默认参数
函数可以为某些参数提供默认值,如果调用时未提供对应参数,使用默认值。
def greet(name="Guest"):
print(f"Hello, {name}!")
greet() # 输出:Hello, Guest!
greet("Alice") # 输出:Hello, Alice!
1.3.4 可变参数
通过 *args
或 **kwargs
可以接收可变数量的参数。
*args
:接收任意数量的位置参数,返回一个元组。**kwargs
:接收任意数量的关键字参数,返回一个字典。
def add(*args):
return sum(args)
print(add(1, 2, 3, 4)) # 输出:10
def describe(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
describe(name="Alice", age=25, city="New York")
# 输出:
# name: Alice
# age: 25
# city: New York
1.4 函数的作用域
Python 中变量的作用域分为局部作用域和全局作用域。函数内部定义的变量是局部变量,只能在函数内部访问。全局变量可以在函数外部或内部访问。
x = 10 # 全局变量
def modify():
global x # 使用 global 关键字修改全局变量
x = 5 # 修改全局变量
print(x)
modify() # 输出:5
print(x) # 输出:5
1.5 Lambda 表达式
Lambda 表达式(匿名函数)是没有名字的小型函数,通常用于简单的计算。它使用 lambda
关键字定义。
# 定义一个 lambda 表达式
square = lambda x: x ** 2
print(square(5)) # 输出:25
Lambda 表达式常用于内置函数如 map()
、filter()
和 sorted()
。
# 使用 lambda 表达式对列表进行排序
points = [(2, 3), (1, 2), (4, 1)]
points_sorted = sorted(points, key=lambda point: point[1])
print(points_sorted) # 输出:[(4, 1), (1, 2), (2, 3)]
2. 模块
2.1 什么是模块
模块是一个包含 Python 代码的文件,通常包括函数、类和变量。模块提供了一种将代码组织成独立组件的方法,从而提升代码的复用性和可维护性。
- 内置模块:Python 自带的模块,如
math
、os
、random
等。 - 自定义模块:用户自己创建的模块。
2.2 导入模块
可以使用 import
关键字导入一个模块。
import math
# 使用 math 模块中的函数
print(math.sqrt(16)) # 输出:4.0
可以导入模块中的特定函数或变量:
from math import pi, sqrt
print(pi) # 输出:3.141592653589793
print(sqrt(25)) # 输出:5.0
使用 as
关键字给模块或函数起别名:
import math as m
print(m.sqrt(9)) # 输出:3.0
2.3 自定义模块
我们可以通过将 Python 代码保存为 .py
文件来自定义模块,并在其他文件中导入使用。
创建模块文件 my_module.py
:
# my_module.py
def greet(name):
print(f"Hello, {name}!")
导入并使用模块:
# main.py
import my_module
my_module.greet("Alice") # 输出:Hello, Alice!
2.4 __name__
和模块
每个 Python 文件都有一个特殊的属性 __name__
,它的值在模块被直接运行时是 '__main__'
,在被导入时是模块的名字。可以通过此特性控制模块的运行方式。
# my_module.py
def greet(name):
print(f"Hello, {name}!")
if __name__ == "__main__":
greet("World") # 当该文件被直接运行时会执行此行
3. 标准库模块
Python 有许多强大的标准库模块,以下是一些常见的模块:
-
os
模块:用于与操作系统交互。import os print(os.getcwd()) # 获取当前工作目录
-
sys
模块:提供了对解释器和系统功能的访问。import sys print(sys.version) # 输出 Python 版本信息
-
datetime
模块:处理日期和时间。import datetime now = datetime.datetime.now() print(now) # 输出当前日期和时间
-
random
模块:生成随机数和随机选择。import random print(random.randint(1, 10)) # 输出 1 到 10 之间的随机整数
4. 小结
函数和模块是 Python 编程的基础。函数通过封装重复代码提高了程序的复用性,而模块通过组织相关代码提升了代码的可维护性和清晰度。理解函数与模块的使用,可以帮助我们编写高效、结构化的代码。