2009-09-29 63 views
16

可能重複:
Perl's AUTOLOAD in Python (getattr on a module)Python的自動導入

我從PHP背景的,並試圖學習Python,我想一定要做好的事情「的Python方式「而不是我以前的發展方式。

我的問題來自於PHP5中的事實,您可以設置您的代碼,因此如果您嘗試調用名稱空間中不存在的類,函數將首先運行,將加載該類並允許您繼續,就好像它已經加載一樣。這樣做的好處是類不會被加載,除非被調用,並且在使用它們之前您不必擔心加載類。

在python中,導入語句有很多重點,嘗試使用python自動導入技巧是不好的做法,以減輕對導入語句的需求嗎?我發現this module提供自動導入,但我不知道這是否是最好的方式,或者如果自動導入模塊是推薦的東西,想法?

+0

這是來自http://stackoverflow.com/questions/1024455/autoload-in-python的重複討論 – 2009-09-29 17:22:31

回答

12

進口服務於其他至少有兩個重要的目的除了使可用模塊的模塊或內容:

  1. 他們作爲某種意圖的聲明 - 「這個模塊使用服務,從這個其他模塊」或「此模塊使用屬於某個類別的服務」 - 例如如果您正在對套接字處理代碼進行安全審查,則可以從僅查看導入socket(或其他網絡相關模塊)的模塊開始。
  2. 導入用作模塊複雜性的代理。如果您發現自己擁有數十行進口產品,那麼現在可能是時候重新考慮您在模塊內部或在整個應用程序內的問題分離。這也是避免「from foo import *」類型導入的一個很好的理由。
9

在Python中,人們通常會避免自動導入,只是因爲它不值得付出努力。您可能會略微刪除啓動成本,但除此之外,不存在(或不應該)顯着影響。如果你有導入​​昂貴的模塊,並且做了很多不需要完成的工作,相反重寫模塊,而不是延遲導入它。

這就是說,汽車進口沒有什麼本質上的錯誤。由於代理性質,可能會有一些陷阱(例如,在查看尚未導入的事物時)。幾個自動導入庫正在浮動。

1

如果您正在學習Python並希望以Python方式執行操作,那麼只需導入模塊。它是不尋常的在Python代碼中找到自動導入。

1

您可以自動導入模塊,但我需要導入的最多約10個,這是我在原始程序之上添加了功能之後。你不會進口很多,名字很容易記住。