python - 返回一个只允许命名参数的函数

标签 python python-3.x scipy

我使用 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/

相关文章:

python - Django session 过期?

python - 如何在Python内部修剪wav文件

python - numpy svd : is there a way to find only the first singular vectors instead of doing full svd?

Python 64位SciPy安装错误

python - 如何在方法签名中注释指向C字符数组的指针?

python - 如何在txt文件中插入随机空格?

python 的 asyncio 在 2 个协程之间交换数据 - 其中一个执行同步和 CPU 密集型代码

python - FLask-admin ,可生成字段

python - 添加到 pandas python df 中的列

python - 我如何从字典中进行 AND 搜索,发送值列表?