Discuss / Python / 偏函数对log()无效

偏函数对log()无效

Topic source

以下是试图导出以3为底的对数的尝试。

from functools import partial
from math import log
l3 = partial(log, base=3)
ll3 = partial(log, 3)
# print (l3(3), l3(9))
print (ll3(3), ll3(9))

值得一提的是,log的说明 (function) log: (x: float, base: float = e) 似乎在提示其第二个也是最后一个参数名叫base。

但是被注释掉的这行,运行时报错:

TypeError: log() takes no keyword arguments

而下面那一行,不好意思,是固定了真数为3的“对数”,代入的实参是底数。

半解决。只能不去碰矢山,哪怕原地tp:

def mylog(x, base): return log(x, base)
l3 = partial(mylog, base=3)
print (l3(3), l3(9))

icm162

#3 Created at ... [Delete] [Delete and Lock User]

log的这个base不是一个kw参数 故在partial里面不能用 base=3 指定它

而且log的base在第二个参数位置 你直接去掉 base= 会导致每次调用 ll3 都是求以给出参数为底的 3 的对数

因为 3 是从 *args 左边加进去的 也就是说 3 占据了参数 x 的位置

以上我的表达有点抽象 我认为应该这样写:

def wp(base:float, x:float):
    return log(x, base)
log3 = partial(wp, 3)
print(f"{log3(9)}  {log3(27)}")

Tiko_T

#4 Created at ... [Delete] [Delete and Lock User]

问题确实存在,icm162所说的并不是原因,位置关键字也可以通过命名方式传入的。这里不能肯定有其他原因:

def f(a, b, *, c, d):
    print(f"{a}, {b}, {c}, {d}")
f2 = partial(f, b = 20)
f2(10, c = 30, d = 40)


  • 1

Reply