Python에서 변수 유형 주석을 사용하는 방법
一、概述
1、描述
变量类型注解是用来对变量和函数的参数返回值类型做注解,让调用方减少类型方面的错误,也可以提高代码的可读性和易用性。
但是,变量类型注解语法传入的类型表述能力有限,不能说明复杂的类型组成情况,因此引用了typing模块,来实现复杂的类型表达。
2、常用的数据类型
Type | Description |
---|---|
int | 整型 integer |
float | 浮点数字 |
bool | 布尔(int 的子类) |
str | 字符 (unicode) |
bytes | 8 位字符 |
object | 任意对象(公共基类) |
List[str] | 字符组成的列表 |
Tuple[int, int] | 两个int对象的元组 |
Tuple[int, ...] | 任意数量的 int 对象的元组 |
Dict[str, int] | 键是 str 值是 int 的字典 |
Iterable[int] | 包含 int 的可迭代对象 |
Sequence[bool] | 布尔值序列(只读) |
Mapping[str, int] | 从 str 键到 int 值的映射(只读) |
Any | 具有任意类型的动态类型值 |
Union | 联合类型 |
Optional | 参数可以为空或已经声明的类型 |
Mapping | 映射,是 collections.abc.Mapping 的泛型 |
MutableMapping | Mapping 对象的子类,可变 |
Generator | 生成器类型, Generator[YieldType、SendType、ReturnType] |
NoReturn | 函数没有返回结果 |
Set | 集合 set 的泛型, 推荐用于注解返回类型 |
AbstractSet | collections.abc.Set 的泛型,推荐用于注解参数 |
Sequence | collections.abc.Sequence 的泛型,list、tuple 等的泛化类型 |
TypeVar | 自定义兼容特定类型的变量 |
Generic | 自定义泛型类型 |
NewType | 声明一些具有特殊含义的类型 |
Callable | 可调用类型, Callable[[参数类型], 返回类型] |
NoReturn | 没法返回值 |
3、mypy模块
mypy是Python的可选静态类型检查器
安装mypy模块 pip3 install mypy
使用mypy进行静态类型检查 mypy 执行 python 文件
二、使用
1、基本使用
from typing import List, Set, Dict, Tuple #对于简单的 Python 内置类型,只需使用类型的名称 x1: int = 1 x2: float = 1.0 x3: bool = True x4: str = "test" x5: bytes = b"test" # 对于 collections ,类型名称用大写字母表示,并且 # collections 内类型的名称在方括号中 x6: List[int] = [1] x7: Set[int] = {6, 7} #对于映射,需要键和值的类型 x8: Dict[str, float] = {'field': 2.0} #对于固定大小的元祖,指定所有元素的类型 x9: Tuple[int, str, float] = (3, "yes", 7.5) #对于可变大小的元祖,使用一种类型和省略号 x10: Tuple[int, ...] = (1, 2, 3) '''在终端执行检查 (venv) D:\python>mypy .\01.py Success: no issues found in 1 source file '''
2、函数参数返回值添加类型标注
1. 指定多个参数的方式
''' 定义一个函数 参数 num int类型 返回值 字符串类型 使用mypy检测 ''' def num_fun(num: int) -> str: return str(num) num_fun(100) print(num_fun(100)) # 指定多个参数的方式 def plus(num1: int, num2: int) -> int: return num1 + num2 # 在类型注释后为参数添加默认值,默认值需要添加在末尾 ''' 声明函数参数时,所有带有默认值的参数必须放在非默认参数的后面。 这是因为 Python 解释器需要确定参数传递的顺序, 如果默认参数放在非默认参数前面,解释器就无法确定哪个参数是哪个 ''' def func1(num1: int, my_float: float = 3.5)-> float: return num1 + my_float print(func1(10,20)) f = func1 print(f(10))
2. Callable
Callable 是一个抽象类,用于描述可调用对象的基本行为,例如函数、方法和类。当你声明一个函数变量并将其分配给一个变量时,这个变量只是一个普通的 Python 对象,并不是一个可调用对象,因此它没有默认值
带有默认值的参数可以放在任何位置,但是在声明函数参数时,所有带有默认值的参数必须放在非默认参数的后面。这是因为 Python 解释器需要确定参数传递的顺序,如果默认参数放在非默认参数前面,解释器就无法确定哪个参数是哪个。
from typing import Callable #定义变量 指向一个函数 def func2(num1:int, my_float=3.5) -> str: return f'返回结果{num1 + my_float}' print(func2(10)) #Callable指向可调用(函数)值的方式 x: Callable[[int, float], str] = func2 print(x(10, 3.5)) ''' 执行结果 返回结果13.5 返回结果13.5 '''
3. Iterator
#定义函数,产生整数的生成器,每次返回一个 from typing import Iterator # 产生整数的生成器函数安全地返回只是一个 整数迭代器的函数 #,因此这就是我们对其进行注释的方式 def g(n: int) -> Iterator[int]: i = 0 while i < n: yield i #下次迭代时,代码从 yield 的下一条语句(不是下一行)开始执行 i += 1 print(g(10)) for i in g(10): print(i) '''执行结果 <generator object g at 0x00000000014E88E0> 0 1 2 3 4 5 6 7 8 9 '''
3、混合类型检查改进
1.联合运算符
联合运算符使用 " | " 线来替代了旧版本中Union[] 方法,使得程序更简洁
#新版本 def get_name(user: str | dict) -> str: if isinstance(user, str): return user elif isinstance(user, dict): return user.get('name', '') print(get_name({'name':'Bob'})) print(get_name("Alice"))
在这个例子中,函数get_name接受一个参数user,它可以是一个字符串或一个字典。如果user是一个字符串,函数会直接返回这个字符串;如果user是一个字典,函数会尝试从字典中获取name字段的值,并返回它。
在这个例子中,我们使用联合运算符将str和dict类型组合起来,表示user可以是这两种类型之一。
#旧版本,Union方法来实现相同的功能 from typing import Union def get_name2(user: Union[str, dict]) -> str: if isinstance(user, str): return user elif isinstance(user, dict): return user.get('name', '') print(get_name2({'name':'Bob'})) print(get_name2("Alice")) '''执行结果 Bob Alice '''
4、类型别名更改
#旧版本 oldname = str def oldFunc(param:oldname) -> oldname: return param + param oldFunc('oldFunc:花非人陌') #新版本,从3.10后开始支持 from typing import TypeAlias newstr :TypeAlias = str #定义类型别名 newint :TypeAlias = int def func_test(num:newint, msg:newstr)->newstr: return str(num) + msg print(func_test(100,"类型名称更改"))
위 내용은 Python에서 변수 유형 주석을 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제









C 언어에는 내장 합계 기능이 없으므로 직접 작성해야합니다. 합계는 배열 및 축적 요소를 가로 질러 달성 할 수 있습니다. 루프 버전 : 루프 및 배열 길이를 사용하여 계산됩니다. 포인터 버전 : 포인터를 사용하여 배열 요소를 가리키며 효율적인 합계는 자체 증가 포인터를 통해 달성됩니다. 동적으로 배열 버전을 할당 : 배열을 동적으로 할당하고 메모리를 직접 관리하여 메모리 누출을 방지하기 위해 할당 된 메모리가 해제되도록합니다.

구별되고 구별되는 것은 구별과 관련이 있지만, 다르게 사용됩니다. 뚜렷한 (형용사)는 사물 자체의 독창성을 묘사하고 사물 사이의 차이를 강조하는 데 사용됩니다. 뚜렷한 (동사)는 구별 행동이나 능력을 나타내며 차별 과정을 설명하는 데 사용됩니다. 프로그래밍에서 구별은 종종 중복 제거 작업과 같은 컬렉션에서 요소의 독창성을 나타내는 데 사용됩니다. 홀수 및 짝수 숫자를 구별하는 것과 같은 알고리즘이나 함수의 설계에 별개가 반영됩니다. 최적화 할 때 별도의 작업은 적절한 알고리즘 및 데이터 구조를 선택해야하며, 고유 한 작업은 논리 효율성의 구별을 최적화하고 명확하고 읽을 수있는 코드 작성에주의를 기울여야합니다.

기술 및 산업 요구에 따라 Python 및 JavaScript 개발자에 대한 절대 급여는 없습니다. 1. 파이썬은 데이터 과학 및 기계 학습에서 더 많은 비용을 지불 할 수 있습니다. 2. JavaScript는 프론트 엔드 및 풀 스택 개발에 큰 수요가 있으며 급여도 상당합니다. 3. 영향 요인에는 경험, 지리적 위치, 회사 규모 및 특정 기술이 포함됩니다.

! x 이해! x는 C 언어로 된 논리적 비 운영자입니다. 그것은 x의 값, 즉 실제 변경, 거짓, 잘못된 변경 사항을 부수합니다. 그러나 C의 진실과 거짓은 부울 유형보다는 숫자 값으로 표시되며, 0이 아닌 것은 참으로 간주되며 0만이 거짓으로 간주됩니다. 따라서! x는 음수를 양수와 동일하게 처리하며 사실로 간주됩니다.

합에 대한 C에는 내장 합계 기능이 없지만 다음과 같이 구현할 수 있습니다. 루프를 사용하여 요소를 하나씩 축적합니다. 포인터를 사용하여 요소를 하나씩 액세스하고 축적합니다. 큰 데이터 볼륨의 경우 병렬 계산을 고려하십시오.

코드 취약점, 브라우저 호환성, 성능 최적화, 보안 업데이트 및 사용자 경험 개선과 같은 요소로 인해 H5 페이지를 지속적으로 유지해야합니다. 효과적인 유지 관리 방법에는 완전한 테스트 시스템 설정, 버전 제어 도구 사용, 페이지 성능을 정기적으로 모니터링하고 사용자 피드백 수집 및 유지 관리 계획을 수립하는 것이 포함됩니다.

코드 복사 및 붙여 넣기는 불가능하지는 않지만주의해서 처리해야합니다. 코드의 환경, 라이브러리, 버전 등과 같은 종속성은 현재 프로젝트와 일치하지 않으므로 오류 또는 예측할 수없는 결과를 초래할 수 있습니다. 파일 경로, 종속 라이브러리 및 Python 버전을 포함하여 컨텍스트가 일관되게 유지하십시오. 또한 특정 라이브러리의 코드를 복사 및 붙여 넣을 때 라이브러리 및 해당 종속성을 설치해야 할 수도 있습니다. 일반적인 오류에는 경로 오류, 버전 충돌 및 일관되지 않은 코드 스타일이 포함됩니다. 성능 최적화는 코드의 원래 목적 및 제약에 따라 재 설계 또는 리팩토링되어야합니다. 복사 코드를 이해하고 디버그하고 맹목적으로 복사하여 붙여 넣지 않는 것이 중요합니다.

크롤링하는 동안 58.com 작업 페이지의 동적 데이터를 얻는 방법은 무엇입니까? Crawler 도구를 사용하여 58.com의 작업 페이지를 크롤링 할 때는이 문제가 발생할 수 있습니다.
