Использование монады для подсчета циклов в питоне - PullRequest
0 голосов
/ 14 октября 2019

В настоящее время я изучаю функциональное программирование, и, конечно же, я хочу реализовать то, чему научился, когда смогу.

Я нахожусь в центре проекта, где мне нужно отправить некоторые http-запросы на сервер, и я хочу подсчитать, сколько из этих запросов вернуло код_состояния 200.

Сейчас янастройте некоторый глупый код следующим образом:

global counter
while True:
    now_url = 127.0.0.1
    status, value = getStatus(now_url)
    counter += c

Где счетчик - глобальный счетчик, и если getStatus получает код состояния 200, значение будет равно 1, в противном случае оно будет равно 0.

Поэтому я подумал, что, возможно, вместо использования глобального счетчика, я мог бы просто обойти состояние предыдущего цикла и избавиться от глупого значения глобального счетчика.

Таким образом, я попытался реализовать getStatus монадическим способом с помощью bind и return как такового

def bind(f, arg):
    res = f(arg[0])
    return res[0], arg[1] + res[1]

def ret(f):
    return (f, 0)

Но это не тривиально, так как я не использую композицию функций в функции getStatus, котораяопределяется как таковое

def getStatus(now_url):
    try:
        respones = requests.get(now_url)
        if respones.status_code == 200:
            return respones.status_code, 1
        else:
            return respones.status_code, 0

    except Exception as e:
        return e, 0

Таким образом, вопрос заключается в том, как реструктурировать мой код таким образом, чтобы я мог использовать силу монад для подсчета числа status_code == 200.

Надеюсь, вы можете помочь :)

...