Python Core Addition Flashcards
В каком году написана первая статья про python
Гвидо Ван Россум - 1991-й (релиз)
Что такое python?
- Интерпретируемый
- Динамическая типизация
- Автоматическое управление памятью
- Конец 1980-х
- Гвидо ван Россум
Python - это язык программирования высокого уровня, интерпретируемый, с динамической типизацией и автоматическим управлением памятью. Он был разработан в конце 1980-х годов Гвидо ван Россумом и имеет широкую популярность среди разработчиков благодаря своей простоте и эффективности. Python широко применяется в различных областях, включая науку о данных, машинное обучение, веб-разработку, игровую индустрию, GIS и многие другие.
Какие типы данных есть в python? На какие классы делятся?
Python поддерживает множество различных встроенных типов данных, включая:
- Числа: int, float, и complex.
- Строки: str.
- Списки: list.
- Кортежи: tuple.
- Словари: dict.
- Множества: set.
- Булевы значения: bool.
Эти типы данных можно разделить на несколько классов:
- Числовые типы данных: int, float, и complex.
- Строковые типы данных: str.
- Коллекции: list, tuple, dict, и set.
- Булевы типы данных: bool.
Каждый тип предоставляет свои собственные методы и функции для работы с данными, а также поддерживает операции, которые могут выполняться на них, такие как арифметические и логические операции.
Что такое лямбда-функция? Какое у неё назначение?
Лямбда-функция (также известна как “анонимная функция”) - это функция, которая определяется в одной строке кода без использования ключевого слова def. Она может быть использована вместо обычной функции, когда требуется быстрое определение небольшой функции.
В Python лямбда-функция определяется с помощью ключевого слова lambda, за которым следует список аргументов через запятую, затем символ :, и наконец, тело функции.
Например, чтобы определить лямбда-функцию, которая удваивает свой аргумент, можно написать:
double = lambda x: x * 2
Лямбда-функции в основном используются в качестве аргументов функций высшего порядка , которые принимают другие функции в качестве аргументов. Также они могут использоваться для создания более читаемого и компактного кода.
Например, можно использовать лямбда-функцию вместо объявления обычной функции для преобразования списка:
numbers = [1, 2, 3, 4, 5] squares = list(map(lambda x: x**2, numbers))
Этот пример создает список квадратов чисел в списке numbers с помощью функции map(), принимающей лямбда-функцию в качестве аргумента.
Таким образом, лямбда-функция в Python позволяет определять небольшие функции быстро и использовать их в качестве аргументов для других функций.
Что такое PEP 8?
PEP 8 (Python Enhancement Proposal 8) - это документ, содержащий рекомендации по написанию кода на языке Python.
Он содержит стилевые соглашения, которые, следуя практике, повышают читабельность кода, делая его более понятным, расширяемым и поддерживаемым. Документ был опубликован в 2001 году и рекомендуется как основной стандарт написания кода Python. PEP 8 охватывает такие темы, как именование переменных, расположение отступов, длина строк, комментарии, импорты и многое другое.
Как получить документацию по атрибутам объекта?
В Python вы можете получить документацию по атрибутам объекта с помощью атрибута doc. Например, если у вас есть объект с атрибутом attribute_name, то вы можете получить его документацию следующим образом:
python print(attribute_name.\_\_doc\_\_) ~~~ Вы также можете использовать встроенную функцию help() для получения подробной информации о любом объекте, включая его атрибуты. Просто передайте объект в функцию help(), чтобы получить всю доступную документацию:python
help(attribute_name)
~~~
Небольшое уточнение: doc отображает документацию для конкретного атрибута или метода. Если вы хотите получить общую документацию для объекта, вызовите help() без параметров (т.е. help(object_name)).
Например, если у вас есть класс с атрибутом attribute_name, вы можете получить его документацию следующим образом:
```python
class MyClass:
“"”This is the docstring for MyClass.”””
attribute_name = “value”
print(MyClass.attribute_name.__doc__)
~~~
Этот код выведет документацию для атрибута attribute_name, которая будет равна None, так как мы не определили документацию для него в классе. Теперь мы можем использовать функцию help() для получения документации для самого класса:
```python
help(MyClass)
~~~
Это приведет к выводу всей доступной документации для MyClass, включая документацию для его атрибута attribute_name.
Что такое docstring?
Docstring в Python - это строка документации, которая описывает, что делает функция, метод, модуль или класс Python.
Данная строка располагается в начале определения объекта и используется для генерации документации автоматически.
В других словах, docstring используется для создания описания API и содержит информацию о том, как использовать функцию или метод, какие аргументы они принимают и какие значения возвращают.
Например:
```python
def add_numbers(a, b):
“””
This function takes in two numbers and returns their sum
“””
return a + b
~~~
В данном примере, docstring - это строка между тройными кавычками, после имени функции. Она описывает, что делает функция и как ее использовать.
Docstring является важным инструментом в Python разработке, так как важно документировать ваш код для себя и для других разработчиков. Документированный код легче поддерживать и понимать, что облегчает разработку и сотрудничество.
В чём разница между типами list и tuple?
Изменяемый и неизменяемый.
Кортеж обрабатывается быстрее за счёт неизменяемости.
В Python, список (list) и кортеж (tuple) являются двумя различными типами данных, которые предоставляют набор элементов в определенном порядке. Основная разница между ними заключается в том, что список может быть изменен (мутабельный тип), а кортеж является неизменяемым (иммутабельным типом).
То есть, после создания кортежа, вы не можете изменять его содержимое, добавлять или удалять элементы. Это делает кортежи более эффективными по памяти и дает гарантию того, что их содержимое не будет изменено случайно в коде. В то время как список может быть изменен, что было бы очень полезно, если вам нужна коллекция элементов, которые вы можете изменять по ходу выполнения кода.
Другая разница между списком и кортежем заключается в скорости доступа к элементам. За счет того, что кортежи являются неизменным типом данных, они обрабатываются быстрее, чем списки.
Например, для создания списка в Python используется квадратная скобка, а для создания кортежа используется круглая скобка. Вот примеры использования списков и кортежей:
python my_list = [1, 2, 3, 4, 5] # Это список my_tuple = (1, 2, 3, 4, 5) # Это кортеж ~~~ Cписок может быть изменен, например, можно добавить элемент в список:python
my_list.append(6)
~~~
Но не можем добавить элемент в кортеж, так как он неизменяем:
```python
my_tuple.append(6) # Эта строка вызовет ошибку
~~~
Может ли быть индекс списка отрицательным?
Да, индекс списка может быть отрицательным. В таком случае, отрицательное значение считается от конца списка, где -1 соответствует последнему элементу, -2 - предпоследнему элементу и так далее.
Например, чтобы получить последний элемент списка my_list в Python, можно использовать следующую команду:
python last_element = my_list[-1] ~~~ Также можно использовать отрицательные значения для срезов (slicing) списка, например:python
my_list[-3:] # вернет последние три элемента списка
my_list[:-2] # вернет все элементы списка, кроме последних двух
my_list[::-1] # вернет список в обратном порядке
~~~
Но следует учесть, что если индекс отрицательный и его абсолютное значение больше или равно длине списка, будет возбуждено исключение IndexError.
Что значит конструкция pass?
В Python, pass является пустым оператором. Он используется там, где синтаксически требуется оператор, но никаких действий выполнять не нужно. Например, это может быть полезно при написании заглушки функции, которая будет реализована позже, или в цикле, который ничего не должен делать на данной итерации. Пример использования конструкции pass:
```python
def my_function():
pass # заглушка для функции, которая будет реализована позже
for i in range(10):
if i < 3:
pass # ничего не делать на первых трёх итерациях
else:
print(i) # вывести значения на всех остальных итерациях
```
В обоих случаях pass играет роль пустого оператора, который не выполняет никаких действий, но позволяет синтаксически корректно описать код.
Чем отличаются многопоточное и многопроцессорное приложение?
Многопоточное и многопроцессорное приложения отличаются друг от друга в том, как они используют ресурсы компьютера. В многопроцессорных приложениях каждый процесс имеет свой собственный набор ресурсов, включая память, открытые файлы, сетевые соединения и другие системные ресурсы. В многопоточных приложениях несколько потоков выполняются в рамках одного процесса, используя общие ресурсы. Это означает, что все потоки имеют доступ к общим данным.
Реализация многопоточности в Python выполняется за счет стандартной библиотеки threading. Многопроцессорность в Python может быть достигнута с помощью библиотек multiprocessing и concurrent.futures.
При правильном использовании оба подхода могут ускорить выполнение программы и улучшить управляемость ею, однако многопоточное приложение может иметь проблемы с блокировками и условиями гонки при доступе к общим ресурсам. В многопроцессорных приложениях каждый процесс защищен от других процессов и обеспечивает более высокую степень изоляции.
Как просмотреть методы объекта?
Чтобы посмотреть все методы и атрибуты, связанные с определенным объектом в Python, можно использовать функцию dir(). Она принимает объект в виде аргумента и возвращает список имен всех атрибутов и методов объекта. Например, если нужно увидеть все методы и атрибуты, связанные с объектом my_list, следующее:
```python
my_list = [1, 2, 3]
print(dir(my_list))
~~~
Это выведет список всех методов и атрибутов, которые можно использовать с объектом my_list.
Что такое *args
и **kwargs
в определении функции?
- *args - собирает последовательность элементов в кортеж
-
**kwargs
- собирает последовательность типаdog="Brock", fish=["Larry", "Curly", "Moe"], turtle="Shelldon"
в словарь
*args и **kwargs
- это специальные параметры в Python, которые позволяют передавать переменное количество аргументов в функцию. Параметр *args используется для передачи переменного количества аргументов без ключевого слова. Он представляет собой кортеж из всех дополнительных аргументов, переданных функции. Параметр **kwargs
используется для передачи переменного количества именованных аргументов. Он представляет собой словарь из всех дополнительных именованных аргументов, переданных функции.
Cимвол *
и **
могут использоваться в определении функций для указания переменного числа аргументов, которые могут быть переданы в функцию.
Символ * перед именем параметра означает, что все позиционные аргументы, которые не были использованы при определении других параметров, будут собраны в кортеж, который можно будет использовать внутри функции. Такой параметр называется *args. Например:
python def my_fun(a, b, *args): print(a, b, args)
Вызов функции my_fun(1, 2, 3, 4, 5) выведет на экран следующее:
python 1 2 (3, 4, 5) ~~~ Символ `**` перед именем параметра означает, что все именованные аргументы, которые не были использованы при определении других параметров, будут собраны в словарь, который можно будет использовать внутри функции. Такой параметр называется `**kwargs`. Например:python
def my_fun(a, b, **kwargs):
print(a, b, kwargs)
~~~
Вызов функции my_fun(1, 2, x=3, y=4, z=5) выведет на экран следующее:
```python
1 2 {‘x’: 3, ‘y’: 4, ‘z’: 5}
~~~
Использование
*args и **kwargs
позволяет создавать более гибкие функции, которые могут принимать любое количество аргументов.Python полностью поддерживает ООП?
Да, Python является полностью объектно-ориентированной языковой средой. Он поддерживает все основные принципы объектно-ориентированного программирования (ООП), такие как наследование, инкапсуляция и полиморфизм.
В Python все объекты в явном виде являются экземплярами классов, и даже типы данных, такие как список или словарь, являются классами со своими методами и атрибутами.
Кроме того, Python поддерживает множественное наследование, который позволяет создавать новые классы, которые наследуют методы и атрибуты от нескольких родительских классов одновременно.
В целом, Python предоставляет множество инструментов для написания кода в объектно-ориентированном стиле, и это один из главных его преимуществ, особенно для написания крупных и сложных приложений.
Что такое globals() и locals()?
globals() и locals() - это встроенные функции в Python, которые возвращают словари глобальных и локальных переменных соответственно.
globals() возвращает словарь, содержащий все глобальные переменные, доступные в текущей области видимости, включая встроенные переменные.
locals() возвращает словарь, содержащий все локальные переменные, определенные в текущей области видимости. Это включает аргументы функции и переменные, которым присвоено значение внутри функции.
Например, вот как можно использовать эти функции:
```python
x = 5
y = 10
def my_func(z):
a = 3
print(globals()) # выводит все глобальные переменные
print(locals()) # выводит все локальные переменные
my_func(7)
~~~
В этом примере функция my_func() принимает один аргумент и определяет две локальные переменные (a и z). Когда она вызывается, она выводит на экран словари глобальных и локальных переменных.
Что хранится в атрибуте __dict__?
Атрибут __dict__ содержит словарь, который хранит атрибуты объекта в виде пар ключ-значение. Этот словарь заполняется значениями при создании объекта и может быть изменен позже. Например, если у вас есть объект класса Person, и вы создаете его экземпляр person1, то вы можете добавить новый атрибут age и присвоить ему значение 25 следующим образом:
```python
class Person:
def __init__(self, name):
self.name = name
def say_hello(self):
print(“Hello, my name is”, self.name)
person1 = Person(“Alice”)
person1.age = 25
print(person1.__dict__)
~~~
Это выведет словарь, содержащий пару ключ-значение {'name': 'Alice', 'age': 25}
.
Вы можете обратиться к любому атрибуту объекта, используя либо обычную запись person1.name
, либо запись, использующую словарь python person1.\_\_dict\_\_["name"]
.