我想编写一个装饰器,该装饰器根据传入的数据类型运行一些代码。问题是,我正在为库编写此装饰器,我不想仅将Pandas添加到依赖项中对于这一件事。
def my_function(fn):
@wraps(fn)
def wrapped(*args, **kwargs):
if isinstance(my_input, pd.DataFrame):
# ...CODE TO RUN
return wrapped
我考虑过的一件事是,将带有库的DataFrame的腌制版本打包在一起。这似乎可行:
>>> import pandas as pd
>>> pd.to_pickle(pd.DataFrame, "df_type.pickle")
>>> DataFrame = pd.read_pickle("df_type.pickle")
>>> isinstance(pd.DataFrame(), DataFrame)
True
是否有更好的方法来实现这一目标?
答案 0 :(得分:2)
如果未在用户环境中安装熊猫,则不会获得熊猫数据框作为输入,因此您不必担心它。因此,您可以仅测试是否已安装panda,并仅在必要时添加此代码路径:
try:
from panda import DataFrame
has_panda = True
except ImportError:
DataFrame = None
has_panda = False
def my_function(fn):
@wraps(fn)
def wrapped(*args, **kwargs):
if has_panda and isinstance(my_input, DataFrame):
# ...CODE TO RUN
return wrapped