Простой тест на знание Python — вопросы

Материал из DISCOPAL
Перейти к: навигация, поиск
12345678910
Простой тест на знание Python

Вариант 4220594459.


Ваше имя*:


Вопрос 1

Может ли возникнуть deadlock в следующей программе:

import threading
 
res_A = threading.Lock()
res_B = threading.Lock()
res_C = threading.Lock()
 
def proc1():
   res_A.acquire()
   res_B.acquire()
   res_C.acquire()
   # ...
   res_C.release()
   res_B.release()
   res_A.release()
 
def proc2():
   res_A.acquire()
   res_B.acquire()
   res_C.acquire()
   # ...
   res_C.release()
   res_B.release()
   res_A.release()
 
p1 = threading.Thread(target=proc1, name="t1")
p2 = threading.Thread(target=proc2, name="t2")
p1.start()
p2.start()
p1.join()
p2.join()


  1.  нет, не возникнет
  2.  да, обязательно
  3.  да, возможно

Вопрос 2

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

0 < [1, 4][1] < 3 and None
  1.  True
  2.  False
  3.  это синтаксическая ошибка
  4.  None

Вопрос 3

Что будет выведено следующей программой?

S = 0
for i in range(1, 10):
  if i % 2 == 0:
    S = S + i 
print(S)


  1.  сообщение об ошибке
  2.  1024
  3.  10
  4.  30
  5.  20
  6.  0

Вопрос 4

Имеются следующие определения:

 
def m1(self):
  print("m1")
 
class M:
  def m2(self):
    print("m2")
 
m = M()
 


Какой из фрагментов кода содержит ошибки?


  1.   m.m1 = m1; m.m1(m)
  2.   m.m1 = m.m2; m.m1()
  3.   M.m1 = m1; m.m1()
  4.   m.m1 = m1; m.m1()

Вопрос 5

Сколько элементов будет содержать список L после выполнения следующего кода:

L = []
L.append([1,2,3])
L.insert(1, "abc")
del L[0][0]
  1.  1
  2.  4
  3.  сообщение об ошибке
  4.  2
  5.  3

Вопрос 6

Какие из перечисленных функций имеют побочные эффекты:

def A(lst):
  def AA(x):
    return lst + [x]
  return AA
 
def B(x):
  def BB(lst):
    return lst + [x]
  return BB
 
def C(x, cache={}):
  if cache.has_key(x):
    return cache[x]
  def CC(lst):
    return lst + [x]
  cache[x] = CC
  return CC
 
  1.  только B и C
  2.  только C
  3.  никакие
  4.  A, B, C

Вопрос 7

Что делает следующая программа?

import threading
l = threading.Lock()
 
def proc(nm, n=0):
  l.acquire()
  try:
    if n < 5:
      print("*", end='')
      return proc(nm, n+1)
    else:
      return nm
  finally:
    l.release() 
 
for i in range(5):
  threading.Thread(target=proc, args=(str(i),)).start()
  1.  беспрерывно печатает звездочки
  2.  печатает 5 звездочек
  3.  печатает 1 звездочку и зависает
  4.  печатает 25 звездочек
  5.  аварийно завершается при попытке выполнить l.acquire() во второй раз

Вопрос 8

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

(0 < 5 <= 3) and (0 / 0)
  1.  True (или 1)
  2.  будет возбуждено исключение ZeroDivisionError (деление на нуль)
  3.  синтаксическая ошибка
  4.  None
  5.  False (или 0)

Вопрос 9

Какой длины строки можно использовать в Python?

  1.  длины строк должны быть не больше, чем при их определении
  2.  256 символов
  3.  длина строк ограничивается имеющейся памятью
  4.  65536 символов

Вопрос 10

Как называется отношение, которое имеют следующие два класса:

 
class A(type):
  def __init__(cls, name, bases, dict):
    return super(A, cls).__init__(cls, name, bases, dict)
 
B = A("B", (), {})
 
  1.  метакласс. B является метаклассом для A
  2.  метакласс. A является метаклассом для B
  3.  наследование. B получается наследованием A
  4.  ассоциация. A содержит ссылки на B