Python - typing module - common type tips

preface

typing is a module only available in python 3.5

Pre learning

Python type prompt: https://eli-coin.blog.csdn.net/article/details/122301840https://eli-coin.blog.csdn.net/article/details/122301840

Common type tips

  • int,long,float: integer, long integer, float;
  • bool,str: Boolean, string type;
  • List, Tuple, Dict, Set: list, tuple, dictionary, set;
  • Iteratable, iterator: iteratable type, iterator type;
  • Generator: generator type;

The first two lines of lowercase do not need to be imported, and the last three lines need to be imported through the typing module

Common type tips chestnut

Specifies the function parameter type

Single parameter

# The name parameter type is str
def greeting(name: str) :
    return "hello"

  

Multiple parameters

# Multiple parameters with different parameter types
def add(a: int, string: str, f: float, b: bool or str):
    print(a, string, f, b)

bool or str: represents that the parameter b can be Boolean or string

Specifies the type of parameter returned by the function

Simple chestnut

# The return value of the function is specified as a string
def greeting(name: str) -> str:
    return "hello"

  

More complicated chestnuts

from typing import Tuple, List, Dict


# Returns data of Tuple type. The first element is List, the second element is Tuple, the third element is Dict, and the fourth element can be string or Boolean
def add(a: int, string: str, f: float, b: bool or str) -> Tuple[List, Tuple, Dict, str or bool]:
    list1 = list(range(a))
    tup = (string, string, string)
    d = {"a": f}
    bl = b
    return list1, tup, d, bl


# The call writing method of warn is not supported
print(add(1, "2", 123, True))


# Output results
([0], ('2', '2', '2'), {'a': 123}, True)

  

List, Set, Dict source code

As you can probably guess, their bottom layer is related to list, set and dict

Tuple source code

It's different from the other three, but it's also related to tuple

Can I use list, set, dict and tuple when specifying types?

Yes, but the data type of the element cannot be specified

def test(a: list, b: dict, c: set, d: tuple):
    print(a, b, c, d)

List[T] and Set[T] can only pass one type. If you pass more than one type, an error will be reported

a: List[int, str] = [1, "2"]
b: Set[int, str] = {1, 2, 3}

IDE will not report an error, but it will report an error at runtime

Traceback (most recent call last):
  File "/Users/polo/Documents/pylearn/Chapter II: Foundation/13_typing.py", line 36, in <module>
    a: List[int, str] = [1, "2"]
  File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8/typing.py", line 261, in inner
    return func(*args, **kwds)
  File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8/typing.py", line 683, in __getitem__
    _check_generic(self, params)
  File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8/typing.py", line 215, in _check_generic
    raise TypeError(f"Too {'many' if alen > elen else 'few'} parameters for {cls};"
TypeError: Too many parameters for typing.List; actual 2, expected 1

List passed too many parameters, expected 1, actual 2

Will Tuple[T] report an error if it passes more than one?

d: Tuple[int, str] = (1, "2")
print(d)


# Output results
(1, '2')

You can't report an error

Let's look at the various ways Tuple[T] is written

If only one int is written and two int elements are assigned, warning will be reported

What if Tuple[T] specifies the number of types and the number of assigned elements are inconsistent?

d: Tuple[int, str] = (1, "2", "2") 

No error will be reported, but there will also be warning

To sum up the two chestnuts, draw a conclusion

Tuple[T] when specifying a type, it is only for the element type under the same index

If you want to specify a type like List[T], it can be effective for all elements

d: Tuple[int, ...] = (1, 2, 3)
d: Tuple[Dict[str, str], ...] = ({"name": "poloyy"}, {"age": "33"})

Specify a type followed by All right

This article is from:

Python - typing module - common type tips - small pineapple test notes - blog Garden

Type alias

https://www.cnblogs.com/poloyy/p/15153883.html 

NewType

https://www.cnblogs.com/poloyy/p/15153886.html 

Callable

Python - typing module - Callable - little pineapple test notes - blog Garden

TypeVar generics

Python - typing module - TypeVar generics - little pineapple test notes - blog Garden

Any Type

Python - typing module - Any Type - small pineapple test notes - blog Garden

Union

Python - typing module - Union - little pineapple test notes - blog Garden

Optional

Python - typing module - Optional - small pineapple test notes - blog Garden

Keywords: Python

Added by manmanman on Wed, 05 Jan 2022 06:12:50 +0200