1.1 模块简介
Python中的模块是一个以.py为扩展名的文件,包含代码。模块允许将大的代码拆分成较小的、可管理的部分。每个模块可以包含函数、类和变量,以及在导入时执行一些代码。
简单模块示例
创建一个模块mymodule.py:
# mymodule.py
def greet(name):
return f"Hello, {name}!"
pi = 3.14159
现在可以在其他文件中导入并使用该模块。
1.2 导入模块
Python提供了几种导入模块的方法。我们来看一下。
导入整个模块
这种操作的语法通常是这样的:
import 模块
这种方法会导入整个模块,你可以通过指定模块名来使用其函数和变量。
import 模块
print(模块.greet("Alice")) # 输出: Hello, Alice!
print(模块.pi) # 输出: 3.14159
我们之前用math模块做过类似的事情,还记得吗?
import math
print(math.ceil(13 / 7)) # 向上取整
print(math.floor(13 / 7)) # 向下取整
从模块中导入特定元素
你可以选择只导入模块中的某些元素。操作的语法通常是这样的:
from 模块 import func, var
这种方法只导入模块中的特定函数、类或变量,使用这些元素时无需指定模块名。
from mymodule import greet, pi
print(greet("Bob")) # 输出: Hello, Bob!
print(pi) # 输出: 3.14159
使用别名导入模块
操作的语法通常是这样的:
import 模块 as alias
这种方法允许导入模块并为其分配另一个名称,这在缩短模块名或解决名称冲突时尤为有用。
import mymodule as mm
print(mm.greet("Charlie")) # 输出: Hello, Charlie!
print(mm.pi) # 输出: 3.14159
从模块中导入所有元素
操作的语法通常是这样的:
from 模块 import *
这种方法会导入模块中所有的函数、类和变量,使用时无需指定模块名。但不推荐使用这种方法,因为它可能导致名称冲突,使代码难以阅读。
from mymodule import *
print(greet("Dave")) # 输出: Hello, Dave!
print(pi) # 输出: 3.14159
1.3 模块导入背后的机制
模块搜索顺序
当你导入一个模块时,Python会按照特定的顺序查找它:
- 当前目录: Python首先在执行脚本的当前目录查找模块。
- 环境变量
PYTHONPATH: 如果在当前目录找不到模块,Python会在环境变量PYTHONPATH中指定的目录中查找。 - 标准目录: 如果模块仍未找到,Python会在标准目录中查找,如
sys.path中指定的目录。
示例:
import sys
for path in sys.path:
print(path)
局部和全局导入
模块导入可以在全局级别(文件开头)或局部级别(函数或方法内部)进行。
全局导入
全局导入在文件开头进行,使导入的模块在整个文件中可用。
import math
def calculate_circle_area(radius):
return math.pi * radius ** 2
局部导入
局部导入在函数或方法内部进行,使导入的模块仅在该函数或方法中可用。
def calculate_square_root(x):
import math
return math.sqrt(x)
print(calculate_square_root(16))
局部导入可用于减少模块加载时间或防止名称冲突。
1.4 动态导入
动态导入允许在程序运行时导入模块。当需要基于用户输入或其他动态条件导入模块时,这可能是有用的。
操作的语法通常是这样的:
module = __import__("模块")
让我们举个例子,用这种方法导入math模块。
module_name = "math"
module = __import__(module_name)
print(module.sqrt(16)) # 输出: 4.0
后续的代码使用类似import as的方式,当模块math被赋给别名module时。
1.5 使用getattr函数访问模块属性
getattr函数允许动态获取模块(或任何对象)的属性。当属性名在程序运行期间未知或可能改变时,这可能会非常有用。
getattr函数的语法:
getattr(object, name, default = None)
其中object是要从中获取属性的对象,name是一个包含属性名的字符串,default是在属性名不存在时返回的值。default参数的默认值是None。
使用getattr函数的示例:
import math
# 从math模块中获取sqrt属性
sqrt_function = getattr(math, 'sqrt')
print(sqrt_function(25)) # 输出: 5.0
# 尝试获取不存在的属性,返回默认值
non_existent_attr = getattr(math, 'non_existent', 'default_value')
print(non_existent_attr) # 输出: default_value
在这个例子中,我们使用getattr函数从math模块中获取函数sqrt,然后调用该函数来计算数字25的平方根。如果属性名不存在,则返回默认值default_value。
GO TO FULL VERSION