>>> from env_helper import info; info()
页面更新时间: 2021-08-29 22:04:26
运行环境:
    Linux发行版本: Debian GNU/Linux 11 (bullseye)
    操作系统内核: Linux-5.10.0-8-amd64-x86_64-with-glibc2.31
    Python版本: 3.9.2

2.11. 导入模块

Python程序可以调用一组基本的函数,这称为“内建函数”,包括你见到过的 print()input()len()函数。 除此之外,Python 还包括一组模块,称为“标准库”。 每个模块都是一个Python程序,包含一组相关的函数,可以嵌入你的程序之中。 例如,math 模块有数学运算相关的函数,random 模块有随机数相关的函数,等等。

在开始使用一个模块中的函数之前,必须用 import 语句导入该模块。 在代码中,import 语句包含以下部分:

  • import 关键字;

  • 模块的名称;

  • 可选的更多模块名称,之间用逗号隔开。

在导入一个模块后,就可以使用该模块中所有很酷的函数。 让我们试一试 random 模块,它让我们能使用 random.ranint() 函数。

运行以下代码 :

>>> import random
>>> for i in range(5):
>>>     print(random.randint(1, 10))
2
3
7
3
9

random.randint() 函数调用求值为传递给它的两个整数之间的一个随机整数。 因为randint()属于random模块,必须在函数名称之前先加上random., 告诉python在 random 模块中寻找这个函数。

下面是import语句的例子,它导入了 4个不同的模块:

>>> import random, sys, os, math

现在我们可以使用这4个模块中的所有函数。

2.11.1. from import 语句

import语句的另一种形式包括from关键字,之后是模块名称,import关键字和一个星号,例如 from random import *

使用这种形式的 import 语句,调用 random 模块中的函数时不需要 random. 前缀。 但是,使用完整的名称会让代码更可读,所以最好是使用普通形式的 import 语句。

>>> from random import randint

2.11.2. import 与 from…import

  • 将整个模块(somemodule)导入,格式为: import somemodule

  • 从某个模块中导入某个函数,格式为: from somemodule import somefunction

  • 从某个模块中导入多个函数,格式为: from somemodule import firstfunc, secondfunc, thirdfunc

  • 将某个模块中的全部函数导入,格式为: from somemodule import *

导入 sys 模块

>>> import sys
>>> print('================Python import mode==========================');
>>> print ('命令行参数为:')
>>> for i in sys.argv:
>>>     print (i)
================Python import mode==========================
命令行参数为:
/usr/lib/python3/dist-packages/ipykernel_launcher.py
-f
/home/bk/.local/share/jupyter/runtime/kernel-a5c75be5-7412-4bd8-bd21-9c2591ebe302.json

注意此处是在 JupyterLab 环境中运行,所以得到的结果与直接使用 Python 环境的结果是很不相同的。

>>> print ('\n python 路径为',sys.path)
python 路径为 ['/home/bk/jubook/book_python/ws_pynotes/jubook_pynotes/pt1_basic_Python基础/ch02_flow_流程控制', '/usr/lib/python39.zip', '/usr/lib/python3.9', '/usr/lib/python3.9/lib-dynload', '', '/home/bk/.local/lib/python3.9/site-packages', '/usr/local/lib/python3.9/dist-packages', '/usr/lib/python3/dist-packages', '/usr/lib/python3/dist-packages/IPython/extensions', '/home/bk/.ipython']

导入 sys 模块的 argv,path 成员

>>>
>>> from sys import argv,path  #  导入特定的成员
>>>
>>> print('================python from import===================================')
>>> print('path:',path) # 因为已经导入path成员,所以此处引用时不需要加sys.path
================python from import===================================
path: ['', '/usr/lib/python35.zip', '/usr/lib/python3.5', '/usr/lib/python3.5/plat-x86_64-linux-gnu', '/usr/lib/python3.5/lib-dynload', '/home/shaopp/.local/lib/python3.5/site-packages', '/usr/local/lib/python3.5/dist-packages', '/usr/lib/python3/dist-packages', '/usr/lib/python3/dist-packages/IPython/extensions', '/home/shaopp/.ipython']

2.11.3. __name__属性

一个模块被另一个程序第一次引入时,其主程序将运行。 如果我们想在模块被引入时,模块中的某一程序块不执行,我们可以用__name__属性来使该程序块仅在该模块自身运行时执行。

>>> if __name__ == '__main__':
>>>     print('程序自身在运行')
>>> else:
>>>     print('我来自另一模块')
程序自身在运行

将上面的代码保存为 using_name.py 文件,然后运行下面语句将模块导入,看一下得到的结果:

 >>> import using_name

说明:
每个模块都有一个\ ``__name__``\ 属性,当其值是\ ``'__main__'``\ 时,表明该模块自身在运行,否则是被引入。

2.11.4. 导入时重命名

从模块导入时,通常使用 import somemodule 或使用 from somemodule import somefunctionfrom somemodule import somefunction, anotherfunction, yetanotherfunctionfrom somemodule import * 仅当你确定要导入模块中的一切时,采用使用最后一种方式。 但如果有两个模块,它们都包含函数 open ,该如何办呢?你可使用第一种方式导入这两个模块,并像下面这样调用函数:

module1.open(...)
module2.open(...)

但还有一种办法:在语句末尾添加as 子句并指定别名。下面是一个导入整个模块并给它指定别名的例子:

>>> import math as foobar
>>> foobar.sqrt(4)
2.0

下面是一个导入特定函数并给它指定别名的例子:

>>> from math import sqrt as foobar
>>> foobar(4)
2.0

2.11.5. dir() 函数

内置的函数 dir() 可以找到模块内定义的所有名称。以一个字符串列表的形式返回:

>>> import fibo, sys
>>> dir(fibo)
['__builtins__',
 '__cached__',
 '__doc__',
 '__file__',
 '__loader__',
 '__name__',
 '__package__',
 '__spec__',
 'fib',
 'fib2']

如果没有给定参数,那么 dir() 函数会罗列出当前定义的所有名称: