def ᅠ():
    print("Hello world!")
ᅠ()

Скопируйте этот код, и он заработает в любом редакторе с установленным интерпретатором Python. Спорим, вы будете долго думать в чём здесь подвох и как это работает.

Решение

Здесь нет никакой магии и интерпретатор тоже не сломан, просто в названии функции используется особый символ юникода: U+FFA0, для нас он выглядит как пробел, но интерпретатор читает его как обычную букву.

Комментарии (20)


  1. iWowik
    09.10.2026 14:27

    У меня в редакторе notepad не работает никак вааще!


    1. AndreyProgramMaker Автор
      09.10.2026 14:27

      Здравствуйте, спасибо за комментарий, я проверял, в VS code и Python IDLE работает безупречно.


      1. Rsa97
        09.10.2026 14:27

        Угу. У меня такая же нога и не болит. А я в свой VSCode скопировал и не работает. Правда, у меня и питона то нет. Да, и VSCode ещё и показал, что тут не так.


        1. AndreyProgramMaker Автор
          09.10.2026 14:27

          В питоне как раз и дело), для запуска Python кода нужно установить Python, изначально VS code не знает Python. На скриншоте видно, что редактор подчеркнул не ошибку, а спецсимвол, который выглядит как пробел, но читается интерпретатором, как буква


          1. Rsa97
            09.10.2026 14:27

            А как же “он заработает в любом редакторе”. Тут у вас ни слова про питон.


            1. AndreyProgramMaker Автор
              09.10.2026 14:27

              Спасибо за внимательность, уже исправил во избежание двусмысленности.


  1. Alexandroppolus
    09.10.2026 14:27

    Это ведь баг в интерпретаторе?


    1. AndreyProgramMaker Автор
      09.10.2026 14:27

      Нет, это не баг, в версии Python 3 разработчики официально добавили поддержку юникода


      1. fireSparrow
        09.10.2026 14:27

        del


      1. Alexandroppolus
        09.10.2026 14:27

        Ну я вот просто не понимаю, зачем пробельный символ считать буквой


        1. AndreyProgramMaker Автор
          09.10.2026 14:27

          Суть в том что это не пробельный символ, а разделитель корейского юникода, который помогает правильно собирать иероглифы


  1. aeder
    09.10.2026 14:27

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


    1. alcotel
      09.10.2026 14:27

      Точняк. Мало было невидимых отступов, так ещё и невидимые функции подвезли.


      1. Wesha
        09.10.2026 14:27

        Это Вы ещё спецсимвол разворота справа налево не распробовали!

        Скрытая картинка


    1. Rsa97
      09.10.2026 14:27

      Увы, не только питон этим страдает. Остаётся только использовать линтер со своими правилами, ограничивающими набор символов в идентификаторах.
      Причём, проблема то была и до юникода, например с символами одинакового начертания в кириллице и латинице.


  1. funca
    09.10.2026 14:27

    Плюсик статье за лаконичность.


    1. vkrasikov
      09.10.2026 14:27

      Минусик за слово "Теперь"


  1. MrBotikkk
    09.10.2026 14:27

    Бородатый мем, головоломка или демонстрация возможности Unicode в Python 3. Если такое использовать в реальных проектах - другие разрабы сделают очень больно(ломает линтеры,отладку) Это грубое нарушение принципов читаемости кода (PEP 8).

    python3 << 'EOF'
    def ᅠ():
        print("Hello world!")
    ᅠ()
    EOF
    python3 << 'EOF'
    def ᅠ():
        print("Hello world!")
    
    # Посмотрим все имена в текущей области видимости
    print("dir() =", dir())
    
    # Посмотрим настоящее имя функции
    print("Настоящее имя функции =", ᅠ.__name__)
    EOF


    1. Wesha
      09.10.2026 14:27

      Питонисты не боятся выстрелить себе в ногу, потому что у змей нет ног!


      1. MrBotikkk
        09.10.2026 14:27

        https://ru.wikipedia.org/wiki/Клоака
        <sarcasm>
          <sarcasm>
            У змей действительно нет ног, но клоака (аналог заднего прохода) у них есть.
          </sarcasm>
        </sarcasm>