2017-10-18 80 views
1

我想知道我們是否可以使用「import as」來創建相對緊湊或可讀的代碼。我知道其基於PEP的常用用例,例如使名稱衝突無效。在Python中用「import as」的用例

這裏是情況(保持它非常簡單的演示目的)。假設我有一個模塊名稱process_words.py。

process_words.py:

def word_to_lower(word): 
    return word.lower 

process_article.py(讓主腳本):

import process_words 

word = "HELLO" 
word_lower = process_words.word_to_lower(word) 
print(word_lower) 

現在會是一個壞的或好的做法做這樣的事情?:

import process_words as pw 

word = "HELLO" 
word_lower = pw.word_to_lower(word) 
print(word_lower) 

這是一個非常簡單的例子。我有幾個模塊,每個模塊都有一些功能。導入每個功能from module import something不是一個選項。對我來說,感覺就像,如果我使用導入作爲一些快捷方式名稱,它會提高代碼的可讀性。有什麼想法嗎?

注:我在這裏指的是自定義模塊。

+0

我個人不喜歡用'as'重命名導入。但有時候它是必需的,例如,如果你想將兩個具有相同名稱的對象導入到一個名稱空間中。 –

+1

使用你的最佳判斷。如果你有經常使用的東西,那麼做一個簡短的別名可能會有幫助(例如,在使用SQLAlchemy時,'將sqlalchemy as sa'導入時很常見),但是如果你有太多的別名,那麼他們可能會難以記住。有人第一次閱讀將不得不尋找他們。 – Ryan

+0

@KlausD。是的,這是避免名稱衝突的常用用例。不過,我有興趣使用它來獲得更好的可讀性,儘管這有點主觀。 – utengr

回答

1

通常應該儘可能地避免這種情況。

但是它是用來影響很大,當進口的名字是無處不在的,例如numpy的是總是np,大熊貓是總是pd。你不必查找名字,你坐在一個看不見的代碼庫前:你看到np.array你知道發生了什麼。雖然它只是稍短一點,但它可以更容易地跳過。

可能有用的另一個時間是單個模塊,它在任何地方都使用另一個模塊,每隔幾行或十行就是該模塊的調用。然後,我會考慮使用一個作爲導入來減少文件的大小(閱讀)。
我以前用燒瓶應用程序做過這件事,它是一個非常薄的包裝(可測試)模塊。

如果它只是一個內部API(並且意義從上下文中完全清楚),那麼將其命名爲pw.py而不是process_words.py也許是有意義的。國際海事組織有點短,但words.py可能運作良好(但「過程」是一個普通的詞,所以我可能會找一個更具體的動詞...)。
上下文很重要,作爲words的子模塊,例如將其稱爲funcs也許有意義。

3

一個實際問題是您開始更改使用的庫或模塊的位置,以及切換實際導入而不更改代碼的位置:import somemodule將變爲import newmodule as somemodule

這是我在try-except塊中做的事情,當有Python 2/3兼容性代碼時(我猜像six這樣的包有很多這樣的)。例如:

try: 
    # Are we using Python 2? 
    import StringIO as io 
except ImportError: 
    # No, we're using Python 3 instead 
    import io 
+0

你是指用於導入的用例嗎?我假設你想說這個導入可以在這種特定情況下切換實際導入,同樣我也可以在我的用例中使用它作爲別名。如果是這樣的話,如果你可以澄清一點與我的問題有關係,那麼它會很好,所以我可以接受它作爲答案。 – utengr

+0

python 2/3中的另一件事是urllib.parse等函數(它們是相同的,但是位置不同)。我也看到了這種可選的依賴關係,例如在except塊中做'io = None' ...不知道我對此感覺如何。 –