2015-09-04 47 views
3

使用在路徑中引用兩個以上點的模塊可以嗎?就像這個例子:Python相對導入多於兩個點

# Project structure: 
# sound 
#  __init__.py 
#  codecs 
#   __init__.py 
#  echo 
#   __init__.py 
#   nix 
#    __init__.py 
#    way1.py 
#    way2.py 

# way2.py source code 
from .way1 import echo_way1 
from ...codecs import cool_codec 

# Do something with echo_way1 and cool_codec. 

UPD:改變的例子。而且我知道,這將在實踐中發揮作用。但它是一種常用的導入方法嗎?

+0

在這種情況下,'...'三點意味着什麼? –

+0

@AnandSKumar,我已經更新了這個問題。 –

+1

很多年前,我在Django參加了一個研討會。建議在Django中使用相對進口作爲良好做法。然而其中一個運營車間的人說,我們應該使用不超過兩個點,Guido van Rossum會親自砍掉那些使用三點符號表示相對進口商人的手指。我總是回想起這一點,所以我避免使用它。不過有時候我會在某些特定的情況下受到誘惑。給出的理由是對可讀性和進口損失的關注。 – cezar

回答

1

PEP8:建議

絕對進口,因爲它們通常更具有可讀性和趨向於更好的表現(或至少提供更好的錯誤消息),如果不正確地配置了導入系統(例如,當一包內的目錄上的sys.path結束):

import mypkg.sibling 
from mypkg import sibling 
from mypkg.sibling import example 

然而,明確的相對進口絕對我的可接受的替代M端口,尤其是複雜的包佈局打交道時使用地方絕對進口將是不必要的冗長:

from . import sibling 
from .sibling import example 

標準庫代碼應該避免複雜的封裝佈局和總是使用絕對導入。

+3

我讀過它了。但是沒有任何關於兩點以上的相對進口的說法。在示例[這裏](http://stackoverflow.com/questions/14767426/relative-imports)和一些第三方python包中,它看起來像傾向於使用相對導入。 –