Пожалуйста, объясните мне это использование лямбда-выражения с Python

Я немного борюсь с концепцией лямбда-выражений, и у меня есть этот кусок кода здесь:

nav.add_branch(
'containers_pods',
{
    'containers_pod':
    [
        lambda ctx: list_tbl.select_row_by_cells(
            {'Name': ctx['pod'].name, 'Provider': ctx['provider'].name}),
        {
            'containers_pod_edit_tags':
            lambda _: pol_btn('Edit Tags'),
        }
    ],
    'containers_pod_detail':
    [
        lambda ctx: list_tbl.click_row_by_cells(
            {'Name': ctx['pod'].name, 'Provider': ctx['provider'].name}),
        {
            'containers_pod_timelines_detail':
            lambda _: mon_btn('Timelines'),
            'containers_pod_edit_tags_detail':
            lambda _: pol_btn('Edit Tags'),
        }
    ]
}

)

Может кто-нибудь объяснить, пожалуйста, здесь использование лямбда-выражения? Больше этого кода здесь:

https://github.com/ManageIQ/integration_tests/blob/093f4cf42127e2f98cc01d91fc2d4db487543ca1/cfme/containers/pod.py

Спасибо!

1 ответ

Решение

Лямбды - это анонимные функции, мысленно вы можете заменить этот блок

[
    lambda ctx: list_tbl.select_row_by_cells(
        {'Name': ctx['pod'].name, 'Provider': ctx['provider'].name}),
    {
        'containers_pod_edit_tags':
        lambda _: pol_btn('Edit Tags'),
    }
]

с

def function_1(ctx):
    return list_tbl.select_row_by_cells(
        {'Name': ctx['pod'].name, 'Provider': ctx['provider'].name}
    )

def function_2(_):
    return pol_btn('Edit Tags')


[
    function_1,
    {
        'containers_pod_edit_tags':
        function_2,
    }
]

Подчеркивание _ в lambda _: это соглашение в Python для переменных, которые вы не собираетесь использовать, "отбрасывание", как вы можете видеть, что лямбда / функция не использует аргумент _,

Другие вопросы по тегам