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

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

Вариант 1424441002.


Ваше имя*:


Вопрос 1

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

a = "A"
b = "B"
a, b = b + a
print(a + b)
  1.  ВА
  2.  АВ
  3.  сообщение об ошибке в третьей строке
  4.  АВА

Вопрос 2

Для чего в регулярном выражении используется "\w"?

  1.  для обозначения буквы или цифры
  2.  для обозначения границы слова
  3.  для обозначения символа, который не является ни буквой, ни цифрой
  4.  для обозначения того, что в этом месте нет границы слова

Вопрос 3

Класс имеет метод __call__(). Какому классу он может "подражать" и как пользоваться этим методом?

 
class A:
  #...
  def __call__(self, *params, **kws):
    #...
a = A()
 


  1.  функция. Пользоваться можно так: b = a(2,3,4)
  2.  кортеж. Пользоваться можно так: a = (1, 2, 3)
  3.  список. Пользоваться можно так: a[0] = 5
  4.  кодовый объект. Пользоваться можно так: eval(a)

Вопрос 4

В каких точках программы необходимо выполнять acquire() и release() замка Z, чтобы функция f могла правильно работать в многопоточном приложении? (Как обычно, нужно минимизировать общее время, на которое запирается замок)

def f(x, y, z):
  global d1, d2
  # 1
  d1[(x, y)] = z
  # 2
  d2[z] = (x, y)
  # 3
  res = len(d2)
  # 4
  return res 


  1.  1: Z.acquire(), 2: Z.release(), Z.acquire(), 3: Z.release()
  2.  замок не нужен
  3.  1: Z.acquire(), 3: Z.release()
  4.  1: Z.acquire(), 4: Z.release()

Вопрос 5

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

(" ", )
  1.  это синтаксическая ошибка
  2.  unicode (Unicode-строка)
  3.  str (строка)
  4.  tuple (кортеж)

Вопрос 6

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

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.  печатает 25 звездочек
  2.  аварийно завершается при попытке выполнить l.acquire() во второй раз
  3.  печатает 1 звездочку и зависает
  4.  печатает 5 звездочек
  5.  беспрерывно печатает звездочки

Вопрос 7

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

import numpy as np
print(np.shape(np.array([[1, 2, 3], [4, 5, 6]])))
  1.  (3, 2)
  2.  (6,)
  3.  (3,)
  4.  (2, 3)

Вопрос 8

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

 
import threading
l = threading.RLock()
 
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.  печатает 5 звездочек
  2.  аварийно завершается при попытке выполнить l.acquire() во второй раз
  3.  беспрерывно печатает звездочки
  4.  печатает 1 звездочку и зависает
  5.  печатает 25 звездочек

Вопрос 9

Дан массив:

>>>c = array([[1,2], [2,3], [4,5]])

Чему равен срез c[1]?

  1.  array([1, 2])
  2.  array([2, 3])
  3.  array([2, 3, 5])
  4.  array([1, 2, 4])

Вопрос 10

Может ли возникнуть 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_B.release(); res_C.release(); res_A.release()
 
def proc2():
   res_B.acquire(); res_C.acquire(); res_A.acquire()
   # ...
   res_C.release(); res_B.release(); res_A.release()
 
def proc3():
   res_C.acquire(); res_A.acquire(); res_B.acquire()
   # ...
   res_A.release(); res_B.release(); res_C.release()
 
p1 = threading.Thread(target=proc1, name="t1")
p2 = threading.Thread(target=proc2, name="t2")
p3 = threading.Thread(target=proc3, name="t3")
p1.start(); p2.start(); p3.start()
p1.join(); p2.join(); p3.join();
 


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