/Colab_24_zadanie

24 дополнительная: *args **kwargs.ipynb

Primary LanguageJupyter Notebook

24 дополнительная задача: *args **kwargs.ipynb

Alt-текст

Markdown Python Pandas Confluence Git

Пример кода на Python:

# создадим функцию
def add3(*args): 
  print(sum(args))
add3()
# даже если мы не введем числа, мы все равно получим результат, без ошибки

Внимание: Рассмотрим ситуацию, если мы хотим передать в функцию список, тогда нам необходимо пометить список тоже звездочкой. Если мы не пометим звездочкой, то список будет упакован в кортеж и возникнет ошибка.

def add4(*args): 
  print(sum(args))

l = [1,2,3,4,5,6,7,8,9]

add3(*l)

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

Пример блока для Python:

def gen():
  for i in range (10+1):
    yield i

def add(*args):
  print(args)
  print(sum(args))

l = [1,2,3,4]
add(*gen())

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

Заметка: **kwargs - две звездочки означают упаковку в словарь. kwargs - это сокращение от kw - keywords, args - arguments.

def add(*args, **kwargs):
  print(kwargs)
l = [1, 2, 3]
add(*l, a="1", b="2", c="99")

Пример блока для Python:

from timeit import Timer

tmp = "Python 3.2.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)] on win32."

def case1(): # А. инкрементальные конкатенации в цикле
    s = ""
    for i in range(10000):
        s += tmp

def case2(): # Б. через промежуточный список и метод join
    s = []
    for i in range(10000):
        s.append(tmp)
    s = "".join(s)

def case3(): # В. списковое выражение и метод join
    return "".join([tmp for i in range(10000)])

def case4(): # Г. генераторное выражение и метод join
    return "".join(tmp for i in range(10000))

for v in range(1,5):
    print (Timer("func()","from __main__ import case%s as func" % v).timeit(200))