1.6 标准库与扩展库中对象的导入与使用
Python默认安装仅包含基本或核心模块,启动时也仅加载了基本模块,需要时再显式地导入和加载标准库和第三方扩展库。这样的设计减小了程序运行的压力,并具有很强的可扩展性。从“木桶原理”的角度来看,这种设计与安全配置时遵循的“最小权限”原则一致,有助于提高系统的安全性。
1.6.1 import 模块名 [as 别名]
使用这种方式导入模块后,使用模块中的对象时需要在对象之前加上模块名作为前缀,必须以“模块名.对象名”的形式访问。如果模块名字很长,可以为导入的模块设置一个别名,然后使用“别名.对象名”的方式来使用其中的对象。以下是一些示例:
>>> import math
>>> math.sin(0.5)
0.479425538604203
>>> import random
>>> n = random.random()
>>> n = random.randint(1, 100)
>>> n = random.randrange(1, 100)
>>> import os.path as path
>>> path.isfile(r'C:\windows\notepad.exe')
True
>>> import numpy as np
>>> a = np.array([1, 2, 3, 4])
>>> print(a)
array([1, 2, 3, 4])
在上述代码中:
import math
导入了标准库math
,并使用math.sin
计算0.5(弧度)的正弦值。import random
导入了标准库random
,并生成随机数。import os.path as path
导入标准库os.path
并设置别名为path
,然后检查文件是否存在。import numpy as np
导入扩展库numpy
并设置别名为np
,然后创建并打印一个数组。
1.6.2 from 模块名 import 对象名 [as 别名]
这种方式仅导入明确指定的对象,可以为导入的对象设置别名。这种导入方式减少查询次数,提高访问速度,减小打包后的文件大小,同时减少程序员需要输入的代码量,无需使用模块名作为前缀。以下是一些示例:
>>> from math import sin
>>> sin(3)
0.1411200080598672
>>> from math import sin as f
>>> f(3)
0.1411200080598672
>>> from os.path import isfile
>>> isfile(r'C:\windows\notepad.exe')
True
在上述代码中:
from math import sin
只导入了math
模块中的`sinf函数。from math import sin as f
为导入的sin
函数设置别名为f
。from os.path import isfile
只导入了os.path
模块中的isfile
函数,用于测试给定路径是否为文件。
1.6.3 from 模块名 import *
这是上面用法的一种极端情况,可以一次导入模块中通过__all__
变量指定的所有对象。以下是一些示例:
>>> from math import *
>>> gcd(36, 18)
18
>>> pi
3.141592653589793
>>> e
2.718281828459045
>>> log2(8)
3.0
>>> log10(100)
2.0
>>> radians(180)
3.141592653589793
在上述代码中:
from math import *
导入了math
模块中的所有对象。- 使用了
gcd
计算最大公约数、常数pi
、常数e
、以2为底的对数log2
、以10为底的对数log10
和将角度转换为弧度的radians
函数。
这种方式虽然简单粗暴,写起来省事,可以直接使用模块中的所有对象而不需要再使用模块名作为前缀。但一般不推荐这样使用,因为会降低代码的可读性,有时难以区分自定义函数和从模块中导入的函数。此外,这种导入方式将导致命名空间的混乱,如果多个模块中有同名的对象,只有最后一个导入的模块中的对象有效,之前导入的模块中的同名对象将无法访问,不利于代码的理解和维护。