如何类型提示函数的非基本参数?

How to type-hint non-basic parameters of a function?

在python3.6

假设你有一个有 5 个参数的函数。一个字符串对象、一个字符串对象列表、argparse.Namespace 对象、一个 pandas 数据框和一个 logging.Logger 对象。

比如

def main(a_string, a_list, args, df, logger):

前两个很简单,但最后两个如何施放?

def main(a_string: str, a_list: List[str], args: ???, df: ???, logger: ???) -> str:

提前致谢!

for reference: 
type(args) -> argparse.Namespace 
type(logger) -> logging.Logger

如果我没看错你的问题,它和str(一种类型)是一样的,即输入类型:

def main(a_string: str, a_list: List[str], args: argparse.Namespace df: pandas.DataFrame, logger: logging.Logger) -> str:

虽然我通常会重构以避免长 arg 列表。我不喜欢在函数签名中使用换行符。

如果您需要查找对象的类型:

>>> type(logging.root)
logging.RootLogger
>>> type(logging.root).__bases__
(logging.Logger,)

正如 Kache 之前输入的那样,这应该是正确的答案,但是在做这些事情时你必须关注两件事:

  1. 首先,Python是类型提示(如果您想阅读更多内容,请前往here)。
  2. 如果方法的参数之一不满足该变量的类型,则此类型提示不会直接引发任何异常。只有当您尝试使用该假定类型的方法时,它才会引发异常。例如,假设您的 a_string 并不是真正的 str,并且在您的函数中调用了一个简单的 a_string.strip()。这将引发异常。