основы Python — аннотации типов List, Dict, Tuple, Any
основы Python — аннотации типов List, Dict, Tuple, Any

Ранее мы изучили основные типы Type Hints, int, str и простые составные типы list, tuple, dict. Далее узнайте о различиях между модулями набора текста List, Dict и Tuple.

Список модулей ввода

В следующих примерах и a, и b объявляют тип списка.

  • член но intтипа
  • Член b но стртип.
Язык кода:javascript
копировать
a: list = [1, 2, 3, 4, 5, 6, 7]  
b: list = ["a", "b", "c", "d", "e", "f", "g"]  

print(a)  
print(b)

Чтобы более точно объявить, что члены списка имеют тип int или str, вам необходимо использовать модуль типизации.

Язык кода:javascript
копировать
from typing import List  

a: List[int] = [1, 2, 3, 4, 5, 6, 7]  
b: List[str] = ["a", "b", "c", "d", "e", "f", "g"]  

print(a)  
print(b)

Разница между списком и списком:

  • список может указывать только тип,Невозможно объявить, какие члены
  • List Вы можете объявить, какие члены

Пример в функции

Язык кода:javascript
копировать
from typing import List  


def demo_list(a: List[str], index: int) -> str:  
    res = a[index]  
    return res  


r = demo_list(['aa', 'bb', 'cc'], 1)  
print(r)

Когда нам нужно получить значение из списка, а затем вызвать соответствующий метод, редактор автоматически распознает метод объекта str.

Например, список чисел или строк можно объявить как:

Язык кода:javascript
копировать
def fun_a(a: List[int or str]) -> List:  
    return a  


r = fun_a(['a', ['aa']])

Вы также можете вкладывать объявления

Язык кода:javascript
копировать
x: List[List[int]]

Последовательность

Итерируемые объекты (Iterable) относятся к объектам, которые можно зациклить с помощью for..in. Как мы обычно знаем: list, str, tuple, dict и т. д. являются итерируемыми объектами. Последовательность — это последовательность, встроенные типы последовательностей: список, строка, кортеж, байты. Обратите внимание, что dict - это не пара ключ-значение, здесь нет значения индекса, вы можете искать только на основе того, что можете. Иногда нас не волнует, является ли переданный объект списком или кортежем, потому что нам может потребоваться просто перебрать объект.

Язык кода:javascript
копировать
from typing import Sequence  


def demo_seq(s: Sequence, by: str) -> str:  
    return by.join(s)  


r1 = demo_seq('hello', '_')  
print(r1)  

r2 = demo_seq(('a', 'b', 'c'), '_')  
print(r2)

Вы также можете указать, что член последовательности должен быть строкой.

Тип слова

dict — это формат пары ключ-значение, и тип dict в нижнем регистре не может точно объявить конкретные типы ключей и значений. Например, я хочу объявить, что ключ — str, а значение — int.

Язык кода:javascript
копировать
from typing import Dict  


def demo_dict(d: Dict[str, int]) -> Dict:  
    d.update({"aa": 22})  
    return d  


r = demo_dict({"x": 1, "y": 2})  
print(r)

Сопоставление и MutableMapping

Dict, словарь, — это общий тип dict, Mapping — это универсальный тип Collections.abc.Mapping. Согласно официальной документации, для аннотирования возвращаемых типов рекомендуется использовать Dict, а для аннотирования параметров — Mapping. Все они используются одинаково, после чего следует квадратная скобка, в которой объявляются имя ключа и тип значения ключа соответственно, например: ``

Язык кода:javascript
копировать
from typing import Mapping, Dict  


def size(rect: Mapping[str, int]) -> Dict[str, int]:  
    return {'width': rect['width'] + 100, 'height': rect['width'] + 100}

Здесь Dict используется в качестве аннотации типа возвращаемого значения, а Mapping используется в качестве аннотации типа параметра. MutableMapping — это подкласс объекта Mapping, и MutableMapping часто используется вместо Mapping во многих библиотеках.

Любой любой тип

Если значение имеет любой тип, вы можете использовать Any

Язык кода:javascript
копировать
from typing import Dict, Any  


def demo_dict(d: Dict[str, Any]) -> Dict:  
    d.update({"aa": 22})  
    return d  


r = demo_dict({"x": 1, "y": "A", "z": ["a", "b"]})  
print(r)

Tuple

Тип пустого кортежа можно записать как Tuple[()]

Язык кода:javascript
копировать
def fun_a(a: Tuple[()]) -> Tuple:  
    return a  


r = fun_a(())

В кортеже только один член

Язык кода:javascript
копировать
def fun_a(a: Tuple[str]) -> Tuple:  
    return a  


r = fun_a(('aa', ))  
print(r)

Тип кортежа,Tuple[X, Y] Аннотировал тип кортежа, первый элемент которого имеет тип X А тип второго элемента — Y.

Язык кода:javascript
копировать
def fun_a(a: Tuple[str, int]) -> Tuple:  
    return a  


r = fun_a(('aa', 12))  
print(r)

Tuple[int, float, str] Представляет тройку, состоящую из целого числа, числа с плавающей запятой и строки.

Язык кода:javascript
копировать
def fun_a(a: Tuple[int, float, str]) -> Tuple:  
    return a  


r = fun_a((11, 12.1, "aa"))  
print(r)

Чтобы выразить кортеж переменной длины из одних и тех же элементов,Используйте литералы с многоточием,нравитьсяTuple[int, ...]

Язык кода:javascript
копировать
def fun_a(a: Tuple[int, ...]) -> Tuple:  
    return a  


r = fun_a((11, 12, 13, 14))  
print(r)

одинокий Tuple Эквивалентно Tuple[Any, ...],а потом Эквивалентно tuple

Set、AbstractSet

Set, коллекция — это универсальный тип набора; AbstractSet — это универсальный тип коллекции.abc.Set. Согласно официальной документации, Set рекомендуется для аннотирования возвращаемых типов, а AbstractSet — для аннотирования параметров. Все они используются одинаково, за ними следует квадратная скобка, которая объявляет тип элементов в коллекции, например:

Язык кода:javascript
копировать
from typing import Set, AbstractSet  


def describe(s: AbstractSet[int]) -> Set[int]:  
    return set(s)

Здесь Set используется в качестве аннотации типа возвращаемого значения, а AbstractSet используется в качестве аннотации типа параметра.

boy illustration
RasaGpt — платформа чат-ботов на основе Rasa и LLM.
boy illustration
Nomic Embed: воспроизводимая модель внедрения SOTA с открытым исходным кодом.
boy illustration
Улучшение YOLOv8: EMA основана на эффективном многомасштабном внимании, основанном на межпространственном обучении, и эффект лучше, чем у ECA, CBAM и CA. Малые цели имеют очевидные преимущества | ICASSP2023
boy illustration
Урок 1 серии Libtorch: Тензорная библиотека Silky C++
boy illustration
Руководство по локальному развертыванию Stable Diffusion: подробные шаги и анализ распространенных проблем
boy illustration
Полностью автоматический инструмент для работы с видео в один клик: VideoLingo
boy illustration
Улучшения оптимизации RT-DETR: облегченные улучшения магистрали | Support Paddle облегченный rtdetr-r18, rtdetr-r34, rtdetr-r50, rtdet
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | Деформируемое внимание с большим ядром (D-LKA Attention), большое ядро ​​​​свертки улучшает механизм внимания восприимчивых полей с различными функциями
boy illustration
Создано Datawhale: выпущено «Руководство по тонкой настройке развертывания большой модели GLM-4»!
boy illustration
7B превышает десятки миллиардов, aiXcoder-7B с открытым исходным кодом Пекинского университета — это самая мощная модель большого кода, лучший выбор для корпоративного развертывания.
boy illustration
Используйте модель Huggingface, чтобы заменить интерфейс внедрения OpenAI в китайской среде.
boy illustration
Оригинальные улучшения YOLOv8: несколько новых улучшений | Сохранение исходной информации — алгоритм отделяемой по глубине свертки (MDSConv) |
boy illustration
Второй пилот облачной разработки | Быстро поиграйте со средствами разработки на базе искусственного интеллекта
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция с нулевым кодированием и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
Решенная Ошибка | Загрузка PyTorch медленная: TimeoutError: [Errno 110] При загрузке факела истекло время ожидания — Cat Head Tiger
boy illustration
Brother OCR, библиотека с открытым исходным кодом для Python, которая распознает коды проверки.
boy illustration
Новейшее подробное руководство по загрузке и использованию последней демонстрационной версии набора данных COCO.
boy illustration
Выпущен отчет о крупной модели финансовой отрасли за 2023 год | Полный текст включен в загрузку |
boy illustration
Обычные компьютеры также могут работать с большими моделями, и вы можете получить личного помощника с искусственным интеллектом за три шага | Руководство для начинающих по локальному развертыванию LLaMA-3
boy illustration
Одной статьи достаточно для анализа фактора транскрипции SCENIC на Python (4)
boy illustration
Бросая вызов ограничениям производительности небольших видеокарт, он научит вас запускать большие модели глубокого обучения с ограниченными ресурсами, а также предоставит полное руководство по оценке и эффективному использованию памяти графического процессора!
boy illustration
Команда Fudan NLP опубликовала 80-страничный обзор крупномасштабных модельных агентов, в котором в одной статье представлен обзор текущего состояния и будущего агентов ИИ.
boy illustration
[Эксклюзив] Вы должны знать о новой функции JetBrains 2024.1 «Полнострочное завершение кода», чтобы решить вашу путаницу!
boy illustration
Краткое изложение базовых знаний о регистрации изображений 1.0
boy illustration
Новейшее подробное руководство по установке и использованию библиотеки cv2 (OpenCV, opencv-python) в Python.
boy illustration
Легко создайте локальную базу знаний для крупных моделей на основе Ollama+AnythingLLM.
boy illustration
[Решено] ошибка установки conda. Среда решения: не удалось выполнить первоначальное зависание решения. Повторная попытка с помощью файла (графическое руководство).
boy illustration
Одна статья поможет вам понять RAG (Retrival Enhanced Generation) | Введение в концепцию и теорию + практику работы с кодом (включая исходный код).
boy illustration
Эволюция архитектуры шлюза облачной разработки
boy illustration
Docker и Kubernetes [Разработка контейнерных приложений с помощью Python]