Python 带有元组和 N pd 数据帧的函数注释?
Python function annotation with tuple and N pd DataFrames?
我有一个函数 returns N=4
pandas DataFrames。我可以像这样清楚地指定函数的所有类型:
import pandas as pd
from typing import Tuple
def preprocess(df: pd.DataFrame) -> Tuple[pd.DataFrame, pd.DataFrame, pd.DataFrame, pd.DataFrame]:
pass
但它有点冗长,我更喜欢更多 pythonic 注释,以防我必须 return 一个通常包含 N
元素的元组。由于 return 类型被指定为元组,并且对于元组初始化,有一个方便的 Python 功能可以通过简单地编写 (1,)*6
来替换像 (1,1,1,1,1,1)
这样的长初始化,我想了一个类似的方法也可能在这里起作用:
import pandas as pd
from typing import Tuple
N = 4
def preprocess(df: pd.DataFrame) -> Tuple[pd.DataFrame] * N:
pass
但这会引发错误:
unsupported operand type(s) for *: '_GenericAlias' and 'int'
如何相应地注释我的函数?
编辑: 我的目标不是动态设置注释。我只是好奇是否存在一种 pythonic 方式将任意长度的元组声明为 return 值,而不必编写像 Tuple[pd.DataFrame, pd.DataFrame, pd.DataFrame, pd.DataFrame]
这样的长注释。想象一下,例如,如果一个函数是 return N=20
个元组中的对象。
我不确定 tuple
是否可行,但您可以 return list[pd.DataFrame]
。在某些情况下,它甚至可能比通用大小的元组更有意义。
你的问题肯定很有趣,如果没有类似的,也许它应该是一个 PEP!
如果注释的长度是可变的,您可以使用内置的省略号 ...
来表示附加项。
def preprocess(df: pd.DataFrame) -> Tuple[pd.DataFrame, ...]:
pass
如果你想动态设置你的注解,你可以用长度为 1 的注解定义你的函数,然后修改它(函数注解的 return 部分)以获得所需的参数数量。
import pandas as pd
from typing import Tuple
N = 4
def preprocess(df: pd.DataFrame) -> Tuple[pd.DataFrame]:
pass
preprocess.__annotations__['return'] *= N
help(preprocess)
# prints:
Help on function preprocess in module __main__:
preprocess(df: pandas.core.frame.DataFrame) -> Tuple[pandas.core.frame.DataFrame,
pandas.core.frame.DataFrame,
pandas.core.frame.DataFrame,
pandas.core.frame.DataFrame]
我有一个函数 returns N=4
pandas DataFrames。我可以像这样清楚地指定函数的所有类型:
import pandas as pd
from typing import Tuple
def preprocess(df: pd.DataFrame) -> Tuple[pd.DataFrame, pd.DataFrame, pd.DataFrame, pd.DataFrame]:
pass
但它有点冗长,我更喜欢更多 pythonic 注释,以防我必须 return 一个通常包含 N
元素的元组。由于 return 类型被指定为元组,并且对于元组初始化,有一个方便的 Python 功能可以通过简单地编写 (1,)*6
来替换像 (1,1,1,1,1,1)
这样的长初始化,我想了一个类似的方法也可能在这里起作用:
import pandas as pd
from typing import Tuple
N = 4
def preprocess(df: pd.DataFrame) -> Tuple[pd.DataFrame] * N:
pass
但这会引发错误:
unsupported operand type(s) for *: '_GenericAlias' and 'int'
如何相应地注释我的函数?
编辑: 我的目标不是动态设置注释。我只是好奇是否存在一种 pythonic 方式将任意长度的元组声明为 return 值,而不必编写像 Tuple[pd.DataFrame, pd.DataFrame, pd.DataFrame, pd.DataFrame]
这样的长注释。想象一下,例如,如果一个函数是 return N=20
个元组中的对象。
我不确定 tuple
是否可行,但您可以 return list[pd.DataFrame]
。在某些情况下,它甚至可能比通用大小的元组更有意义。
你的问题肯定很有趣,如果没有类似的,也许它应该是一个 PEP!
如果注释的长度是可变的,您可以使用内置的省略号 ...
来表示附加项。
def preprocess(df: pd.DataFrame) -> Tuple[pd.DataFrame, ...]:
pass
如果你想动态设置你的注解,你可以用长度为 1 的注解定义你的函数,然后修改它(函数注解的 return 部分)以获得所需的参数数量。
import pandas as pd
from typing import Tuple
N = 4
def preprocess(df: pd.DataFrame) -> Tuple[pd.DataFrame]:
pass
preprocess.__annotations__['return'] *= N
help(preprocess)
# prints:
Help on function preprocess in module __main__:
preprocess(df: pandas.core.frame.DataFrame) -> Tuple[pandas.core.frame.DataFrame,
pandas.core.frame.DataFrame,
pandas.core.frame.DataFrame,
pandas.core.frame.DataFrame]