pytest::python:如何理解此代码中如何调用闭包

pytest::python:如何理解此代码中如何调用闭包,python,closures,pytest,Python,Closures,Pytest,我从一本书中读到了这段代码 在这里,我无法理解语法app\u user\u factory(“A”) from typing import List, Optional import pytest from django.contrib.auth.models import User, Group, Permission @pytest.fixture def app_user_group(db) -> Group: group = Group.objects.create(n

我从一本书中读到了这段代码

在这里,我无法理解语法
app\u user\u factory(“A”)

from typing import List, Optional

import pytest
from django.contrib.auth.models import User, Group, Permission

@pytest.fixture
def app_user_group(db) -> Group:
    group = Group.objects.create(name="app_user")
    change_user_permissions = Permission.objects.filter(
        codename__in=["change_user", "view_user"],
    )
    group.permissions.add(*change_user_permissions)
    return group

@pytest.fixture
def app_user_factory(db, app_user_group: Group):
    # Closure
    def create_app_user(
        username: str,
        password: Optional[str] = None,
        first_name: Optional[str] = "first name",
        last_name: Optional[str] = "last name",
        email: Optional[str] = "foo@bar.com",
        is_staff: str = False,
        is_superuser: str = False,
        is_active: str = True,
        groups: List[Group] = [],
    ) -> User:
        user = User.objects.create_user(
            username=username,
            password=password,
            first_name=first_name,
            last_name=last_name,
            email=email,
            is_staff=is_staff,
            is_superuser=is_superuser,
            is_active=is_active,
        )
        user.groups.add(app_user_group)
        # Add additional groups, if provided.
        user.groups.add(*groups)
        return user
    return create_app_user

@pytest.fixture
def user_A(db, app_user_factory) -> User:
    return app_user_factory("A")
#Generally as per my understanding the flow is when one run the test is

db = some_test_db_from_pytest
group = app_user_group(db)
closure_function = app_user_factory(db,group) # returns create_app_user function

#then

closure_function('A')

# But here we see directly

app_user_factory("A")