>>> 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 somefunction
或
from somemodule import somefunction, anotherfunction, yetanotherfunction
或 from 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()
函数会罗列出当前定义的所有名称: