Самые распространенные вопросы и ответы на собеседованиях по Python в 2018 году (часть 1)

искусственный интеллект Python интервью Flask
Самые распространенные вопросы и ответы на собеседованиях по Python в 2018 году (часть 1)

Новички в Python должны быть знакомы с основами Python, прежде чем искать работу по программированию на Python. Техническая команда веб-сайта по программированию DataFlair поделилась подборкой наиболее распространенных вопросов для собеседования по Python в 2018 году, включая основные вопросы для собеседования по Python и вопросы для расширенной версии, которые помогут вам подготовиться к собеседованию. Все вопросы сопровождаются ответами. Вопросы интервью охватывают такие темы, как кодирование, структуры данных и сценарии. Эта статья является предыдущей.

Вопрос 1: Каковы особенности и преимущества Python?

Python как язык программирования начального уровня имеет следующие особенности и преимущества:

  • объяснимый
  • с динамическими характеристиками
  • объектно-ориентированный
  • Лаконично и просто
  • открытый источник
  • Имеет сильную поддержку сообщества

Конечно, на самом деле преимуществ Python намного больше.Вы можете прочитать этот документ, чтобы узнать больше о:

кликните сюда

Вопрос 2. В чем разница между глубоким и поверхностным копированием?

Ответ: Глубокая копия — это копирование одного объекта в другой объект, что означает, что если вы вносите изменения в копию объекта, это не повлияет на исходный объект. В Python мы используем функцию deepcopy() для выполнения глубокого копирования, импортируя копию модуля следующим образом:

>>> import copy
>>> b=copy.deepcopy(a)

Поверхностная копия — это копирование ссылки одного объекта на другой объект, поэтому, если мы внесем изменения в копию, это повлияет на исходный объект. Мы используем функцию function() для выполнения мелкой копии следующим образом:

>>> b=copy.copy(a)

В 3. В чем разница между списком и кортежем?

Ответ. Основное различие между ними состоит в том, что списки изменяемы, а кортежи неизменяемы. Например, следующим образом:

>>> mylist=[1,3,3]
>>> mylist[1]=2
>>> mytuple=(1,3,3)
>>> mytuple[1]=2
Traceback (most recent call last):
File "<pyshell#97>", line 1, in <module>
mytuple[1]=2

Появится следующая ошибка:

TypeError: ‘tuple’ object does not support item assignment

Подробнее о списках и кортежах можно узнать здесь:

кликните сюда

С Q4 по Q20 — это основные вопросы интервью по Python для новичков, но опытные люди также могут просмотреть эти вопросы и просмотреть основные концепции.

Вопрос 4. Объясните тернарный оператор в Python

В отличие от C++, у нас нет ?: в Python, но есть вот это:

[on true] if [expression] else [on false]

Если выражение истинно, выполните оператор в [при истинности]. В противном случае выполняется оператор в [on false].

Вот как это использовать:

>>> a,b=2,3
>>> min=a if a<b else b
>>> min

результат операции:

2
>>> print("Hi") if a<b else print("Bye")

результат операции:

Hi

В 5. Как реализовать многопоточность в Python?

Поток — это легковесный процесс, а многопоточность позволяет нам выполнять несколько потоков одновременно. Все мы знаем, что Python — это многопоточный язык со встроенным набором инструментов для многопоточности.

GIL (глобальная блокировка интерпретатора) в Python гарантирует, что один поток выполняется одновременно. Один поток сохраняет GIL и что-то делает, прежде чем передать его следующему потоку, что создает иллюзию параллельной работы. Но на самом деле это просто потоки, которые по очереди работают на ЦП. Конечно, все передачи будут увеличивать нагрузку на память при выполнении программы.

Вопрос 6. Объясните наследование в Python

Когда класс наследуется от другого класса, он называется подклассом/производным классом, который наследуется от родительского класса/базового класса/суперкласса. Он наследует/получает все члены класса (свойства и методы).

Наследование позволяет нам повторно использовать код и упрощает создание и поддержку приложений. Python поддерживает следующие виды наследования:

  • Одиночное наследование: класс наследуется от одного базового класса.
  • Множественное наследование: класс наследуется от нескольких базовых классов.
  • Многоуровневое наследование: класс наследуется от одного базового класса, который наследуется от другого базового класса.
  • Иерархическое наследование: несколько классов наследуются от одного базового класса.
  • Гибридное наследование: сочетание двух или более типов наследования. Подробнее о наследовании см.

кликните сюда

В 7. Что такое Flask?

Flask — это легкий фреймворк для веб-приложений, написанный на Python. Его инструментарий WSGI использует Werkzeug, а механизм шаблонов использует Jinja2. Flask использует лицензию BSD. Две зависимости от среды — Werkzeug и jinja2, что означает, что ему не нужно зависеть от внешних библиотек. Из-за этого мы называем его облегченным фреймворком.

Сеансы Flask используют подписанные файлы cookie, чтобы пользователи могли просматривать и изменять содержимое сеанса. Он регистрирует информацию от одного запроса к другому. Однако для изменения сеанса у пользователя должен быть ключ Flask.secret_key.

В 8. Как в Python осуществляется управление памятью?

Python имеет частное пространство кучи для хранения всех объектов и структур данных. Как разработчики, у нас нет к нему доступа, им управляет интерпретатор. Но с помощью основного API мы можем получить доступ к некоторым инструментам. Диспетчер памяти Python управляет распределением памяти.

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

Вопрос 9. Объясните функции help() и dir() в Python

Функция Help() — это встроенная функция для просмотра подробного описания назначения функции или модуля:

>>> import copy
>>> help(copy.copy)

Текущий результат:

Help on function copy in module copy:

 
 
copy(x)
 
Shallow copy operation on arbitrary Python objects.
 
See the module’s __doc__ string for more info.

Функция Dir() также является встроенной функцией Python. Когда функция dir() не принимает параметров, она возвращает список переменных, методов и определенных типов в текущей области видимости; когда она принимает параметры, она возвращает список атрибутов и методов параметров.

В следующем примере показано, как использовать каталог:

>>> dir(copy.copy)

Текущий результат:

[‘__annotations__’, ‘__call__’, ‘__class__’, ‘__closure__’, ‘__code__’, ‘__defaults__’, ‘__delattr__’, ‘__dict__’, ‘__dir__’, ‘__doc__’, ‘__eq__’, ‘__format__’, ‘__ge__’, ‘__get__’, ‘__getattribute__’, ‘__globals__’, ‘__gt__’, ‘__hash__’, ‘__init__’, ‘__init_subclass__’, ‘__kwdefaults__’, ‘__le__’, ‘__lt__’, ‘__module__’, ‘__name__’, ‘__ne__’, ‘__new__’, ‘__qualname__’, ‘__reduce__’, ‘__reduce_ex__’, ‘__repr__’, ‘__setattr__’, ‘__sizeof__’, ‘__str__’, ‘__subclasshook__’]

В 10. При выходе из Python вся память освобождается?

Ответ - нет. Модули, которые циклически ссылаются на другие объекты или объекты, на которые есть ссылки из глобального пространства имен, не освобождаются полностью при выходе из Python.

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

В 11. Что такое исправление обезьяны?

Динамически изменять класс или модуль во время выполнения.

>>> class A:
    def func(self):
        print("Hi")
>>> def monkey(self):
print "Hi, monkey"
>>> m.A.func = monkey
>>> a = m.A()
>>> a.func()

Текущий результат:

Hi, Monkey

В 12. Что такое словарь в Python?

Словарь — это то, чего нет в таких языках программирования, как C++ и Java, у него есть пары ключ-значение.

>>> roots={25:5,16:4,9:3,4:2,1:1}
>>> type(roots)
<class 'dict'>
>>> roots[9]

Текущий результат:

3

Словарь неизменен, и мы также можем создать его с пониманием.

>>> roots={x**2:x for x in range(5,0,-1)}
>>> roots

результат операции:

{25: 5, 16: 4, 9: 3, 4: 2, 1: 1}

Вопрос 13. Объясните, пожалуйста, смысл использования *args и **kwargs

Мы используем *args, когда не знаем, сколько аргументов нужно передать функции, например, когда мы передаем список или кортеж.

>>> def func(*args):
    for i in args:
        print(i)  
>>> func(3,2,1,4,7)

Текущий результат:

3
 
2
 
1
 
4
 
7

Используйте **kwargs для сбора аргументов ключевого слова, когда мы не знаем, сколько аргументов ключевого слова нужно передать.

>>> def func(**kwargs):
    for i in kwargs:
        print(i,kwargs[i])
>>> func(a=1,b=2,c=7)

Текущий результат:

a.1
 
b.2
 
c.7

14. Пожалуйста, напишите логику Python для подсчета количества заглавных букв в файле.

>>> import os

>>> os.chdir('C:\\Users\\lifei\\Desktop')
>>> with open('Today.txt') as today:
    count=0
    for i in today.read():
        if i.isupper():
            count+=1
print(count)

результат операции:

26

В 15. Что такое отрицательный индекс?

Давайте сначала создадим такой список:

>>> mylist=[0,1,2,3,4,5,6,7,8]

Отрицательная индексация отличается от положительной тем, что поиск выполняется справа.

>>> mylist[-3]

результат операции:

6

Его также можно использовать для нарезки в списках:

>>> mylist[-6:-1]

результат:

[3, 4, 5, 6, 7]

В 16. Как перетасовать элементы списка с помощью операций на месте?

Для этого мы импортируем функцию shuffle() из модуля random.

>>> from random import shuffle
>>> shuffle(mylist)
>>> mylist

результат операции:

[3, 4, 8, 0, 5, 7, 6, 2, 1]

Вопрос 17. Объясните функции join() и split() в Python

Join() позволяет нам добавлять указанные символы в строку.

>>> ','.join('12345')

результат операции:

‘1,2,3,4,5’

Split() позволяет нам разделить строку по указанному символу.

>>> '1,2,3,4,5'.split(',')

результат операции:

[‘1’, ‘2’, ‘3’, ‘4’, ‘5’]

В 18. Является ли Python чувствительным к регистру?

Если такие идентификаторы, как myname и Myname, можно различить, то регистр учитывается. То есть, он заботится о верхнем и нижнем регистре. Мы можем попробовать это с Python:

>>> myname='Ayushi'
>>> Myname
Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>

результат операции:

Myname

NameError: name ‘Myname’ is not defined

Как видите, здесь есть ошибка NameError, поэтому Python чувствителен к регистру.

В 19. Какой длины может быть идентификатор в Python?

В Python идентификаторы могут быть любой длины. Кроме того, мы должны соблюдать следующие правила при именовании идентификаторов:

  1. Может начинаться только с подчеркивания или буквы в A-Z/a-z

  2. Остальные могут использовать A-Z/a-z/0-9

  3. деликатный случай

  4. Ключевые слова нельзя использовать в качестве идентификаторов.В Python есть следующие ключевые слова:

В 20. Как удалить начальные пробелы в строке?

Ведущий пробел в строке — это пробел, который появляется перед первым символом, не являющимся пробелом в строке. Мы можем удалить его из строки с помощью метода Istrip().

>>> '   Ayushi '.lstrip()

результат:

‘Ayushi   ’

Как видите, строка содержит как начальные символы, так и суффиксные символы, а вызов Istrip() удаляет начальные пробелы. Если мы хотим удалить конечные пробелы, мы используем метод rstrip().

>>> '   Ayushi '.rstrip()

результат:

‘   Ayushi’

С Q 21 по Q 35 — расширенные вопросы для собеседования по Python для тех, кто имеет опыт работы с Python.

В 21. Как преобразовать строку в нижний регистр?

Мы используем метод lower().

>>> 'AyuShi'.lower()

результат:

‘ayushi’

Его можно преобразовать в верхний регистр с помощью метода upper().

>>> 'AyuShi'.upper()

результат:

‘AYUSHI’

Кроме того, используйте методы isupper() и islower(), чтобы проверить, является ли пружина символов прописной или строчной.

>>> 'AyuShi'.isupper()
False
 
>>> 'AYUSHI'.isupper()
True
 
>>> 'ayushi'.islower()
True
 
>>> '@yu$hi'.islower()
True
 
>>> '@YU$HI'.isupper()
True

Что ж, такие символы, как @ и $, подходят как для прописных, так и для строчных букв.

Istitle() может сказать нам, имеет ли строка формат заголовка.

>>> 'The Corpse Bride'.istitle()
True

В 22. Что такое оператор pass в Python?

При написании кода на Python иногда вы можете не думать о том, как написать функцию, только написать объявление функции, но для того, чтобы обеспечить правильный синтаксис, вы должны что-то ввести, в этом случае мы будем использовать оператор pass.

 >>> def func(*args):
           pass 
>>>

Точно так же оператор break позволяет нам выйти из цикла.

>>> for i in range(7):
    if i==3: break
print(i)

результат:

0
 
1
 
2

Наконец, оператор continue позволяет нам перейти к следующему циклу.

>>> for i in range(7):
    if i==3: continue
print(i)

результат:

0
 
1
 
2
 
4
 
5
 
6

В 23. Что такое замыкание в Python?

Когда вложенная функция ссылается на значение в своей внешней области, вложенная функция является замыканием. Смысл в том, что это значение будет записано.

>>> def A(x):
    def B():
        print(x)
    return B
>>> A(7)()

результат:

7

Для получения дополнительной информации о закрытии см. здесь:

кликните сюда

Вопрос 24. Объясните операторы //, % и ** в Python

// оператор выполняет нижнее деление (округление в меньшую сторону), которое возвращает целую часть результата деления.

>>> 7//2
3

Деление здесь вернет 3,5.

Так же,Выполнить возведение в степень. аb возвращает a, возведенное в степень b.

>>> 2**10
1024

Наконец, % выполняет операцию по модулю, возвращая остаток от деления.

>>> 13%7
6
>>> 3.5%1.5
0.5

В 25. Сколько операторов в Python? Объясните арифметические операторы.

В Python у нас есть 7 видов операторов: арифметические операторы, операторы отношения, операторы присваивания, логические операторы, побитовые операторы, операторы принадлежности, операторы тождества.

У нас есть 7 арифметических операторов, которые позволяют выполнять арифметические операции над числами:

1. Знак плюс (+), добавляющий два значения

>>> 7+8
15

2. Знак минус (-), который вычитает второе значение из первого значения.

>>> 7-8
-1

3. Знак умножения (*), умножить два значения

>>> 7*8
56

4. Разделите знак (/), разделите второе значение на первое значение

>>> 7/8
0.875
>>> 1/1
1.0

5. Разделить по модулю и возвести в степень вниз, см. предыдущий вопрос.

Вопрос 26. Объясните реляционные операторы в Python

Операторы отношения используются для сравнения двух значений.

1. Знак «меньше» (

>>> 'hi'<'Hi'
False

2. Знак больше (>), если значение слева больше, возвращается True.

>>> 1.1+2.2>3.3
True

3. Знак "меньше" или "равно" (

>>> 3.0<=3
True

4. Знак "больше" или "равно" (>=) возвращает True, если значение слева больше или равно значению справа.

>>> True>=False
True
  1. Знак равенства (==) возвращает True, если значения по обе стороны от знака равны.
>>> {1,3,2,2}=={1,2,3}
True
  1. Знак неравенства (!=) возвращает True, если значения по обе стороны от знака не равны.
>>> True!=0.1
True
>>> False!=0.1
True

Вопрос 27. Объясните оператор присваивания в Python

Это важный вопрос на собеседовании по Python.

Мы показываем все арифметические операторы и присваивания вместе:

>>> a=7
>>> a+=1
>>> a
8
 
>>> a-=1
>>> a
7
 
>>> a*=2
>>> a
14
 
>>> a/=2
>>> a
7.0 
 
>>> a**=2
>>> a
49
 
>>> a//=3
>>> a
16.0
 
>>> a%=4
>>> a
0.0

Вопрос 28. Объясните логические операторы в Python

В Python есть 3 логических оператора: and, or, not.

>>> False and True
False
 
>>> 7<7 or True
True
 
>>> not 2==2
False

Вопрос 29. Объясните операторы-члены в Python

С операторами-членами «in» и «not in» мы можем подтвердить, является ли значение членом другого значения.

>>> 'me' in 'disappointment'
True
 
>>> 'us' not in 'disappointment'
True

Вопрос 30. Объясните оператор идентификации в Python.

Это также часто задаваемый вопрос на собеседованиях по Python.

С операторами идентичности «есть» и «не является» мы можем подтвердить, что два значения одинаковы.

>>> 10 is '10'
False
 
>>> True is not False
True

Вопрос 31. Расскажите о побитовых операторах в Python.

Этот оператор работает со значениями в двоичных битах.

  1. И (&), побитовый оператор И: в операции участвуют два значения, если оба соответствующих бита равны 1, результат бита равен 1, иначе он равен 0
>>> 0b110 & 0b010
2

2. Или (|), оператор побитового ИЛИ: пока один из двух соответствующих двоичных битов равен 1, результирующий бит равен 1.

>>> 3|2
3

3. XOR (^), побитовый оператор XOR: когда два соответствующих двоичных бита различны, результат равен 1.

>>> 3^2
1

4. Инверсия (~), оператор побитовой инверсии: инвертирует каждый двоичный бит данных, то есть изменяет 1 на 0 и изменяет 0 на 1.

>>> ~2
-3

5. Сдвиг влево (

>>> 1<<2
4

6. Сдвиг вправо (>>), сдвиг всех двоичных разрядов операнда слева от «>>» на количество битов, а число справа от >> указывает количество битов для перемещения

>>> 4>>2
1

Для получения дополнительной информации об операторах см. здесь:

кликните сюда

В 32. Как использовать несколько базовых чисел в Python?

В Python мы можем использовать двоичные, восьмеричные и шестнадцатеричные числа в дополнение к десятичным.

  1. Двоичные числа состоят из 0 и 1, и мы используем префикс 0b или 0B для обозначения двоичных чисел.
>>> int(0b1010)
10

2. Используйте функцию bin() для преобразования числа в двоичную форму.

>>> bin(0xf)
‘0b1111’

3. Восьмеричное число состоит из цифр 0-7, а префикс 0o или 0O используется для представления восьмеричного числа.

>>> oct(8)
‘0o10’

4. Шестнадцатеричное число состоит из цифр от 0 до 15, а шестнадцатеричное число представлено префиксом 0x или 0X.

>>> hex(16)
‘0x10’
 
>>> hex(15)
‘0xf’

Q 33. Как получить список всех ключей словаря?

Используйте keys(), чтобы получить все ключи в словаре

>>> mydict={'a':1,'b':2,'c':3,'e':5}
>>> mydict.keys()
dict_keys(['a', 'b', 'c', 'e'])

В 34. Почему не рекомендуется начинать идентификатор со знака подчеркивания

Поскольку в Python нет концепции закрытых переменных, соглашение заключается в том, чтобы объявлять переменную как частную, начиная с символа подчеркивания. Поэтому, если вы не хотите делать переменную приватной, не начинайте с подчеркивания.

В 35. Как объявить несколько переменных и присвоить им значение?

Есть два способа:

>>> a,b,c=3,4,5 #This assigns 3, 4, and 5 to a, b, and c respectively
>>> a=b=c=3 #This assigns 3 to a, b, and c

Q 36. Что такое распаковка кортежей?

Сначала рассмотрим распаковку:

>>> mytuple=3,4,5
>>> mytuple
(3, 4, 5)

Это оборачивает 3, 4, 5 в кортеж mytuple.

Теперь распаковываем эти значения в переменные x, y, z:

>>> x,y,z=mytuple
>>> x+y+z

получить результат 12.

Эпилог

Выше приведены некоторые распространенные вопросы и ответы на интервью по Python. Мы поделимся другими вопросами в следующей статье. Добро пожаловать, обратите внимание.