075 typing模块

typing模块

  • 咱们定义一个有参的函数,可是咱们会在后面调用他的时候,本身会忘了须要传什么类型的参数,若是返回的是算数运算的结果的话,程序就会报错。
def func(a,b):
    return a+b
res = fun('10',20)
print(res)

must be str, not int(程序会进行报错,咱们传的参数应该时数值型,才能够进行数值算数运算)python

1.使用typing模块

  • typing模块就能够帮咱们解决这种问题,它能够再咱们定义参数每个位置形参的后面:+接收值的类型,来对咱们进行一个提示,再pycharm里,若是咱们传的参数不是typin给规定的类型的话,接收值会给咱们进行划线提示。app

    from typing import List,Dict,Tuple
    
    def func(a:str,b:bool,c:int,lt:list,dct:dict,tp:tuple):
        lis = [a,b,c,lt,dct,tp]
        return lis
    
    res = func('a',True,25,[1,2,3,4],{'b':20},(7,8))
    print(res)

    ['a', True, 25, [1, 2, 3, 4], {'b': 20}, (7, 8)]函数

  • 可是若是咱们传的参数是利用typing规定的类型时,咱们使用列表来接收参数的时候,无论咱们是否按照typing规定的类型来传值,咱们最后返回列表的时候,程序再当前函数返回结果的时候时不会报错的code

    from typing import List,Dict,Tuple
    
    def func(a:str,b:bool,c:int,lt:list,dct:dict,tp:tuple):
        lis = [a,b,c,lt,dct,tp]
        return lis
    
    # lt = 1
    res = func('a',True,25,1,{'b':20},(7,8))
    print(res)
    # ('a', True, 25, 1, {'b': 20}, (7, 8))程序再当前函数返回结果的时候时不会报错的,只是咱们传的参数不规范

    ('a', True, 25, 1, {'b': 20}, (7, 8))ip

  • 再下一次函数调用当前函数返回值的时候,就会产生错误。字符串

    from typing import Generator,Iterable,Iterator
    
    def func(i: int, f: float, b: bool, lt: list, tup: tuple, dic: dict):
        lis = [a,b,c,lt,dct,tp]
        return lis
    a,b,c,lt,dct,tp = func(1,2,3,4,5,6) # 不错误,只是不规范
    
    def func1(lt):
        print(lt[4])# 这个时候程序会报错
    func1(lt)

    'int' object is not subscriptablepycharm

2.typing的使用

  1. typing能够对函数参数类型进行限制
from typing import List,Dict,Tuple

def func(a:str,b:bool,c:int,lt:list,dct:dict,tp:tuple):
    lis = [a,b,c,lt,dct,tp]
    return lis

res = func('a',True,25,[1,2,3,4],{'b':20},(7,8))
print(res)

['a', True, 25, [1, 2, 3, 4], {'b': 20}, (7, 8)]string

  1. typing能够对函数的返回值进行限制
from typing import List,Dict,Tuple

def func(a:str,b:bool,c:int,lt:list,dct:dict,tp:tuple)-> tuple:
    lis = [a,b,c,lt,dct,tp]
    return tuple(lis)

res = func('a',True,25,[1,2,3,4],{'b':20},(7,8))
print(res)

('a', True, 25, [1, 2, 3, 4], {'b': 20}, (7, 8))table

3.能够对返回值里具体的值进行类型限制class

from typing import List, Tuple, Dict


def add(a: int, string: str, f: float,
        b: bool) -> Tuple[List, Tuple, Dict, bool]:
    list1 = list(range(a))
    tup = (string, string, string)
    d = {"a": f}
    bl = b
    return list1, tup, d, bl


print(add(5, "hhhh", 2.3, False))

([0, 1, 2, 3, 4], ('hhhh', 'hhhh', 'hhhh'), {'a': 2.3}, False)

  • 在传入参数时经过"参数名:类型"的形式声明参数的类型;
  • 返回结果经过"-> 结果类型"的形式声明结果的类型。
  • 在调用的时候若是参数的类型不正确pycharm会有提醒,但不会影响程序的运行。
  • 对于如list列表等,还能够规定得更加具体一些,如:"-> List[str]”,规定返回的是列表,而且元素是字符串。
from typing import List

def func(a: int, string: str) -> List[int or str]:  # 使用or关键字表示多种类型
    list1 = []
    list1.append(a)
    list1.append(string)
    return list1

3.typing主要提供数据类型

  1. int、long、float: 整型、长整形、浮点型
  2. bool、str: 布尔型、字符串类型
  3. List、 Tuple、 Dict、 Set:列表、元组、字典、集合
  4. Generator:生成器类型
  5. Iterable:可迭代类型
  6. Iterator:迭代器类型
from typing import Generator,Iterable,Iterator

def func(i: int, f: float, b: bool, lt: list, tup: tuple, dic: dict,g:Generator) -> tuple:
    lis = [i, f, b, lt, tup, dic]
    return tuple(lis)

def ger():# 生成器
    yield

res = func(1, 2, True, [1, 2], (1, 2), {'a': 1},ger())
print(res)
# (1, 2, True, [1, 2], (1, 2), {'a': 1})

def func1(lt):
    print(lt)
    print(lt[0])
func1(res)

[1,2]

1

相关文章
相关标签/搜索