我无法理解Python 3.6中引入的异步理解的使用.作为免责声明,我在Python中处理异步代码方面没有太多经验.
Python 3.6文档中新增的示例是:
result = [i async for i in aiter() if i % 2]
Run Code Online (Sandbox Code Playgroud)
在PEP中,这扩展到:
result = []
async for i in aiter():
if i % 2:
result.append(i)
Run Code Online (Sandbox Code Playgroud)
我想我理解该aiter()函数是异步调用的,所以每次迭代都aiter可以继续进行,而前一个迭代还没有必要返回(或者这种理解是错误的吗?).
我不确定的是,这将如何转化为列表理解.结果是按照返回的顺序放入列表中的吗?或者在最终列表中是否有有效的"占位符",以便每个结果都以正确的顺序放在列表中?或者我是否以错误的方式思考这个问题?
另外,是否有人能够提供一个真实的例子来说明适用的用例和这样的async理解中的基本机制?
是否有Python字典方法或简单表达式返回字典中存在的第一个键(来自可能键列表)的值?
假设我有一个包含许多键值对的Python字典.任何特定密钥的存在都不能保证.
d = {'A':1, 'B':2, 'D':4}
Run Code Online (Sandbox Code Playgroud)
如果我想获取给定键的值,并返回一些其他默认值(例如None)如果该键不存在,我只需:
my_value = d.get('C', None) # Returns None
Run Code Online (Sandbox Code Playgroud)
但是如果我想在默认为最终默认值之前检查一些可能的键呢?一种方法是:
my_value = d.get('C', d.get('E', d.get('B', None))) # Returns 2
Run Code Online (Sandbox Code Playgroud)
但随着备用键数量的增加,这会变得相当复杂.
是否存在针对此方案的Python函数?我想象的是:
d.get_from_first_key_that_exists(('C', 'E', 'B'), None) # Should return 2
Run Code Online (Sandbox Code Playgroud)
如果不存在这样的方法,是否有一个在这种情况下常用的简单表达式?