'What are the implications of using a variable declared outside of an async context as a placeholder for its return values?

I understand that if the variable was declared outside of the function, it should be marked as global. But what about this case? Is it safe to do something like:

async def foo():
    items = []
    async with SomeClient() as client:
        fetched_items = await client.get_items()

        for item in fetched_items:
            items.append(item)

    return items


Solution 1:[1]

Yes it is completely safe. with statements do not create a new scope.

As for your code, you can easily refactor it:

async def foo():
    async with SomeClient() as client:
        return list(await client.get_items())

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Bharel