Python3函数声明报错NameError: name ‘List‘ is not defined

文章目录

    • 问题描述
    • 解决方案
    • typing模块
      • 作用
      • 使用说明
      • 常用类型
    • 其他说明

问题描述

环境:python3
将leetcode上的代码复制到本地,运行报错:NameError: name 'List' is not defined

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        pass

解决方案

在头部导typing模块。

from typing import List

typing模块

python是一门弱类型的语言,使用过程不用过多关注变量的类型,但是同时也带来了可读性问题,有时候自己都不知道传入的是什么参数。因此在python3.5之后,引入了typing模块。

函数接受并返回一个字符串,使用示例:

import typing 
def greeting(name: str) -> str:
    return 'Hello ' + name

在函数 greeting 中,参数 name 预期是 str 类型,并且返回 str 类型。子类型允许作为参数。

作用

  • 类型检查,提示运行时出现参数和返回值类型不对的情况;
  • 作为开发文档附加说明,方便使用函数时传入和返回正确的参数,利于开发效率;
  • 该模块 不会影响程序的运行,不会报错,但是会有提示。
    • PyCharm 支持提示,Sublime Text 无任何提示。

使用说明

  • 在传入参数时通过“参数名:类型”的形式声明参数的类型;
  • 返回结果通过"-> 结果类型"的形式声明结果的类型;
  • 在调用的时候如果参数的类型不正确pycharm会有提醒,但不会影响程序的运行;
  • 对于如list列表等,还可以规定如:“-> List[str]” 列表元素是字符串;
  • 由于python天生支持多态,迭代器中的元素可能多种,如下:
from typing import List
def func(num:int, string:str) -> List[int or str]:

常用类型

/1. import typing后直接可用的:

  • int,long,float: 整型,长整形,浮点型;
  • bool,str: 布尔型,字符串类型;

/2. 需要from typing import ...的:

  • List, Tuple, Dict, Set:列表,元组,字典, 集合;
  • Iterable,Iterator:可迭代类型,迭代器类型;
  • Generator:生成器类型;
  • Optional:可选类型
    • Optional[int] 等价于 Union[int, None],意味着:既可以传指定的类型 int,也可以传 None。例子:def foo_func(arg: Optional[int]):

注意:迭代器中的元素可能是多种类型,使用or或union操作符

其他说明

本文系转 NameError: name ‘List’ is not defined ,并根据笔者实测做了一些更正。
其他参考:https://www.cnblogs.com/poloyy/p/15170297.html

⬇️ 下面是个csdn牛皮癣广告。有人知道怎么去掉它吗?

你可能感兴趣的:(Python,python,leetcode)