使用if检查实例

时间:2012-12-11 02:54:40

标签: python if-statement

以下是正常工作的代码块。

   for key in context:
        if isinstance(context[key],collections.Iterable):
            queryString += '%s=%s&' % (key, urllib.quote(context[key]))
        else:
            queryString += '%s=%s&' % (key, context[key])
    return queryString

但我不明白使用if块。不应该做以下工作吗?

for key in context:
    queryString += '%s=%s&' % (key, context[key])
return queryString

1 个答案:

答案 0 :(得分:3)

基本上是说“在转换为字符串表示时引用任何非数字或序列的内容”。它逃脱了角色,使其成为urlencoded。

if会阻止它引用intfloat等,因为这会导致quote函数崩溃。

context = {'a': 'a b c', 'b': ('a', '@', 'c'), 'c': 1}
queryString = ''

for key in context:
    if isinstance(context[key],collections.Iterable):
        queryString += '%s=%s&' % (key, urllib.quote(context[key]))
    else:
        queryString += '%s=%s&' % (key, context[key])

print queryString
# a=a%20b%20c&c=1&b=a%40c&

虽然这只取决于你的潜在投入是什么(上下文的价值)。它会崩溃,比如一个整数列表。

不使用quote将如下所示:

for key in context:
    queryString += '%s=%s&' % (key, context[key])

# invalid url format
# a=a b c&c=1&b=('a', '@', 'c')&

在所有内容上运行quote会导致:

for key in context:
    queryString += '%s=%s&' % (key, urllib.quote(context[key]))
...
TypeError: argument 2 to map() must support iteration