小编obl*_*lex的帖子

Python 类型和 future

我很高兴在 Python 3 中使用输入模块。此外,我很高兴使用asyncio代替twisted,tornado和替代方案。

我的问题是如何正确定义协程的结果?

我们应该说它只是一个协程吗?示例1:

async def request() -> asyncio.Future:
    pass
Run Code Online (Sandbox Code Playgroud)

或者我们应该将协程的结果类型定义为返回值类型?示例2:

async def request() -> int:
    pass
Run Code Online (Sandbox Code Playgroud)

如果是,那么如何使用返回 future 的普通函数?示例3:

def request() -> asyncio.Future:
    f = asyncio.Future()
    # Do something with the future
    return f
Run Code Online (Sandbox Code Playgroud)

这是正确的方法吗?那么我们如何才能知道未来的预期结果是什么?

python future typing python-asyncio concurrent.futures

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

Pyparsing 中的贪婪表达式

aaa:bbb(123)我正在尝试使用 Pyparsing将字符串拆分为标记。

我可以使用正则表达式来做到这一点,但我需要通过 Pyparsing 来做到这一点。

解决re方案将如下所示:

>>> import re
>>> string = 'aaa:bbb(123)'
>>> regex = '(\S+):(\S+)\((\d+)\)'
>>> re.match(regex, string).groups()
('aaa', 'bbb', '123')
Run Code Online (Sandbox Code Playgroud)

这很清楚也很简单。这里的关键点是\S+“除了空格之外的所有内容”。

现在我将尝试使用 Pyparsing 来做到这一点:

>>> from pyparsing import Word, Suppress, nums, printables
>>> expr = (
...     Word(printables, excludeChars=':')
...     + Suppress(':')
...     + Word(printables, excludeChars='(')
...     + Suppress('(')
...     + Word(nums)
...     + Suppress(')')
... )
>>> expr.parseString(string).asList()
['aaa', 'bbb', '123']
Run Code Online (Sandbox Code Playgroud)

好的,我们得到了相同的结果,但这看起来不太好。我们已经设置excludeChars让 Pyparsing 表达式在我们需要的地方停止,但这看起来并不健壮。如果我们在源字符串中包含“排除”字符,则相同的正则表达式将正常工作:

>>> string = 'a:aa:b(bb(123)'
>>> …
Run Code Online (Sandbox Code Playgroud)

python pyparsing

5
推荐指数
1
解决办法
545
查看次数