Как создать функции в Python 3, определенные на закрытом домене? - PullRequest
0 голосов
/ 27 октября 2018

Как я могу убедиться, что следующая функция не определена за пределами закрытой области [0, L], используя функцию 'else'?Я определяю конечные точки и интервал (0, L), используя операторы if.Мой код ниже:

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

1 Ответ

0 голосов
/ 27 октября 2018

Поднимите ValueError с помощью полезного сообщения в блоке else,

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

например. Вы также можете создать пользовательское DomainError наследование от ValueError

class DomainError(ValueError):
    pass

и поднять это.

В других частях вашего кода вы просто вызываете u и ловите потенциальные исключения, следуя принципу EAFP .

редактировать :

Если вам нужна проверка домена для ряда математических функций, вы также можете написать простую фабрику декораторов. Вот пример, в зависимости от ваших вариантов использования вам может потребоваться выполнить некоторые незначительные изменения.

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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...