值属性,为什么有时需要?

时间:2012-12-11 15:10:30

标签: python

我正在玩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属性,但在第二个示例中,您不需要它来返回键的值?

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

第一个例子中的

form = cgi.FieldStorage()

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

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

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

如果对象具有__str__功能,您可能不需要.value来获取有关classes__str__

的更多信息