Я пытаюсь написать функции Python, которые обеспечивают проверку типов. Я бы попытался сделать это, используя assert
и isinstance()
в первой строке функции следующим образом:
import numpy as np
import pandas as pd
array_like = Union[pd.core.series.Series, np.ndarray]
LOG_TRANSFORM_CONST = 1.01
def log_transform(feature: array_like) -> array_like:
assert isinstance(feature, array_like)
# First remove negative entries
feature[feature < 0.0] = 0.0
# Add a small constant to avoid NANs while applying logs
feature = feature + LOG_TRANSFORM_CONST
return np.log(feature)
Этот код не работает, так как вы не можете использовать Union
вместе с isinstance()
. Тем не менее, следующий фрагмент кода работает:
def log_transform(feature: array_like) -> array_like:
assert type(feature) in [pd.core.series.Series, np.ndarray]
# First remove negative entries
feature[feature < 0.0] = 0.0
# Add a small constant to avoid NANs while applying logs
feature = feature + LOG_TRANSFORM_CONST
return np.log(feature)
if __name__ == '__main__':
df = pd.DataFrame(columns=['A', 'B'])
df['A'] = [1, 2, 3, 4]
df['B'] = [10, 20, 30, 40]
tr_arr = log_transform(df.A)
print(tr_arr)
y = log_transform(np.array([2, 4, 6, 8, 10]))
print(y)
Мой вопрос: целесообразна ли эта практика? Каковы лучшие практики относительно проверки типов в Python? Я знаю, что можно устанавливать сторонние библиотеки специально для проверки типов, но я стараюсь этого избегать.