2017-07-05 37 views
7

我对python很新,我有一个简单的问题。如何省略模块前缀?

例如

如果我做

import A 

然后我可以使用A.b()。 我想知道,如何在A.b()中省略A

+0

您是否在尝试阅读[文档](http://docs.python.org)之前尝试过? – cat

回答

17

如果你想使用b从模块A

from A import b 

如果你想将其重命名:

from A import b as my_b 

如果您需要多个对象:

from A import b, c, d 

如果你需要的一切:

from A import * 

关于import *选项,请阅读this post。 它很短,但是tl; dr:不要从模块中导入任何东西,只需要from A import *。 如果你真的需要从模块,或者其内容的很大一部分的一切,喜欢正常的货物,可能与重命名:

import numpy as np 
import tkinter as tk 
+1

我不会说你绝对不应该使用'from A import *'。只是在你这样做的时候你应该小心。例如,在Tk教程中向我推荐我使用'from tkinter import *;从tkinter导入ttk'为主题的小部件,因为'tk'和'ttk'很容易混淆。使用'tkinter'时,我几乎总是这样做。 (我只是没有把两个进口放在不同的生产线上,因为我不知道如何在评论中这样做)。 –

+1

@IsaacSaffold这是相当真实的,但所需的护理是相当痛苦的。无论如何,我链接的这篇文章涵盖了比我更好的方式。 –

+7

一旦你从'os import *'执行''并花费数小时调试,因为你的'open'调用不再工作了,你将永远不会再使用通配符导入。 – Matthias

7

由于A是一个模块,你可以这样做:

from A import b 

b() 
2

这个问题已经回答了,但使用进口时需要注意的一件事是

from module import foo 

import module 

是绝对相同的,至于内存和性能有关。无论哪种情况,编译module并将其加载到sys.modules。唯一的区别是什么被带入你的名字空间。在第一种情况下,它是foo。在第二种情况下,它是module

由于其他答案没有解释为什么使用from module import *是坏的,这是什么原因:*将导入一切到您的命名空间中直接使用。这不是一个好主意,除非你知道你在做什么。名称冲突绝对是可能的,特别是在导入多个大型模块时。

这可能是一个意见问题,但我相信import module其次是module.foo()更安全,并给读者一个关于该方法/属性的更好的想法,它来自哪里以及它在做什么。可读性很重要!