В python могу ли я создать закрытие с анонимной функцией?

Из любопытства я хотел бы посмотреть, есть ли лучший ответ, чем то, что ниже. Как я могу преобразовать это:

def counter():
    ctr = 0
    def inner():
        ctr += 1
        return ctr
    return inner
counter = counter()

в этот эквивалент javascript?

counter = (function() {
    let ctr = 0;
    return function() {
        return ++ctr;
    } //inner anonymous func
})(); //outer func, called and forgotten, sort of.

Python выше в порядке, мне просто любопытно, есть ли более быстрый/более читаемый способ сделать это.

Чтобы было ясно, я не хочу, чтобы внешняя фабричная функция была доступна после ее вызова, и я хочу, чтобы она вызывалась сразу после ее определения. Думайте об этом как о замыкающем синглтоне. Спасибо!


person user1942362    schedule 02.06.2021    source источник
comment
Тема вашего вопроса, кажется, требует решения Python, в то время как основная часть вашего вопроса, кажется, требует решения JavaScript, и, по-видимому, вы даете решение для обоих языков. В чем проблема?   -  person trincot    schedule 02.06.2021
comment
Если вы ищете код-ревью для практически работающего кода, то это больше подходит для код-ревью.   -  person trincot    schedule 02.06.2021
comment
Питон выше в порядке? Вы проверили это? ctr += 1 делает не то, что вы думаете.   -  person blhsing    schedule 02.06.2021
comment
Питон выше в порядке, нет, это не так. Это выдаст ошибку UnboundLocal. если вы действительно попытаетесь использовать counter()   -  person juanpa.arrivillaga    schedule 02.06.2021
comment
Спасибо за ваши комментарии. Я дал решение Python, которое я использовал, но хотел знать, есть ли лучший способ. Пример javascript показывает использование анонимных функций, ни у одной из них нет имени. Может быть, это код-ревью, но не уверен. Казалось, подходит здесь, и я не мог найти ответы на него.   -  person user1942362    schedule 03.06.2021