LeetCode Python3中List可用于参数的原因及跨环境测试疑问
LeetCode Python3环境中List可用于类型注解的原因
问题背景
在LeetCode的Python3环境中,以下带类型注解的代码可以正常运行:
class Solution: def uniquePathsIII(self, grid: List[List[int]]) -> int: return grid
但在本地或其他标准Python3环境中运行时,会抛出如下错误:
Traceback (most recent call last): File "main.py", line 1, in <module> class Solution: File "main.py", line 2, in Solution def uniquePathsIII(self, grid: List[List[int]]) -> int: NameError: name 'List' is not defined
用户找到了一种替代写法,可在标准环境中运行:
class Solution: def uniquePathsIII(self, grid: [[int]]) -> int: return grid fin = Solution() print(fin.uniquePathsIII([[1,0,0,0],[0,0,0,0],[0,0,2,-1]]))
但仍想明确LeetCode环境中List可直接使用的原因。
原因解析
LeetCode的Python3运行环境提前全局导入了typing模块中的常用类型,其中就包括List。
在标准Python环境中,List并非内置类型,它是typing模块提供的泛型类型注解工具,必须通过from typing import List手动导入后才能使用。而LeetCode为简化刷题流程、减少样板代码,在执行用户提交的代码前,已经自动完成了类似from typing import List, Tuple, Dict, Optional...的导入操作,将这些常用类型放入全局命名空间,因此用户无需手动导入即可直接在类型注解中使用List。
内容的提问来源于stack exchange,提问作者RAKCUS
相关产品推荐
相关产品推荐

