LINUX.ORG.RU

История изменений

Исправление tailgunner, (текущая версия) :

Охуеть замыкание

Тебе нужен был счетчик - вот тебе счетчик.

Ты пропатчил функцию-объект, тем самым вытащив наружу контекст

Ты настолько тупой, что не понял примера? Там «пропатчить» можно incr, никаких проблем.

def counter(initval):
  def incr():
   incr.val += 1
   return incr.val
  incr.val = initval
  return incr
c1 = counter(0)
c2 = counter(0)
print c1()
print c1()
print c2()

incr - локальный объект, имею право «патчить».

Впрочем, после твоего «хуюпс, это легаси говно» твой запрет использовать nonlocal выглядит слегка лицемерным, так что получи и распишись:

def counter(val):
  def incr():
   nonlocal val
   val += 1
   return val
  return incr

Пфф. Это эпический факап? Бозе мой, бозе мой.

Пфф. Это он и есть.

Самое эпичное здесь - попытки делать на основе этой мелочи выводы глобального масштаба и глобальной глупости.

грязные гвидоопущи

Без примеров кода - беспомощное кукареканье.

Исходная версия tailgunner, :

Охуеть замыкание

Тебе нужен был счетчик - вот тебе счетчик.

Ты пропатчил функцию-объект, тем самым вытащив наружу контекст

Ты настолько тупой, что не понял примера? Там «пропатчить» можно incr, никаких проблем.

def counter(initval):
  def incr():
   incr.val += 1
   return incr.val
  incr.val = initval
  return incr
c1 = counter(0)
c2 = counter(0)
print c1()
print c1()
print c2()

incr - локальный объект, имею право «патчить».

Впрочем, после твоего «хуюпс, это легаси говно» твой запрет использовать nonlocal выглядит слегка лицемерным, так что получи и распишись:

def counter(val):
  def incr():
   nonlocal val
   val += 1
   return val
  return incr

грязные гвидоопущи

Без примеров кода - беспомощное кукареканье.