小编And*_*Guy的帖子

Python异步理解 - 它们如何工作?

我无法理解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 asynchronous list-comprehension python-3.6

30
推荐指数
2
解决办法
5338
查看次数

从字典中获取存在的第一个键的值

TL; DR

是否有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)

如果不存在这样的方法,是否有一个在这种情况下常用的简单表达式?

python lookup dictionary

6
推荐指数
1
解决办法
1238
查看次数