Определите, является ли x положительным как для числа с плавающей точкой, так и для времени - PullRequest
0 голосов
/ 26 ноября 2018

Я ищу простой и удобный способ проверить, является ли переменная положительной, где это может быть либо значение с плавающей точкой, либо numpy.timedelta64 или datetime.timedelta.

Я, очевидно, пытался x>0,но это не работает для timedelta с (ни numpy, ни datetime)

Единственное решение, которое я нашел, это x/abs(x) > 0, который я считаю несколько громоздким.Даже np.sign не возвращает ответ.

Есть ли лучший способ проверить это?

РЕДАКТИРОВАТЬ: Использование x.total_seconds() возвращает ошибку всякий раз, когда x является плавающей точкой.Использование x > np.timedelta(0) не работает в течение datetime.timedelta с.

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018

Как заметил @NickChapman, использовать isinstance, вероятно, проще (читать).Не забывайте, что вы можете проверить тип данных сразу для нескольких классов:

def check_positive(x):
    if isinstance(x, (datetime.timedelta, np.timedelta64)):
        return x.total_seconds() > 0
    else:
        return x > 0
0 голосов
/ 26 ноября 2018

Вы можете сравнить объект с нулевой разницей во времени, а затем использовать try / except для охвата числовых входов:

import numpy as np
from datetime import timedelta

def pos_check(x, zero_value=timedelta()):
    try:
        return x > zero_value
    except TypeError:
        return x > 0

py_td = timedelta(days=1)      # 1-day, regular Python
np_td = np.timedelta64(py_td)  # 1-day, NumPy

assert pos_check(1.5)
assert pos_check(py_td)
assert pos_check(np_td)
...