在python中导入模块的指南

时间:2017-12-06 01:02:14

标签: python python-import

我知道有很多关于在python中导入模块的问题,但我的问题似乎有些不同。

我正在尝试了解何时必须导入整个模块,而不是必须导入模块中的特定条目。似乎这两种方式中只有一种有效。

例如,如果我想使用basename,则导入os.path不起作用。

>>> import os.path
>>> basename('scripts/cy.py')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'basename' is not defined

相反,我需要从os.path导入basename,如

>>> from os.path import basename
>>> basename('scripts/cy.py')
'cy.py'

另一方面,如果我想使用shutil.copyfile,从shutil导入copyfile不起作用

>>> 
>>> from shutil import copyfile
>>> 
>>> shutil.copyfile('emma','newemma')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'shutil' is not defined

相反,我必须像

一样导入shutil
>>> 
>>> import shutil
>>> 
>>> shutil.copyfile('emma','newemma')
'newemma'
>>> 

我能够做到这一点的唯一方法是通过实验。 是否有一些指导方针可以避免实验?

2 个答案:

答案 0 :(得分:4)

如果您导入

import os.path

然后你必须使用完整的命名空间os.path

os.path.basename()

如果您使用from

导入
from shutil import copyfile

然后您不必使用完整的命名空间shutil

copyfile(...)

这就是全部。

如果您使用as

import os.path as xxx

然后你必须使用xxx而不是os.path

xxx.basename()

如果您使用fromas

from os.path import basename as xxx

然后你必须使用xxx而不是basename

xxx()

答案 1 :(得分:-1)

您可以使用表单模块导入*

from time import *
sleep(2)

允许您调用其子模块,而不是:

from time import sleep
sleep(2)

或:

import time
time.sleep(2)

这会导入包的每个子模块 https://docs.python.org/2/tutorial/modules.html#importing-from-a-package