How to create functions in Python 3 defined on a closed domain?

时间:2018-10-27 13:37:54

标签: python function if-statement

How can I ensure the following function is undefined outside of the closed domain [0,L] using the 'else' function? I define the endpoints and the interval (0,L) using if-statements. My code is below:

def u(x):
    if x=0:
        return A
    elif x=L:
        return B
    elif 0<x<L:
        return 0*x+10
    else:

1 个答案:

答案 0 :(得分:1)

ValueError块中用有用的信息举起else

raise ValueError('x must be in [0, {}]'.format(L))

例如。您还可以创建继承自DomainError

的自定义ValueError
class DomainError(ValueError):
    pass

然后提出来。

在代码的其他部分,您只需遵循EAFP原则,调用u并捕获潜在的异常。

修改

如果需要对许多类似于数学的函数进行域检查,则还可以为自己编写一个简单的装饰器工厂。这是一个示例,根据您的用例,您可能需要执行一些小的修改。

def domain(lower, upper):
    def wrap(f):
        def f_new(x):
            if not lower <= x <= upper:
               raise ValueError('x must be in [{}, {}]'.format(lower, upper))
            return f(x)
        return f_new
    return wrap

演示:

>>> @domain(0, 10)
...:def f(x):
...:    return x + 1
...:
...:
>>> f(2)
>>> 3
>>> f(-1)
[...]
ValueError: x must be in [0, 10]
>>> f(10.1)
[...]
ValueError: x must be in [0, 10]