2012-12-11 73 views
1

我用蟒和CGI玩耍,並想知道爲什麼會出現下面的兩個實施例之間的差:價值屬性,爲什麼有時需要?

form = cgi.FieldStorage() 
for field in form.keys(): 
    sys.stdout("%s ----> %s<br />" % (field, form[field].value)) 

實施例1(部分)2

form = {'one': '1', 'two': '2', 'three': '3'} 
for field in form.keys(): 
    sys.stdout("%s ---> %s\n" % (field, form[field])) 

爲什麼你需要第一個例子中的.value屬性,但在第二個例子中,你不需要我噸返回鍵的價值?

+3

可能是因爲'cgi.FieldStorage .__ getitem__'有一個屬性返回的對象'值'。 –

回答

0

在第一個例子中。

form = cgi.FieldStorage() 

形式現在是類型FieldStorage此對象的對象可以象一個字典(object[key])被訪問並且它將實施例2含有隻是字符串中返回一個對象,但是,與通常的詞典等。在示例1的字典式訪問中返回的對象必須被告知如何顯示它或訪問它,在這種情況下,您需要對象value

爲了更好地理解這一點,您可以嘗試一些即時調試。

通過遍歷cgi.FieldStorage()中的項目,然後您可以看到它們是什麼類型的對象。也許嘗試玩一個單獨的對象,看看它是如何工作的?

順便說一句,如果對象有一個__str__功能,你可能不需要.value更多的信息,您可以閱讀有關classes__str__

1

這取決於什麼是存儲在form字典。

在示例1中,它是一些相當複雜的對象,顯然不能以所需的方式轉換爲字符串。

例2的字典條目只是字符串,所以它們可以直接使用。

相關問題