Python高阶函数Callable相关疑问:X/Y值计算与max_func实现逻辑
Python代码问题解答
X、Y的取值结果
按照func_max的定义,h(x)的返回值为f(x)和g(x)的最大值,其中f(x)=x²,g(x)=5x:
- 计算
X = h(3):f(3) = 3² =9,g(3)=5*3=15,取最大值得X=15 - 计算
Y = h(6):f(6) = 6² =36,g(6)=5*6=30,取最大值得Y=36
max_func的正确写法与x的作用逻辑
你原来的代码报错的核心原因是:max_func的功能是返回一个新的函数,而不是直接计算f和g的大小,你在max_func的层级直接引用x时,x还没有被定义传入。
正确的代码组装顺序如下:
- 先定义基础函数f、g
def f(x): return x**2 def g(x): return 5*x
- 定义max_func,内部嵌套实现接收x作为参数的新函数
def max_func(f,g): # 嵌套的新函数才是最后赋值给h的函数,x是调用h时传入的参数 def new_function(x: int) -> int: if f(x) > g(x): return f(x) else: return g(x) # max_func返回新函数本身,不会立刻执行计算 return new_function
- 调用逻辑和你写的一致
h = max_func(f,g) X = h(3) Y = h(6)
关于小写x的逻辑说明:
- 嵌套的
new_function里的x是形参,当你执行h(3)时,相当于把3传给这个x,再代入f(x)和g(x)计算大小返回结果 - 如果直接在
max_func的层级写f(x),此时max_func只接收了f和g两个参数,x没有任何赋值,自然会运行报错。
内容的提问来源于stack exchange,提问作者Emilia Delizia
相关产品推荐
相关产品推荐

