Предположим, у меня есть такой код
async def fetch_text() -> str:
return "text "
async def show_something():
something = await fetch_text()
print(something)
Это нормально.Но затем я хочу очистить данные, поэтому я делаю
async def fetch_text() -> str:
return "text "
def fetch_clean_text(text: str) -> str:
text = await fetch_text()
return text.strip(text)
async def show_something():
something = fetch_clean_text()
print(something)
(я мог бы очистить текст внутри show_something()
, но давайте предположим, что show_something()
может печатать много вещей, а не или не должензнать, как правильно их чистить.)
Это, конечно, SyntaxError: 'await' outside async function
.Но - если этот код может выполняться - хотя выражение await
не помещается в функцию сопрограммы, оно выполняется в контексте единицы.Почему такое поведение недопустимо?
Я вижу одного профи в этом дизайне;в моем последнем примере вы не можете видеть, что тело show_something()
делает что-то, что может привести к его приостановке.Но если бы я сделал fetch_clean_text()
сопрограммой, это не только усложнило бы ситуацию, но, вероятно, также уменьшило бы производительность.Просто не имеет смысла иметь другую сопрограмму, которая сама по себе не выполняет никаких операций ввода-вывода.Есть ли лучший способ?