我使用 python3 脚本来插入一些测量数据。为此,我想编写一个函数,它返回插值函数。这个插值函数应该只接受某个命名参数。这是我迄今为止所想出的简化版本:
from scipy.interpolate import interp1d
x = [1, 2]
y = [1, 3]
def linear_interp(x, y):
# Interpolate the data
y_interp = interp1d(x, y)
# Create a function taking only a named argument x
def y_interp_named(*, x):
return y_interp(x)
return y_interp_named
y_linear_interp = linear_interp(x, y)
print(y_linear_interp(x = 1.5)) # This should work
print(y_linear_interp(1.5)) # This should throw an error
虽然这按预期工作,但我想知道是否可以在不使用函数y_interp_named
的情况下以更优雅/紧凑的方式实现它。
一般来说:对于返回另一个函数的函数,有没有办法指定返回的函数应该只采用返回函数定义之外的某些命名参数?
最佳答案
你可以使用python的decorators做这样的事情。
def named_decorater(func):
def func_named(*, x):
return func(x)
return func_named
@named_decorater
def foo(x):
print(x)
foo(2) #error
foo(x=2) #works
编辑:您还可以像这样使用装饰器:
named_foo = named_decorator(foo)
named_foo(2) #error
named_foo(x=2) #works
关于python - 返回一个只允许命名参数的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46309910/