2017-06-12 6 views
0

私は公式ドキュメントにあった、see this exampleこの表現を理解する方法: ":URLのURL future_to_url = {executor.submit(load_url、URL、60)"

urls = ['http://www.foxnews.com/', 
    'http://www.cnn.com/', 
    'http://europe.wsj.com/', 
    'http://www.bbc.co.uk/', 
    'http://some-made-up-domain.com/'] 
def load_url(url, timeout): 
    with urllib.request.urlopen(url, timeout=timeout) as conn: 
     return conn.read() 
with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor: 
    future_to_url = {executor.submit(load_url, url, 60): url for url in urls} 
    for future in concurrent.futures.as_completed(future_to_url): 
     url = future_to_url[future] 
     try: 
      data = future.result() 
     except Exception as exc: 
      print('%r generated an exception: %s' % (url, exc)) 
     else: 
      print('%r page is %d bytes' % (url, len(data))) 

しかし、私はドン」にT understant表現の意味:

"future_to_url = {executor.submit(load_url、URL、60):URLのURL"

は、それがどの文法ポイントからですか?ありがとう!

答えて

2

listわかりやすい表現のように、dict(辞書)の理解表現です。演算子は{}で、[]ではありません。 リテラルを{}と定義しているためです。例えば:

l = [1, 2, 3] 
# key is `'name' + str(x)`, value is `x` 
print({ 'name' + str(x): x for x in l }) 
# {'name2': 2, 'name3': 3, 'name1': 1} 

は、上記のコードで辞書のキー値がxで、'name' + str(x)です。
{executor.submit(load_url, url, 60): url for url in urls}では、生成されたdictのキーはexecutor.submit(load_url, url, 60)です。値はurlです。

dictの理解の詳細は、Dict Comprehensionsを参照してください。

+0

ありがとうございます。 – Devin

+0

大歓迎です! @Devin。 – zhenguoli