1

我在玩 python 和 cgi,想知道为什么下面两个示例之间存在差异:

示例 1(部分)

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

示例 2

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

为什么.value在第一个示例中需要该属性,而在第二个示例中您不需要它返回键的值?

4

2 回答 2

1

这取决于form字典中存储的内容。

在示例 1 中,它是一些相当复杂的对象,显然无法以所需的方式转换为字符串。

示例 2 的 dict 条目只是字符串,因此可以直接使用它们。

于 2012-12-11T15:12:51.170 回答
0

在第一个例子中。

form = cgi.FieldStorage()

form 现在是一个类型的对象,FieldStorage该对象可以像字典 ( object[key]) 一样访问,并且它将返回一个对象,但是,与示例 2 中仅包含字符串的普通字典不同。在示例 1 的类似字典的访问中返回的对象必须被告知您希望如何显示或访问它,在这种情况下,您需要 objects value

为了更好地理解这一点,您可以尝试一些即时调试。

通过迭代其中的项目,cgi.FieldStorage()您可以看到它们是什么类型的对象。也许尝试玩一个单独的对象,看看它是如何工作的?

顺便说一句,如果对象具有__str__功能,您可能不需要.value更多信息,您可以阅读有关__str__

于 2012-12-11T15:16:55.853 回答