我正在接受一些大学顾问给我的面试准备问题,这个问题被建议为不同的面试做好准备:
“完成功能:
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)
答案 0 :(得分:4)
首先定义inner
和outer
是什么:接受参数并返回结果的函数。
然后定义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)
它们的意思是:创建一个函数,在给定f
和g
的情况下,创建一个函数,该函数需要x
并给出f(g(x))
。将f
和g
看作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))