Как вывести информацию о переменных функции? количество, названия, значения?

Еще один интересный вопрос на аттестацию по знанию внутреннего устройства функций.

def foo(a,b,c):
     x=1
     return x*a*b*c
 
# Вывести названия переменных, которые используются в функции
print foo.func_code.co_varnames
('a', 'b', 'c', 'x')
# Вывести значения, которые определены
print foo.func_code.co_consts
(None, 1)
# Вывести количество принимаемых аргументов функции
print foo.func_code.co_argcount
3

Пример реализации Singleton python

Пример порождающего паттерна singletoon на python

Основная мысль:
1. Гарантирует, что у класса есть только один экземпляр!
2. Предоставляет глобальную точку доступа (в отличии от переменных, их можно переписывать)

По сути нужно перекрыть метод, который создает объект __new__

class Singleton(object):

    def __new__(cls):
        # Перекрываем создание объекта класса
        if not hasattr(cls, 'instance'):
            cls.instance = super(Singleton, cls).__new__(cls)
        return cls.instance


s = Singleton()
print id(s)
print s

b = Singleton()
print id(b)
print b

print (s is b)

# Вывод:
# 140425907838864
# <__main__.Singleton object at 0x7fb7745a9f90>
# 140425907838864
# <__main__.Singleton object at 0x7fb7745a9f90>
# True

Как написать генератор на python

Одна из задач на собеседование:
«Написать функцию генератор значений от 0 до 2»

def generator():
    num = 0
    while num <= 2:
        yield num
        num += 1


mygen = generator()
for i in mygen:
    print i

Yield это ключевое слово, которое используется примерно как return — отличие в том, что функция вернёт генератор.

Пример использования collections в pyton

Довольно частая задача с подсчетом самых часто встречаемых значений в строке/списке для джуниор-разработчика превращается в костылинг и велосипединг.
Нам поможет collections!

from collections import Counter

x = [1, 3, 4, 5, 6, 7, 0, 1, 3]
a = 'python attestation'

print Counter(a).most_common()
print Counter(x).most_common()

В данном случае вывод такой:

[('t', 5), ('a', 2), ('o', 2), ('n', 2), (' ', 1), ('e', 1), ('i', 1), ('h', 1), ('p', 1), ('s', 1), ('y', 1)]
[(1, 2), (3, 2), (0, 1), (4, 1), (5, 1), (6, 1), (7, 1)]