2017-07-05 36 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()更安全,並給讀者一個關於該方法/屬性的更好的想法,它來自哪裏以及它在做什麼。可讀性很重要!