将两个给定函数应用于Python中的外部参数的函数

时间:2018-01-28 06:57:14

标签: python python-3.x function lambda

我正在接受一些大学顾问给我的面试准备问题,这个问题被建议为不同的面试做好准备:

  

“完成功能:

static void func()
{
    foreach (var type in typeof(Program).Assembly.GetTypes())
    {
        var attrs = type.GetCustomAttributes(typeof(A)).ToList();
        if(attrs.Any())
        {
            A attr = attrs.First() as A;
            dic.Add(type, () => attr.SayHi());
        }
    }
}
  

它接受两个函数,一个外部函数和一个内部函数,并返回一个函数,它将外部函数应用于内部函数到参数。“

我对这个问题感到有些困惑,因为它不接受函数中的参数,而是在它之外应用:

applyFunctions(outer_function, inner_function)

我熟悉lambda及其用途,但这个问题让我很难过。

任何建议都会很棒。提前谢谢。

编辑:

包括的测试用例(示例)是:

applyFunctions(outer_function, inner_function)(5)

3 个答案:

答案 0 :(得分:4)

首先定义innerouter是什么:接受参数并返回结果的函数。

然后定义apply,一个带有两个函数的函数,并返回一个以某种方式组合这两个函数的函数。

def inner(n):
    print("inner called")
    return 3 * n

def outer(n):
    print("outer called")
    return n - 5

def apply(inn, out):
    return lambda n: out(inn(n))


a = apply(inner, outer)
print(a(5))

输出:

10

答案 1 :(得分:2)

它们的意思是:创建一个函数,在给定fg的情况下,创建一个函数,该函数需要x并给出f(g(x))。将fg看作lambda f,g:<something>的函数看起来像x lambda x:<something>的函数是lambda f, g: lambda x: f(g(x))。把它放在一起,你有 UPDATING build\lib.win32-3.4\pandas/_version.py set build\lib.win32-3.4\pandas/_version.py to '0.22.0' running build_ext building 'pandas._libs.tslibs.strptime' extension error: Microsoft Visual C++ 10.0 is required (Unable to find vcvarsall.bat). ---------------------------------------- Command "C:\Python34\python.exe -u -c "import setuptools, tokenize; __file__='C:\\users\\cardio\\Temp\\pip-build-5xhz4ymf\\pandas\\setup.py'; f=getattr(tokenize, 'open', open)(__file__); code=f.read().replace('\r\n', '\n');f.close(); exec(compile(code, __file__, 'exec'))" install --record C:\users\cardio\Temp\pip-prngb6r2-record\install-record.txt --single-version-externally-managed --compile" failed with error code 1 in C:\users\cardio\Temp\pip-build-5xhz4ymf\pandas\

答案 2 :(得分:0)

使用lambda创建一个新函数,将所有* args和** kwargs传递给inner_function,返回outer_function:

def applyFunctions(outer_function, inner_function):
    return lambda *args, **kwargs: outer_function(inner_function(*args, **kwargs))