Встроенные функции Python: какие нужно знать и на какие не стоит тратить время |
||
МЕНЮ Искусственный интеллект Поиск Регистрация на сайте Помощь проекту ТЕМЫ Новости ИИ Искусственный интеллект Разработка ИИГолосовой помощник Городские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Нейронные сети начинающим Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Техническое зрение Чат-боты Авторизация |
2020-08-17 10:21 В Python существуют десятки встроенных функций и классов, сотни инструментов, входящих в стандартную библиотеку Python, и тысячи сторонних библиотек на PyPI. Держать всё в голове начинающему программисту нереально. В статье расскажем про стандартные встроенные функции Python: какие используются часто, а какие вам, вероятно, не пригодятся никогда. Чтобы разобраться, на какие функции стоит обратить внимание, их следует разделить на группы:
Встроенные функции в первых двух категориях являются основными. Они в конечном итоге будут нужны почти всем начинающим программистам на Python. Встроенные модули в следующих двух категориях являются специализированными, но потребности в них будут варьироваться в зависимости от вашей специализации. Категория 5 — это скрытые встроенные функции. Они очень полезны, когда в них есть необходимость, но многим программистам Python они, вероятно, никогда не понадобятся. Общеизвестные функции Если вы уже писали код на Python, эти модули должны быть вам знакомы. Вряд ли найдётся разработчик, даже начинающий, который не знает эту функцию вывода. Как минимум реализация «Hello, World!» требует использования данного метода. Но вы можете не знать о различных аргументах, которые можно передавать в >>> words = ["Welcome", "to", "Python"] >>> print(words) ['Welcome', 'to', 'Python'] >>> print(*words, end="! ") Welcome to Python! >>> print(*words, sep=" ") Welcome to Python len В Python нет синтаксиса вроде >>> words = ["Welcome", "to", "Python"] >>> len(words) 3 Нравится вам такая реализация или нет, другой альтернативы не предусмотрено, поэтому к ней нужно привыкнуть. str К сожалению, в отличие от многих других языков программирования, в Python нельзя объединять строки и числа. >>> version = 3 >>> "Python " + version Traceback (most recent call last): File "", line 1, in TypeError: can only concatenate str (not "int") to str Python отказывается приводить целое число 3 к типу строка, поэтому нужно сделать это самостоятельно, используя встроенную функцию >>> version = 3 >>> "Python " + str(version) 'Python 3' int Если нужно пользовательский ввод преобразовать в >>> program_name = "Python 3" >>> version_number = program_name.split()[-1] >>> int(version_number) 3 Эту функцию также можно использовать для отсечения дробной части у числа с плавающей точкой. >>> from math import sqrt >>> sqrt(28) 5.291502622129181 >>> int(sqrt(28)) 5 Обратите внимание, если нужно обрезать дробную часть при делении, оператор « int (3/2) == 3 // 2 float Если строка, которую надо конвертировать в число, не является целым числом, здесь поможет метод >>> program_name = "Python 3" >>> version_number = program_name.split()[-1] >>> float(version_number) 3.0 >>> pi_digits = '3.141592653589793238462643383279502884197169399375' >>> len(pi_digits) 50 >>> float(pi_digits) 3.141592653589793
В Python 2 такое преобразование необходимо, но в Python 3 целочисленное деление больше не является чем-то особенным (если вы специально не используете оператор « list Эта функция может очень облегчить задачу, если вы хотите составить список из итераций цикла. >>> numbers = [2, 1, 3, 5, 8] >>> squares = (n**2 for n in numbers) >>> squares at 0x7fd52dbd5930> >>> list_of_squares = list(squares) >>> list_of_squares [4, 1, 9, 25, 64] При работе со списком метод >>> copy_of_squares = list_of_squares.copy() Если вы не знаете, с какими элементами работаете, функция >>> copy_of_squares = list(list_of_squares) Также можно использовать списковое включение, но делать это не рекомендуется. Обратите внимание, когда вы хотите создать пустой список, следует использовать буквальный синтаксис списка (« >>> my_list = list() # Так делать нельзя >>> my_list = [] # Так можно Использование « tuple Эта функция во многом похожа на функцию >>> numbers = [2, 1, 3, 4, 7] >>> tuple(numbers) (2, 1, 3, 4, 7) Если вы пытаетесь создать хешируемую коллекцию (например, ключ словаря), стоит отдать предпочтению кортежу вместо списка. dict Эта функция создаёт новый словарь. Подобно спискам и кортежам, Дан список кортежей, по два элемента в каждом. >>> color_counts = [('red', 2), ('green', 1), ('blue', 3), ('purple', 5)] Выведем его на экран с помощью цикла. >>> colors = {} >>> for color, n in color_counts: ... colors[color] = n ... >>> colors {'red': 2, 'green': 1, 'blue' 3, 'purple': 5} То же самое, но с использованием >>> colors = dict(color_counts) >>> colors {'red': 2, 'green': 1, 'blue' 3, 'purple': 5} Функция
Поэтому следующий код также будет работать. >>> colors {'red': 2, 'green': 1, 'blue' 3, 'purple': 5} >>> new_dictionary = dict(colors) >>> new_dictionary {'red': 2, 'green': 1, 'blue' 3, 'purple': 5} Функция >>> person = dict(name='Trey Hunner', profession='Python Trainer') >>> person {'name': 'Trey Hunner', 'profession': 'Python Trainer'} Но рекомендуется всё же использовать литералы вместо ключевых слов. >>> person = {'name': 'Trey Hunner', 'profession': 'Python Trainer'} >>> person {'name': 'Trey Hunner', 'profession': 'Python Trainer'} Такой синтаксис более гибок и немного быстрее. Но самое главное он более чётко передаёт факт того, что вы создаёте именно словарь. Как в случае со списком и кортежем, пустой словарь следует создавать с использованием буквального синтаксиса (« >>> my_list = dict() # Так делать нельзя >>> my_list = {} # Так можно Использование « set Функция >>> numbers = [1, 1, 2, 3, 5, 8] >>> set(numbers) {1, 2, 3, 5, 8} Создать пустой набор с « >>> numbers = set() >>> numbers set() Можно использовать и другой синтаксис. >>> {*()} # Так можно создать пустой набор set() Такой способ имеет недостаток — он сбивает с толку (он основан на редко используемой функции оператора Статья по теме: Звёздный Python: где и как используются * и ** range Эта функция создаёт объект >>> range(10_000) range(0, 10000) >>> range(-1_000_000_000, 1_000_000_000) range(-1000000000, 1000000000) Результирующий диапазон чисел включает начальный номер, но исключает конечный ( Данная функция полезна при переборе чисел. >>> for n in range(0, 50, 10): ... print(n) ... 0 10 20 30 40 Обычный вариант использования — выполнить операцию first_five = [get_things() for _ in range(5)] Функция Функции, неочевидные для новичков bool Эта функция проверяет достоверность (истинность) объектов Python. Относительно чисел будет выполняться проверка на неравенство нулю. >>> bool(5) True >>> bool(-1) True >>> bool(0) False Применяя >>> bool('hello') True >>> bool('') False >>> bool(['a']) True >>> bool([]) False >>> bool({}) False >>> bool({1: 1, 2: 4, 3: 9}) True >>> bool(range(5)) True >>> bool(range(0)) False >>> bool(None) False Проверка истинности очень важна в Python. Вместо того, чтобы задавать вопросы о длине контейнера, многие новички задают проверку истинности. # Вместо этого if len(numbers) == 0: print("The numbers list is empty") # многие делают так if not numbers: print("The numbers list is empty") Данная функция используется редко. Но, если нужно привести значение к логическому типу для проверки его истинности, enumerate Если нужно в цикле посчитать количество элементов (по одному элементу за раз), эта функция может быть очень полезной. Такая задача может показаться специфической, но она бывает нужна довольно часто. Например, если нужно отслеживать номер строки в файле. >>> with open('hello.txt', mode='rt') as my_file: ... for n, line in enumerate(my_file, start=1): ... print(f"{n:03}", line) ... 001 This is the first line of the file 002 This is the second line 003 This is the last line of the file
def palindromic(sequence): """Возвращает True, если последовательность является палиндромом.""" for i, item in enumerate(sequence): if item != sequence[-(i+1)]: return False return True Также следует обратить внимание, что новички в Python часто используют def palindromic(sequence): """Возвращает True, если последовательность является палиндромом.""" for i in range(len(sequence)): if sequence[i] != sequence[-(i+1)]: return False return True zip Эта функция ещё более специализирована, чем >>> one_iterable = [2, 1, 3, 4, 7, 11] >>> another_iterable = ['P', 'y', 't', 'h', 'o', 'n'] >>> for n, letter in zip(one_iterable, another_iterable): ... print(letter, n) ... P 2 y 1 t 3 h 4 o 7 n 11 По сравнению с reversed Функция >>> numbers = [2, 1, 3, 4, 7] >>> reversed(numbers) <list_reverseiterator object at 0x7f3d4452f8d0> Единственное, что можно сделать с этим итератором, пройтись по нему (но только один раз). >>> reversed_numbers = reversed(numbers) >>> list(reversed_numbers) [7, 4, 3, 1, 2] >>> list(reversed_numbers) [] Подобно >>> for n in reversed(numbers): ... print(n) ... 7 4 3 1 2 Есть несколько и других способов перевернуть списки в Python. # Синтаксис нарезки for n in numbers[::-1]: print(n) # Метод переворота на месте numbers.reverse() for n in numbers: print(n) Данная функция, как правило, является лучшим способом «перевернуть» любой список (а также набор, массив и т. д.) в Python. В отличие от
Можно использовать факт, что def palindromic(sequence): """Возвращает True, если последовательность является палиндромом.""" for n, m in zip(sequence, reversed(sequence)): if n != m: return False return True sum Эта функция берёт набор чисел и возвращает их сумму. >>> sum([2, 1, 3, 4, 7]) 17 В Python есть много вспомогательных функций, которые выполняют циклы за вас (отчасти потому, что они хорошо сочетаются с генератор-выражениями). >>> numbers = [2, 1, 3, 4, 7, 11, 18] >>> sum(n**2 for n in numbers) 524 min и max Эти функции выдают минимальное и максимальное число из набора соответственно. >>> numbers = [2, 1, 3, 4, 7, 11, 18] >>> min(numbers) 1 >>> max(numbers) 18 Данные методы сравнивают элементы, используя оператор
>>> fruits = ['kumquat', 'Cherimoya', 'Loquat', 'longan', 'jujube'] >>> sorted(fruits, key=len) ['Loquat', 'longan', 'jujube', 'kumquat', 'Cherimoya'] sorted Эта функция принимает любой набор элементов и возвращает новый список всех значений в отсортированном порядке. >>> numbers = [1, 8, 2, 13, 5, 3, 1] >>> words = ["python", "is", "lovely"] >>> sorted(words) ['is', 'lovely', 'python'] >>> sorted(numbers, reverse=True) [13, 8, 5, 3, 2, 1, 1] Данная функция (как
any и all Эти функции могут быть использованы в паре с генератор-выражениями, чтобы определить соответствие элементов заданному условию. Используя def palindromic(sequence): """Возвращает True, если последовательность является палиндромом.""" return all( n == m for n, m in zip(sequence, reversed(sequence)) ) Отрицание условия и возвращаемого значения позволит также использовать def palindromic(sequence): """Возвращает True, если последовательность является палиндромом.""" return not any( n != m for n, m in zip(sequence, reversed(sequence)) ) 5 функций для отладки Эти функции часто игнорируются, но будут полезны для отладки и устранения неисправностей кода. breakpoint Если нужно приостановить выполнение кода и перейти в командную строку Python, эта функция вам пригодится. Вызов Эта встроенная функция была добавлена в Python 3.7, но если вы работаете в более старых версиях, можете получить тот же результат с помощью dir Эта функция может использоваться в двух случаях:
Из примера можно увидеть локальные переменные сразу после запуска и после создания новой переменной >>> dir() ['__annotations__', '__doc__', '__name__', '__package__'] >>> x = [1, 2, 3, 4] >>> dir() ['__annotations__', '__doc__', '__name__', '__package__', 'x'] Если в >>> dir(x) ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort'] В выведенном списке атрибутов можно увидеть его типичные методы ( vars Эта функция является своего рода смесью двух похожих инструментов: Когда >>> vars() {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>} Когда вызов происходит с аргументом, >>> from itertools import chain >>> vars(chain) mappingproxy({'__getattribute__': , '__iter__': , '__next__': , '__new__': , 'from_iterable': <method 'from_iterable' of 'itertools.chain' objects>, '__reduce__': <method '__reduce__' of 'itertools.chain' objects>, '__setstate__': <method '__setstate__' of 'itertools.chain' objects>, '__doc__': 'chain(*iterables) --> chain object Return a chain object whose .__next__() method returns elements from the first iterable until it is exhausted, then elements from the next iterable, until all of the iterables are exhausted.'}) Перед использованием type Эта функция возвращает тип объекта, который вы ей передаете. Тип экземпляра класса есть сам класс. >>> x = [1, 2, 3] >>> type(x) <class 'list'> Тип класса — это его метакласс, обычно это >>> type(list) <class 'type'> >>> type(type(x)) <class 'type'> Атрибут >>> x.__class__ <class 'list'> >>> type(x) <class 'list'> Функция Обратите внимание, что при проверке типов обычно вместо help Если вы находитесь в Python Shell или делаете отладку кода с использованием В действительности вы, скорее всего, будете обращаться за помощью к поисковой системе. Но если вы уже находитесь в Python Shell, вызов Функции, которые пригодятся позже В начале изучения Python эти функции вам по большей части будут не нужны, но в конечном итоге они вам понадобятся. open Эта функция служит для открытия файла и последующей работы с ним. Но, если вы не работаете с файлами напрямую, то она вам может и не пригодиться. Несмотря на то, что работа с файлами очень распространена, далеко не все программисты Python работают с файлами через input Эта функция запрашивает у пользователя ввод, ждёт нажатия клавиши Enter, а затем возвращает набранный текст. Чтение из стандартного ввода — это один из способов получить входные данные в программе. Но есть и много других способов: аргументы командной строки, чтение из файла, чтение из базы данных и многое другое. repr Эта функция необходима для представления объекта в читабельном виде. Для многих объектов функции >>> str(4), repr(4) ('4', '4') >>> str([]), repr([]) ('[]', '[]') Но есть объекты, для которых их применение различается. >>> str('hello'), repr("hello") ('hello', "'hello'") >>> from datetime import date >>> str(date(2020, 1, 1)), repr(date(2020, 1, 1)) ('2020-01-01', 'datetime.date(2020, 1, 1)') Строковое представление, которое вы видите в Python Shell, использует >>> date(2020, 1, 1) datetime.date(2020, 1, 1) >>> "hello!" 'hello!' >>> print(date(2020, 1, 1)) 2020-01-01 >>> print("hello!") hello! Также super Эта функция очень важна, если используется наследование одного класса от другого. Многие пользователи Python редко создают классы. Они не являются важной частью Python, хоть для многих типов программирования они необходимы. Например, вы не можете использовать веб-фреймворк Django без создания классов. property Эта функция является декоратором и дескриптором. Статья по теме: Декораторы в Python: понять и полюбить Декоратор позволяет создать атрибут, который всегда будет содержать возвращаемое значение конкретного вызова функции. Это проще всего понять на примере. Пример класса, который использует class Circle: def __init__(self, radius=1): self.radius = radius @property def diameter(self): return self.radius * 2 Здесь вы можете увидеть доступ к атрибуту >>> circle = Circle() >>> circle.diameter 2 >>> circle.radius = 5 >>> circle.diameter 10 Если вы занимаетесь объектно-ориентированным программированием на Python, вам, вероятно, захочется узнать о issubclass и isinstance Функция >>> issubclass(int, bool) False >>> issubclass(bool, int) True >>> issubclass(bool, object) True Функция >>> isinstance(True, str) False >>> isinstance(True, bool) True >>> isinstance(True, int) True >>> isinstance(True, object) True Функция >>> issubclass(type(True), str) False >>> issubclass(type(True), bool) True >>> issubclass(type(True), int) True >>> issubclass(type(True), object) True Если вы перегружаете операторы, вам может понадобиться использование hasattr, getattr, setattr и delattr Если нужно работать с атрибутами объекта, но имя атрибутов является динамическим и постоянно меняется, данные функции вам будут необходимы. Например, есть объект >>> class Thing: pass ... >>> thing = Thing() Функция >>> hasattr(thing, 'x') False >>> thing.x = 4 >>> hasattr(thing, 'x') True Функция >>> getattr(thing, 'x') 4 >>> getattr(thing, 'x', 0) 4 >>> getattr(thing, 'y', 0) 0 Функция >>> setattr(thing, 'x', 5) >>> thing.x 5 И >>> delattr(thing, 'x') >>> thing.x Traceback (most recent call last): File "", line 1, in AttributeError: 'Thing' object has no attribute 'x' classmethod и staticmethod Если у вас есть метод, который должен вызываться в экземпляре или в классе, вам нужен декоратор class RomanNumeral: """Римская цифра, представленная как строка и число.""" def __init__(self, number): self.value = number @classmethod def from_string(cls, string): return cls(roman_to_int(string)) # Функция пока еще не существует Немного сложнее придумать хорошее использование class RomanNumeral: """Римская цифра, представленная как строка и число.""" SYMBOLS = {'M': 1000, 'D': 500, 'C': 100, 'L': 50, 'X': 10, 'V': 5, 'I': 1} def __init__(self, number): self.value = number @classmethod def from_string(cls, string): return cls(cls.roman_to_int(string)) @staticmethod def roman_to_int(numeral): total = 0 for symbol, next_symbol in zip_longest(numeral, numeral[1:]): value = RomanNumeral.SYMBOLS[symbol] next_value = RomanNumeral.SYMBOLS.get(next_symbol, 0) if value < next_value: value = -value total += value return total Функция next Данная функция возвращает следующий элемент в итераторе. Она может работать со следующими видами итераторов:
Функция Функции, которые когда-нибудь можно выучить Следующие встроенные функции Python определённо не бесполезны, но они более специализированы. Эти функции вам, возможно, будут нужны, но также есть шанс, что вы никогда не прибегнете к ним в своём коде.
Прочие специфические функции
Заключение Если вы только начинаете свой путь в изучении Python, нет необходимости изучать все встроенные функции сейчас. Не торопитесь, сосредоточьтесь на первых двух пунктах (общеизвестные и упускаемые из виду), а после можете перейти и к другим, если/когда они вам понадобятся. Источник: m.vk.com Комментарии: |
|