【发布时间】:2017-12-06 01:02:14
【问题描述】:
我知道有很多关于在 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
相反,我必须像 in 一样导入 shutil
>>>
>>> import shutil
>>>
>>> shutil.copyfile('emma','newemma')
'newemma'
>>>
我能够做到这一点的唯一方法是通过实验。 是否有一些指导方针可以避免实验?
【问题讨论】:
-
归结为:你只能引用你在
import语句中使用过的任何字符串,因此import a.b; a.b.c()是有效的,from a.b import c; c()也是有效的,但这两个是无效的:import a.b; c()(您将其视为全局对象),from a.b import c; c()(该模块已被 Python '遗忘')。 -
我猜你已经习惯了
#include在 C 中的工作方式。在 Python 中,你不需要复制粘贴模块。解释器打开它,读取它并解释它,然后创建一个指向模块及其内容的“变量”。 -
太好了,我不能再编辑我的评论了,但最后一个示例应该是
from a.b import c; a.b.c()。
标签: python python-import