python检查函数和变量类型

Python 是一门流行的编程语言。它由 Guido van Rossum 创建,于 1991 年发布。

1. Python 语法与其他编程语言比较

  • Python 是为可读性设计的,与英语有一些相似之处,并受到数学的影响。
  • Python 使用新行来完成命令,而不像通常使用分号或括号的其他编程语言。
  • Python 依赖缩进,使用空格来定义范围;例如循环、函数和类的范围。其他编程语言通常使用花括号来实现此目的。

2. 数据类型检查

2.1 基本类型指定

例如:

def test(a: int, b: str) -> str:
	print(a, b)
	return 12345	# 返回值类型错误,pycharm解释器会警告

if __name__ == '__main__':
	test(12, "wer")
	test('test', "aaa")	# 错误示例,一般pycharm解释器会警告

上面这个函数test,指定了输入参数a为int类型,而b为str类型,并且返回值为srt类型。可以看到,在方法中,我们最终返回了一个int,此时pycharm就会有警告;当我们在调用这个方法时,参数a我们输入的是字符串,此时也会有警告;但非常重要的一点是,pycharm只是提出了警告,但实际上运行是不会报错,毕竟python的本质还是动态语言。

2.2 复杂类型指定

from typing import List
Vector = List[float]

def scale(scalar: float, vector: Vector) -> Vector:
    return [scalar * num for num in vector]
    
# 类型检查,将float类型的集合赋值给vector集合
new_vector = scale(2.0, [1.0, -4.2, 5.4])
from typing import Dict, Tuple, Sequence

ConnectionOptions = Dict[str, str]
Address = Tuple[str, int]
Server = Tuple[Address, ConnectionOptions]

def broadcast_message(message: str, servers: Sequence[Server]) -> None:
    pass

# 静态类型检查器将把之前的类型签名视为与这个签名完全等同
def broadcast_message(
        message: str,
        servers: Sequence[Tuple[Tuple[str, int], Dict[str, str]]]) -> None:
    pass

2.3 泛型指定

from typing import Sequence, TypeVar, Union

T = TypeVar('T')

def first(l: Sequence[T]) -> T:
    return l[0]

T = TypeVar('T')  # 可以是任意类型
A = TypeVar('A', str, bytes)  # 必须是str或bytes类型
A = Union[str, None] # 必须是str或None类型

2.4 创建变量时的类型指定

from typing import NamedTuple

class Employee(NamedTuple):
    name: str
    id: int = 3

employee = Employee('Guido')
assert employee.id == 3

3. Python 数据类型

3.1 内置数据类型

类型 关键字
文本类型: str
数值类型: int, float, complex
序列类型: list, tuple, range
映射类型: dict
集合类型: set, frozenset
布尔类型: bool
二进制类型: bytes, bytearray, memoryview

3.2 设置数据类型

示例 数据类型
x = “Hello World” str
x = 29 int
x = 29.5 float
x = 1j complex
x = [“apple”, “banana”, “cherry”] list
x = (“apple”, “banana”, “cherry”) tuple
x = range(6) range
x = {“name” : “Bill”, “age” : 63} dict
x = {“apple”, “banana”, “cherry”} set
x = frozenset({“apple”, “banana”, “cherry”}) frozenset
x = True bool
x = b"Hello" bytes
x = bytearray(5) bytearray
x = memoryview(bytes(5)) memoryview

3.3 设定特定的数据类型

示例 数据类型
x = str(“Hello World”) str
x = int(29) int
x = float(29.5) float
x = complex(1j) complex
x = list((“apple”, “banana”, “cherry”)) list
x = tuple((“apple”, “banana”, “cherry”)) tuple
x = range(6) range
x = dict(name=“Bill”, age=36) dict
x = set((“apple”, “banana”, “cherry”)) set
x = frozenset((“apple”, “banana”, “cherry”)) frozenset
x = bool(5) bool
x = bytes(5) bytes
x = bytearray(5) bytearray
x = memoryview(bytes(5)) memoryview

猜你喜欢

转载自blog.csdn.net/qq_43522889/article/details/130346272