理解理解集

时间:2016-03-03 22:20:16

标签: python json dictionary-comprehension

好的,所以我得到了这段代码:

var clientId = "___REPLACE_WITH_CLIENTID___";
var clientSecret = "___REPLACE_WITH_CLIENTSECRET___";            
var sdkConfig = new Dictionary<string, string> {
   { "mode", "sandbox" },
   { "clientId", clientId },
   { "clientSecret", clientSecret }
};
var accessToken = new OAuthTokenCredential(clientId, clientSecret, sdkConfig).GetAccessToken();
var apiContext = new APIContext(accessToken);
apiContext.Config = sdkConfig;

对函数执行常规for的结果,不需要返回此结果,因为它只返回第一个对象的对:

class ApiCall(object):

    def __init__(self, url):
        self.url = url

    def call(self):
        call = requests.get(self.url)
        response = call.content.decode('utf-8')
        result = json.loads(response)
        return result


class IncomeSources(object):

    def __init__(self, result):
        self.result = result

    def all(self):
            #This is the dict comprehension
            #return {(slot['accountLabelType'], slot['totalPrice']) for slot in self.result}

            for slot in self.result:

                return (slot['accountLabelType'], slot['totalPrice'])

def main():
            url = ('https://datafeed/api/')
            api_result = ApiCall(url).call()
            target = IncomeSources(api_result).all()
            print(target)


main()

但是在dict理解的情况下,它会返回json响应中所有json对象的所有槽对(这很酷)为什么dict理解会抓取所有对,而常规for不是?

1 个答案:

答案 0 :(得分:1)

  

为什么dict理解能够抓住所有对,而常规则不是?

当你循环某个东西并在循环中有一个return语句时会发生什么,一旦遇到return语句,就会返回该值(并且只返回该值)。

dict理解首先构造整个字典,然后作为一个整体返回给调用者。

这与理解力有关,而与return语句有关。比较:

>>> def foo():
...     for i in range(5):
...         return i
...
>>> foo()
0

使用:

>>> def foo():
...     return list(range(5))
...
>>> foo()
[0, 1, 2, 3, 4]