Similar presentations:
Встроенные функции
1. Встроенные функции
2. abs(x)
• Возвращает абсолютное значение числа.print(abs(-5)) # 5
3. all(iterable)
• Возвращает True, если все элементы итерируемого объектаистинны (или если объект пуст).
print(all([True, 1, 'hello'])) # True
4. any(iterable)
• Возвращает True, если хотя бы один элемент итерируемогообъекта истинен.
print(any([False, 0, ''])) # False
5. ascii(object)
• Возвращает строку с печатным представлением объекта, заменяя не-ASCII символы на escapeпоследовательности.print(ascii('привет')) # '\u043f\u0440\u0438\u0432\u0435\u0442’
Конкретные варианты использования и польза:
1. Отладка и логирование: когда нужно вывести строку с не-ASCII символами в читаемом виде
(экранированном) для отладки или логов, особенно в средах, где может быть проблема с кодировкой.
2. Сериализация данных: при преобразовании данных в строку для хранения или передачи в системе,
которая требует ASCII, например, при записи в файл, который должен быть в ASCII, или при отправке
данных по сети в системе, которая не поддерживает Unicode.
3. Безопасный вывод: когда необходимо вывести строку так, чтобы она была безопасна для
интерпретации в консоли или другом устройстве, которое может не поддерживать Unicode.
4. Сравнение строк: иногда нужно сравнить строки в экранированном виде, чтобы убедиться, что они
идентичны по содержанию, даже если оригинальные строки содержат разные не-ASCII символы.
5. Генерация кода: при автоматической генерации кода на Python, где нужно представить строки в ASCII,
чтобы избежать проблем с кодировкой исходного файла.
6. bin(x)
• Преобразует целое число в двоичную строку с префиксом 0b.print(bin(5)) # '0b101’
7. bool(x)
• Преобразует значение в булево (True или False) используястандартную процедуру проверки истинности.
print(bool(0)) # False
8. breakpoint()
• Вызывает отладчик Python - встроенная функция в Python(доступна с версии 3.7), которая предоставляет удобный способ
установки точек останова для отладки кода. Она заменяет
традиционный способ с использованием import pdb;
pdb.set_trace().
# breakpoint() # раскомментируйте,
чтобы запустить отладчик
9.
• c или cont # Продолжить выполнение до следующей точкиостанова
• n или next # Выполнить следующую строку (не заходя в
функции)
• s или step # Выполнить следующую строку (заходя в функции)
• r или return # Выполнять до возврата из текущей функции
• q или quit # Выйти из отладчика
10.
• l или list # Показать код вокруг текущей позиции• w или where # Показать стек вызовов
• u или up
# Подняться на уровень выше в стеке вызовов
• d или down # Опуститься на уровень ниже в стеке вызовов
• h или help # Показать справку по командам
11.
def calculate_stats(numbers):total = sum(numbers)
count = len(numbers)
breakpoint() # Точка останова
average = total / count
return average
numbers = [1, 2, 3, 4, 5]
result = calculate_stats(numbers)
12. bytearray(source)
• Создает массив байт (изменяемую последовательность байт).print(bytearray([65, 66, 67])) # bytearray(b'ABC’)
13. bytes(source)
• Создает неизменяемую последовательность байт.print(bytes([65, 66, 67])) # b'ABC'
14.
# Создаем исходные данныеsource_data = "Hello, World!"
print(f"Исходная строка: {source_data}")
# Преобразуем в bytes и bytearray
bytes_obj = bytes(source_data, 'utf-8')
bytearray_obj = bytearray(source_data, 'utf-8')
print(f"bytes объект: {bytes_obj}")
print(f"bytearray объект: {bytearray_obj}")
15.
# Попытка изменить первый элемент в bytes (ВЫЗОВЕТ ОШИБКУ)try:
bytes_obj[0] = 65 # Попытка изменить 'H' (72) на 'A' (65)
except TypeError as e:
print(f"Ошибка с bytes: {e}")
# Успешное изменение первого элемента в bytearray
try:
bytearray_obj[0] = 65 # Меняем 'H' (72) на 'A' (65)
print(f"Измененный bytearray: {bytearray_obj}")
print(f"Текст после изменения: {bytearray_obj.decode('utf-8')}")
except Exception as e:
print(f"Ошибка с bytearray: {e}")
16. Хешируемость
bytes - можно использовать как ключ словаряd = {b"key": "value"} # OK
# bytearray - нельзя использовать как ключ словаря
# d = {bytearray(b"key"): "value"} # TypeError
17. Пример из пентестинга
# Пример модификации сетевого пакетаdef modify_packet(packet, new_value, position):
# Преобразуем в bytearray для возможности изменения
packet_ba = bytearray(packet)
# Заменяем часть пакета
packet_ba[position:position+len(new_value)] = new_value
# Возвращаем как bytes для отправки по сети
return bytes(packet_ba)
# Исходный HTTP-запрос
http_request = b"GET / HTTP/1.1\r\nHost: example.com\r\n\r\n"
# Модифицируем путь
modified_request = modify_packet(http_request, b"/admin", 4)
print(modified_request) # b"GET /admin HTTP/1.1\r\nHost: example.com\r\n\r\n"
# Попытка сделать то же самое с bytes потребовала бы:
# new_request = http_request[:4] + b"/admin" + http_request[9:]
18.
19. chr(i)
• Возвращает символ по его Unicode коду (числу).print(chr(65)) # 'A'
20. compile(source, filename, mode)
• Компилирует исходный код в объект кода для выполнения.code = compile('print("Hello")', 'test', 'exec'); exec(code)
compile() - это как "написание программы" (создание
исполняемого файла)
exec() - это как "запуск программы" (выполнение исполняемого
файла)
21. Варианты использования
• 1. Выполнение динамически генерируемого кодаdef create_greeting_function(name):
source = f'def greet():\n print("Привет, {name}!")\ngreet()'
code = compile(source, 'dynamic_greet', 'exec')
return code
greeting_code = create_greeting_function(“Вася")
exec(greeting_code) # Выведет: Привет, Вася!
22.
• Безопасное выполнение кода с ограничениями• Кэширование скомпилированного кода
# Компиляция один раз, выполнение много раз
template_code = compile('print(f"Добро пожаловать, {name}!")',
'template', 'exec')
for name in ["Иван", "Мария", "Петр"]:
exec(template_code, {'name': name})
23. Особенности
• Безопасность: exec() может выполнять любой код, чтопредставляет угрозу безопасности
Производительность: Компиляция кода занимает время, но
выполнение скомпилированного кода быстрее
Область видимости: По умолчанию exec() выполняется в
текущей области видимости
24. complex(real, imag)
• Создает комплексное число.print(complex(3, 4)) # (3+4j)
25. dict(kwargs)
• Создает словарь.print(dict(a=1, b=2)) # {'a': 1, 'b': 2}
26. dir(object)
Возвращает список имен атрибутов объекта.print(dir([])) # список методов списка
27. divmod(a, b)
• Возвращает частное и остаток от деления a на b.print(divmod(10, 3)) # (3, 1)
28. enumerate(iterable)
• Возвращает итератор с парами (индекс, элемент) дляитерируемого объекта.
for i, item in enumerate(['a', 'b']): print(i, item)
29. eval(expression)
• Выполняет строку с кодом Python и возвращает результат.print(eval('2+2')) # 4
30.
31. filter(function, iterable)
• Фильтрует элементы итерируемого объекта с помощью функции.print(list(filter(lambda x: x>0, [-1, 0, 1]))) # [1]
32. float(x)
• Преобразует число или строку в число с плавающей точкой.print(float('3.14')) # 3.14
33. format(value, format_spec)
Форматирует значение по спецификации.print(format(123, '05d')) # '00123'
34.
Примеры использования:
Целое число с разделителем тысяч:
format(123456789, ',') -> '123,456,789'
Вещественное число с двумя знаками после запятой:
format(3.14159, '.2f') -> '3.14'
Выравнивание и заполнение:
format(42, '0>5d') -> '00042'
Процент:
format(0.25, '.0%') -> '25%'
Шестнадцатеричное представление с префиксом:
format(255, '#x') -> '0xff'
Экспоненциальная запись:
format(1000000, '.2e') -> '1.00e+06'
Форматирование строки с выравниванием по центру и заполнением:
format('hello', '*^10') -> 'hello*'
Использование подчеркивания как разделителя:
format(1000000, '_d') -> '1_000_000'
Отображение знака для положительных и отрицательных чисел:
format(42, '+d') -> '+42'
format(-42, 'd') -> '-42'
Альтернативная форма для вещественных чисел:
format(123, '#.0f') -> '123.' (даже если дробная часть отсутствует, точка остается)
35. frozenset(iterable)
• Создает неизменяемое множество.• fset = frozenset([1, 2, 3])
36. getattr(object, name)
• Возвращает значение атрибута объекта.37. globals()
• Возвращает словарь глобальных символов текущего модуля.print(globals().keys())
38. hasattr(object, name)
• Проверяет, есть ли у объекта атрибут с именем name.print(hasattr('hello', 'upper')) # True
39. hash(object)
• Возвращает хеш-значение объекта (если оно есть).print(hash('hello')) # число
40. hex(x)
• Преобразует целое число в шестнадцатеричную строку спрефиксом 0x.
• print(hex(255)) # '0xff'
41. input(prompt)
• Читает строку из стандартного ввода.name = input('Введите имя: ')
42. int(x)
• Преобразует число или строку в целое число.• print(int('10')) # 10
43. isinstance(object, classinfo)
• Проверяет, является ли объект экземпляром класса или кортежаprint(isinstance(5, int)) # True
44. issubclass(class, classinfo)
• Проверяет, является ли класс подклассом другого класса.print(issubclass(bool, int)) # True
45. iter(object)
• Возвращает итератор для объекта.it = iter([1,2]); next(it) # 1
46. len(s)
• Возвращает длину (количество элементов) объекта.print(len('abc')) # 3
47. list(iterable)
• Создает список.print(list('abc')) # ['a', 'b', 'c']
48. locals()
• Возвращает словарь локальных переменных текущей областивидимости.
x=10; print(locals()['x']) # 10
49. map(function, iterable)
• Применяет функцию к каждому элементу итерируемого объекта.print(list(map(str.upper, ['a', 'b']))) # ['A', 'B']
50. max(iterable)
• Возвращает наибольший элемент в итерируемом объекте.print(max([3,1,4])) # 4
min(iterable) Возвращает наименьший элемент в итерируемом
объекте.
51. next(iterator)
• Возвращает следующий элемент из итератора.it = iter([1,2]); print(next(it)) # 1
52. object()
• Создает новый базовый объект (корень иерархии типов).obj = object()
53. oct(x)
• Преобразует целое число в восьмеричную строку с префиксом 0o.print(oct(8)) # '0o10'
54. open(file, mode)
• Открывает файл и возвращает файловый объект.with open('file.txt') as f: content = f.read()
55. ord(c)
• Возвращает Unicode код символа.print(ord('A')) # 65
56. pow(base, exp)
• Возвращает base в степени exp.print(pow(2, 3)) # 8
57. print(objects)
• Выводит объекты в текстовый поток.58. range(stop)
• Возвращает неизменяемую последовательность чисел.print(list(range(3))) # [0, 1, 2]
59. round(number)
• Округляет число до заданного количества знаков после запятой.print(round(3.14159, 2)) # 3.14
60. set(iterable)
• Создает множество.print(set([1,2,2,3])) # {1,2,3}
61. slice(start, stop)
• Создает объект среза для использования в индексации.arr = [1,2,3,4]; print(arr[slice(1,3)]) # [2,3]
62. sorted(iterable)
• Возвращает новый отсортированный список из элементовитерируемого объекта.
print(sorted([3,1,2])) # [1,2,3]
63. str(object)
• Возвращает строковое представление объекта.• print(str(42)) # '42'
64. sum(iterable)
• Возвращает сумму элементов итерируемого объекта.print(sum([1,2,3])) # 6
65. tuple(iterable)
• Создает кортеж.print(tuple([1,2,3])) # (1,2,3)
66. type(object)
• Возвращает тип объекта.print(type(42)) # <class 'int'>
67. vars(object)
• Возвращает словарь атрибутов объекта.class Test: x=10; print(vars(Test)) # {'x': 10, ...}
68. zip(iterables)
• Возвращает итератор по кортежам, где i-й кортеж содержит i-еэлементы каждого из аргументов.
print(list(zip([1,2], ['a','b']))) # [(1, 'a'), (2, 'b')]
programming