2011-11-22 66 views
1

我從學習Python困難的方法這段代碼,我需要評論它:你稱之爲模塊的元素是什麼?

from sys import argv 

所以我也:#imports從sys模塊

我知道做什麼的argv argv的,但我無法確定要調用sys模塊的這個元素?一個變量,一個方法,一個函數?參數變量?

另外,考慮到這一行代碼,這是否意味着所有的sys模塊都被導入到我的程序中,或者只有argv?

+3

在學習或寫教程時,沒問題。但通常最好是評論*爲什麼*你做了什麼而不是*你做了什麼 - 從代碼中可以看到。 – glglgl

+0

@glglgl很好的觀察!我會記住這一點。謝謝! – 0101amt

回答

6

argvsys模塊名稱空間中的變量。它恰好是一個列表。

聲明

from sys import argv 

導致Python來解析整個sys模塊(假定它沒有被解析,在這種情況下,它是重裝上陣),以及argv變量複製到當前模塊命名空間。

+0

非常感謝! – 0101amt

1

http://docs.python.org/tutorial/modules.html從一個模塊談到

定義可以是進口到其它模塊或進入模塊

和下面進一步

有一個導入的import語句的變體名稱從模塊直接導入導入模塊的符號表中。

從這個意義上說,argv是在sys中定義的名稱。

2

我知道argv是幹什麼的,但是我很難弄清楚如何調用sys模塊的這個元素?

我想你的意思什麼叫argv的,而不是如何調用它。它不可調用。這是你如何證明在python中。

>>> import sys 
>>> callable(sys.argv) 
False 

現在,正如unutbu上面提到的那樣,sys模塊被加載,假設它尚未加載。這是什麼意思?那麼當你導入一個模塊時,它會被添加到sys中的一個名爲sys.modules的字典中。

>>> import sys 
>>> print sys.modules.keys 
['copy_reg', 'encodings', 'site', '__builtin__', '__main__', 'encodings.encodings', 'abc', 'posixpath', 'errno', 'encodings.codecs', '_abcoll', 'types', '_codecs', '_warnings', 'genericpath', 'stat', 'zipimport', 'encodings.__builtin__', 'warnings', 'UserDict', 'encodings.utf_8', 'sys', 'codecs', 'readline', 'os.path', 'signal', 'linecache', 'posix', 'encodings.aliases', 'exceptions', 'os'] 

字典sys.modules禁止重新加載模塊。導入語句檢查sys.modules以防止重新加載模塊。

如果你真的陷入模塊混亂,請看一下sys.builtin_module_names列表。

如果您正在盜用腳本並想在解釋器中立即生效,請重新加載腳本。

>>> reload(sys) 
>>> help(reload) 
Help on built-in function reload in module __builtin__: 

reload(...) 
    reload(module) -> module 

    Reload the module. The module must have been successfully imported before. 

所以,你有超過你想知道的模塊和模塊屬性:D。

+0

非常感謝你! – 0101amt

相關問題