Что лучший способ состоит в том, чтобы преобразовать Действие <T> в Func <T, Tres>?

@ Ответ Ашвини идеален. Магия случается в

zip(*lis)

Позвольте мне объяснить, почему это работает: zip берет (в простейшем случае) два списка и «зипирует» их: zip([1,2,3], [4,5,6]) станет [(1,4), (2,5), (3,6)]. Поэтому, если вы рассматриваете внешний список как матрицу, а внутренние кортежи - как строки, это транспонирование (т. Е. Мы превратили строки в столбцы).

Теперь zip является функцией произвольной арности, поэтому она может принимать более двух аргументов:

# Our matrix is:
# 1 2 3
# 4 5 6
# 7 8 9

zip([1,2,3], [4,5,6], [7,8,9])

>>> [(1, 4, 7), (2, 5, 8), (3, 6, 9)]

# Now it is
# 1 4 7
# 2 5 8
# 3 6 9

Проблема, с которой мы сталкиваемся, заключается в том, что в Не знаю, сколько аргументов мы хотим передать zip. Но, по крайней мере, мы уже знаем аргументы: они являются элементами lis! lis - это список, и каждый элемент этого списка также является списком (соответствует одной строке чисел во входном файле). * - это просто способ выражения функции Pythons «пожалуйста, используйте в качестве аргументов элементы всего, что следует, а не саму вещь!»

Итак

lis = [[1,2,3], [4,5,6]]
zip(*lis)

точно так же, как

zip([1,2,3], [4,5,6])

Поздравляю, теперь вы профессионал в Python! ; -)

19
задан Arsen Mkrtchyan 23 December 2011 в 07:39
поделиться

2 ответа

Оберните его в делегат типа Func с фиктивным возвращаемым значением, например

public static void Execute(Action<T> remoteCall)
{
    Execute(t => { remoteCall(t); return true; });
}
37
ответ дан 30 November 2019 в 02:56
поделиться

вы буквально просите передать то, что не дает результата функции, которая его требует.
Это бессмысленно.

Вы можете легко преобразовать любую функцию формы Action в Func , если вы хотите предоставить какое-либо значение результата (неявно или явно)

Func<T,TResult> MakeDefault<T,TResult>(Action<T> action)
{
    return t =>  { action(t); return default(TResult);}; 
}

или

Func<T,TResult> MakeFixed<T,TResult>(Action<T> action, TResult result)
{
    return t =>  { action(t); return result; };
}
8
ответ дан 30 November 2019 в 02:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: