我從學習Python困難的方法這段代碼,我需要評論它:你稱之爲模塊的元素是什麼?
from sys import argv
所以我也:#imports從sys模塊
我知道做什麼的argv argv的,但我無法確定要調用sys模塊的這個元素?一個變量,一個方法,一個函數?參數變量?
另外,考慮到這一行代碼,這是否意味着所有的sys模塊都被導入到我的程序中,或者只有argv?
我從學習Python困難的方法這段代碼,我需要評論它:你稱之爲模塊的元素是什麼?
from sys import argv
所以我也:#imports從sys模塊
我知道做什麼的argv argv的,但我無法確定要調用sys模塊的這個元素?一個變量,一個方法,一個函數?參數變量?
另外,考慮到這一行代碼,這是否意味着所有的sys模塊都被導入到我的程序中,或者只有argv?
argv
是sys
模塊名稱空間中的變量。它恰好是一個列表。
聲明
from sys import argv
導致Python來解析整個sys
模塊(假定它沒有被解析,在這種情況下,它是不重裝上陣),以及argv
變量複製到當前模塊命名空間。
非常感謝! – 0101amt
http://docs.python.org/tutorial/modules.html從一個模塊談到
定義可以是進口到其它模塊或進入主模塊
和下面進一步
有一個導入的
import
語句的變體名稱從模塊直接導入導入模塊的符號表中。
從這個意義上說,argv
是在sys
中定義的名稱。
我知道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。
非常感謝你! – 0101amt
在學習或寫教程時,沒問題。但通常最好是評論*爲什麼*你做了什麼而不是*你做了什麼 - 從代碼中可以看到。 – glglgl
@glglgl很好的觀察!我會記住這一點。謝謝! – 0101amt