Функции
Декораторы
Область видимости
Словари
Цикл
100

Что такое функция в Python? Каким ключевым словом она обозначается?

Это именованный блок кода, который выполняет одну задачу, может принимать аргументы и возвращать результат.

Функция обозначается ключевыми словом def.

100

Что такое декораторы и функции высшего порядка в Python?

Декоратор - это функция высшего порядка, которая нужна для того, чтобы расширить функционал функции не изменяя ее (функция-обертка). Является синтаксическим сахаром.

Функция высшего порядка - это функция, которая принимает в аргументы другую функцию, создает внутри себя функцию, вызывает и возвращает функцию.

100

Что такое локальльное, замкнутное, глобальное и встроенное пространство имен?

1. builtins(встроенное) - все, что встроено в оболочку питона (print, input, sum ...) 

2. global(глобальное) - все переменные, функции и т.д. внутри файла 

3. enclosed(замкнутное, нелокальное) - пространство, которое находится между двух других пространств (пр.: между global и local)

4. local(локальное) - может быть в некоторых моментах (функции, циклы)

100

Как создать новый ключ в словаре и присвоить ему значение?

1. название_словаря[новый_ключ] = значение

2. .setdefault(key, [defaultvalue]) -> работает как метод get, но если ключа нет, он создает пару с этим ключом и значение default_value

название_словаря.setdefault('ключ', 'значение')

100

Расскажите, как работает цикл while и цикл for?

for -> цикл, который работает только с итерируемыми объектами и заканчивает свою работу, когда дойдет до конца(пройдется по всем элементами).

while -> цикл, который работает до тех пор пока условие верно.

200

Какие виды аргументов может принимать функция? И определения аргументов.

Именнованый - по названию

Позиционный - по позиции

200

Можно ли применить несколько декораторов к одной и той же функции? И важен ли порядок их применения?

Можно. Порядок имеет значения. Декоратор, который находится ближе всех к функции отработает первым.

200

Что возвращает функция locals()?

Возвращает переменные, классы, функции и т.д из локального пространства в виде словаря. 

200

Могут ли быть 2 одинаковых ключа в словаре и что происходит со значением?

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

200

Что выведет данный код?

count = 0

while count <= 10:

    print(count)

    count += 1

0

1

2

3

4

5

6

7

8

9

10

300

Как вызывается функция и где передаются аргументы для нее?

Функция вызывается следующим образом:

func()

Аргументы функции передаются в скобках:

func(*args, **kwargs)

300

Что такое wrapper?

Функция wrapper нужна для написания доп.функционала, в нее прилетает функция, которую мы обертываем. В wrapper мы можем передать аргументы, которые нужны в функции, которую мы обертываем.

300

С помощью какого ключевого слова можно объявить глобальную переменную внутри функции? Для чего и в каких случаях используется ключевое слово nonlocal?

Глобальную переменную внутри функции можно объявить с помощью ключевого слова global.

Nonlocal - это ключевое слово, используемое внутри функций для указания, что переменная не является локальной, но и не глобальной. (Замкнутой)

300

Какими способами можно удалить значение из словаря? Чем эти способы различаются?

1. .pop(key, [message]) -> удаляет пару по ключу и возвращает значение. Если ключа не существует вовзвращает message, если не передать message бросает исключение (ошибка KeyError)

2. .popitem() -> удаляет последнюю пару в словаре и возвращает ключ и значение в виде tuple

3. del словарь[ключ] -> удаляет ключ и значение по ключу

300

Что делает оператор continue, break, pass?

continue -> переход к следующей итерации (начинает следующее прохождение цикла)

break -> выход из цикла (досрочное прерывание цикла)

pass -> заглушка (...), используется чтобы пропустить условие

400

Обязательно ли указывать return в конце функции? Что будет если не указать его?

Ключевое слово return, которое дает понять питону, что за этой командой будет какая-то информация, которая является окончательным продуктом работы функции и на этом функция заверашает свою работу. (Возвращает результат выполнения функции).

Указывать необязательно, но если не указать return функция возвращает None.

400

Что вернет эта функция?

def my_decorator(func):

    def wrapper():

        print("До вызова функции")

        func()

        print("После вызова функции")

    return wrapper


@my_decorator

def say_hello():

    print("Привет!")


say_hello()

До вызова функции

Привет!

После вызова функции

400

Что выведен следующий код?

name = 'Sandy'

def func_one():

        name = 'Andy'

        def func_two():

                name = 'Mandy'

                print(name)

                print(locals())

        func_two()

func_one()

Mandy

{'name': 'Mandy'}

400

Что делает метод fromkeys?

dict.fromkeys(seq, [value]) ->  метод создает словарь с ключами из seq(итерируемый объект) и значением value (для всех ключей одинаковое). По умолчанию value - None. Seq (последовательность) могут являться только итерируемые данные

Пр.: 

list_ = ['name', 'age', 'last_name']

dict_ = dict.fromkeys(list_, 'hello') 

print(dict_) 

Результат: {'name': 'hello', 'age': 'hello', 'last_name': 'hello'}

400

Что выполняет волшебное слово ‘else’ в цикле while и for? 

Что выведет следующий код?

i = 0

while i <= 10:

    print(i)

    if i == 12:

        break

    i += 1

else:

    print('All numbers are printed') 

Проверяет цикл доработал ли до конца без выполнения break.

Код в Else отрабатывает, если интрукция break не сработала, то есть цикл отработал полностью (Завершился естественным путем) (Завершение через break -> принудительная остановка цикла)

0

1

2

3

4

5

6

7

8

9

10

All numbers are printed

500

Что выполняет следующий код и что он возвращает?

def factorial(n):

    res = 1

    for i in range(1, n + 1):

    res *= i

    return res

print(factorial(3))

print(factorial(5))

6

120

500

Что выведет слеуюищй код?

def a_decorator_passing_arguments(function_to_decorate):

        def a_wrapper_accepting_arguments(arg1, arg2):

                print arg1, arg2

                function_to_decorate(arg1, arg2)

        return a_wrapper_accepting_arguments

@a_decorator_passing_arguments

def print_full_name(first_name, last_name):

        print "Меня зовут", first_name, last_name

print_full_name("Питер", "Венкман")

SyntaxError

500

def hello(name):

        print(locals())

hello('makers')

{'name': 'makers'}

500

Может ли ключом в словаре быть tuple с изменяемым типом данных?

Нет, не может быть. Ключом в словаре может быть только неизменяемый тип данных.

500

Как пройтись через цикл в обратном порядке (в range)?

Надо указать шаг:

for i in range(1, 10, -1)