2012-06-25 48 views
3

我是第一次程序員,第一次使用StackOverflow用戶,從Allen Downey's free online text "Think Python"學習。練習14.5「Think Python」(Allen Downey)

此處顯示的代碼來自練習14.5(第143頁)。我一直在想弄清楚.fp是幹什麼的;我的搜索都是空的。我用有和沒有它的代碼運行代碼,並沒有注意到結果中的任何差異。我會很感激任何人的幫助。

import urllib 

conn = urllib.urlopen('http://thinkpython.com/secret.html') 

for line in conn.fp: 
    print line.strip() 
+0

歡迎,@pinoy! – invert

+0

@MaksymPolshcha @ SeanJohnson @monkut @KayZhu 非常感謝您的回覆。我花了一段時間來消化你的答案。我仍然習慣於Python文檔中使用的詞典。 據我所知,'.fp'是文件類/ Request對象中固有的一個屬性,所以不需要指定它(以這種方式使用)。這有點像指定'r'只以讀取模式打開文件,即使它不是必需的,因爲Python默認在該模式下打開文件。如果這是魯莽的比較,請讓我知道。 –

+0

@wez謝謝! –

回答

5

它只是一個附加到套接字對象的僞造文件對象。

閱讀文檔字符串:

>>> help(conn.fp) 
+0

啊,我從來沒有想過使用Python的內置幫助功能。對於我來說類仍然有些陌生,但是當我輸入'help(conn)'時,文檔字符串顯示'fp'是'__init__'構造函數的參數之一。這清除了事情。感謝您指出我們對我! –

4

了urllib.urlopen返回Request對象,它具有.fp(文件指針)作爲屬性。默認情況下,迭代時的Request對象使用相同的指針,所以沒有功能差異。

3

如上所述,它是一個文件指針,在本例中並不是真的需要,因爲urlopen()返回的對象conn已經是一個文件類對象,您可以在其上調用readlines()

我認爲這會造成減少混亂,如果例如改爲:

import urllib 

conn = urllib.urlopen('http://thinkpython.com/secret.html') 

for line in conn.readlines(): 
    print line.strip() 
+1

不需要'readlines' – georg

+0

是的,但我更喜歡明確,特別是在向初學者解釋時。 – monkut