The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

В 3.6% протестированных Python-репозиториев выявлены ошибки, связанные с пропущенными запятыми

08.01.2022 08:19

Опубликованы результаты исследования подверженности кода на языке Python ошибкам, связанным с некорректным использованием запятых в коде. Проблемы вызваны тем, что при перечислениях Python автоматически объединяет строки в списке, если они не разделены запятой, а также обрабатывает значение как кортеж, если после значения следует запятая. Проведя автоматизированный анализ 666 GitHub-репозиториев с кодом на языке Python, исследователи выявили возможные проблемы с запятыми в 5% изученных проектов.

Дальнейшая ручная проверка показала, что реальные ошибки присутствуют только в 24 репозиториях (3.6%), а остальные 1.4% являются ложными срабатываниями (например, запятая могла быть специально пропущена между строками для объединения разбитых на несколько строк файловых путей, длинных хэшей, HTML-блоков или SQL-выражений). Примечательно, что в числе 24 репозиториев с реальными ошибками оказались такие крупные проекты, как Tensorflow, Google V8, Sentry, Pydata xarray, rapidpro, django-colorfield и django-helpdesk. При этом проблемы с запятыми не специфичны для Python и часто всплывают в проектах на C/C++ (примеры недавних исправлений - LLVM, Mono, Tensorflow).

Основные виды изученных ошибок:

  • Случайно пропущенная запятая в списках, кортежах и множествах, приводящая к объединению строк вместо их интерпретации как отдельных значений. Например, в Sentry в одном из тестов была пропущена запятая между строками "releases" и "discover" в списке, что привело к проверке несуществующего обработчика "/releasesdiscover", вместо раздельной проверки "/releases" и "/discover".

    Другой пример - пропущенная запятая в rapidpro приводила к объединению двух разных правил в строке 572:

  • Пропущенная запятая в конце определения кортежа из одного элемента, приводящая к тому, что в ходе присвоения будет присвоен не кортеж, а обычный тип. Например, выражение "values = (1,)" приведёт к присвоению переменной кортежа из одного элемента, но "values = (1)" приведёт к присвоению целого типа. Скобки в указанных присвоениях не влияют на определение типа и являются необязательными, а наличие кортежа определяется парсером только на основе наличия запятых.
     
       REST_FRAMEWORK = {
           'DEFAULT_PERMISSION_CLASSES': (
               'rest_framework.permissions.IsAuthenticated' # вместо кортежа будет присвоена строка.
           )
       }
    
  • Обратная ситуация - лишние запятые при присвоении. Если в конце присвоения случайно оставлена запятая, то в качестве значения вместо обычного типа будет присвоен кортеж (например, если вместо "value = 1" указано "value = 1,").


  1. Главная ссылка к новости (https://news.ycombinator.com/i...)
  2. OpenNews: Ценой перевода Mercurial на Python 3 может стать шлейф непредвиденных ошибок
  3. OpenNews: Стратегия параллельного поддержания веток Python 2 и Python 3 оказалась ошибочной
  4. OpenNews: В каталоге PyPI выявлены вредоносные библиотеки, использующие CDN PyPI для скрытия канала связи
  5. OpenNews: Уязвимость в Python, проявляющаяся при обработке непроверенных дробных чисел в ctypes
  6. OpenNews: Применение тайпсквоттинга для распространения вредоносных модулей NPM, PyPI и Gems
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/56470-python
Ключевые слова: python, bug
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (145) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 10:43, 08/01/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • –7 +/
    Это вам не сишка!
     
     
  • 2.7, Аноним (7), 10:58, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • +10 +/
    ирония в том, что стандартный интерпретатор написан на Си, и очень много питоновских фич работают шустро благодаря именно его оптимизации
     
     
  • 3.97, rshadow (ok), 19:42, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Да большинство языков так. А потом делают отдельный проект с реализацией интерпретатора языка на самом же языке.
     
  • 3.109, Здрасьте (?), 21:45, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • –3 +/
    PyPy написан на Пайтоне и работает быстрее того, что написан на Си.
     
     
  • 4.123, trdm (ok), 09:09, 09/01/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    да никогда такого не будет и не было.
     
  • 4.136, Мира (ok), 18:48, 09/01/2022 [^] [^^] [^^^] [ответить]  
  • –2 +/
    PyPy не написан на Python. Он написан на RPython, который транслирован в C и скомпилирован.
     
     
  • 5.137, Аноним (-), 19:23, 09/01/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > PyPy не написан на Python. Он написан на RPython, который транслирован в C и скомпилирован.

    Ыксперты, мля ...
    PyPy JIT написан на подмножестве питона (RPython), который напрямую генерирует машинный код:
    https://github.com/reingart/pypy/blob/master/rpython/jit/backend/x86/assembler



    if IS_X86_64:
                mc.MOV_rs(esi.value, WORD*2)
                # push first arg
                mc.MOV_rr(edi.value, ebp.value)
                align = callbuilder.align_stack_words(1)
                mc.SUB_ri(esp.value, (align - 1) * WORD)

     
  • 3.116, vitalif (ok), 01:05, 09/01/2022 [^] [^^] [^^^] [ответить]  
  • –3 +/
    шустро cpython не работает. он раз в 10 медленнее node.js. шустро работает только pypy
     
     
  • 4.119, myhand (ok), 04:09, 09/01/2022 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Моя думать, что твоя всерьез целочисленную арифметику не использовал.  Твоя поймет как pypy может сосать.
     
  • 4.125, n00by (ok), 12:02, 09/01/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Мне тут разрекламировали этот PyPy, на синтетическом тесте показал ощутимый прирост. Перевёл на него emerge в Gentoo, не заметил разницы. Решил, что руки у меня кривые. Но нет, это так и у всех, всего на 35% ускоряет https://blogs.gentoo.org/mgorny/2020/10/06/speeding-up-emerge-depgraph-calcula
     
     
  • 5.132, vitalif (ok), 15:38, 09/01/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ну всё правильно, tracing jit... Прирост максимальный там, где один и тот же блок кода выполняется очень много раз. Ноду не переплюнут, гугл хорошо постарался :-)
     
     
  • 6.147, n00by (ok), 11:55, 10/01/2022 [^] [^^] [^^^] [ответить]  
  • +/
    emerge это утилита для "установки пакетов" типа apt. Строит граф зависимостей и обсчитывает его рекурсивно, то есть в цикле.
     
  • 2.21, Анонн (?), 11:43, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • +14 +/
    Ты кроме заголовка ничего не читал?
    Прямо же в новости написано "При этом проблемы с запятыми не специфичны для Python и часто всплывают в проектах на C/C++" и ссылки на фиксы! Зато первым отметился...
     
     
  • 3.34, Аноним (34), 13:10, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • +15 +/
    90% комментаторов тут такие, даже противно стало заходить в комменты.
     
     
  • 4.95, Аноним (95), 19:30, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > стало

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

     
  • 3.44, Аноним (-), 13:34, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • –2 +/
    проблемы с запятыми в си сильно зависят от компиляторов, в неправильных компиляторах часто пробел как ошибка
     
     
  • 4.46, Аноним84701 (ok), 13:39, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • +9 +/
    >> Случайно пропущенная запятая в списках, кортежах и множествах, приводящая к объединению строк вместо их интерпретации как отдельных значений
    > проблемы с запятыми в си сильно зависят от компиляторов, в неправильных компиляторах часто пробел как ошибка




    $ echo '#include<stdio.h>                                                        
    int main(void) { return  puts("привет" "анонимно""параллельный" "мир");}'| gcc -Wall -Wextra -xc -oнашареальность - && ./нашареальность
    приветанонимнопараллельныймир



    (ISO/IEC 9899:TC3): " 6. Adjacent string literal tokens are concatenated."

    Хорошо вам там, в параллельной вселенной! А в нашей реальности все немного по другому :(

     
     
  • 5.57, Аноним (57), 14:28, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • –7 +/
    Да ты ещё трусы на голову надень, чтобы тебе удобней было, и всё будет хорошо, но только для тебя.

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

     
     
  • 6.62, Аноним84701 (ok), 14:41, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • +6 +/
    >>> в неправильных компиляторах часто пробел как ошибка
    >> цитата ISO C99 плюс простейший пример прямо в шелл
    > Да ты ещё трусы на голову надень, чтобы тебе удобней было, и всё будет хорошо, но только для тебя.

    Спешу Вас огорчить -- в нашей реальности ношение трусов на голове как-то не способствует изменению стандарта ЯП.
    Так что Ваш опыт нам не подходит, увы :(

    > Никогда не пиши код, который оформлен, как в твоём примере, ибо это признак того, что программист - чудак на букву "м"

    Какая унылая попытка перевести стрелки ...

     
  • 6.126, n00by (ok), 12:08, 09/01/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Лучше бы написали, что там return лишний, а стало быть множество электронов напрасно пострадало от эксперимента. ;)
     
  • 5.68, Аноним (68), 15:05, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Справедливости ради, с puts() ошибиться не получится - запятые она не примет. И с printf тоже - количество стрингов, если пропустить запятые, не будет совпадать с тем, что в строке-шаблоне.
    А вот в питоне беда с этими кортежами и массивами. Вот из недавнего:
    Image.open(fname).convert(mode) вернёт 3х мерный массив, если mode='RGB', и двухмерный, если mode='L'. Где логика?
     
     
  • 6.77, Аноним84701 (ok), 15:45, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Ну, в новости приведены вполне реальные примеры ошибок https github com Ehsan... большой текст свёрнут, показать
     
  • 6.96, Ordu (ok), 19:38, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Не примет, да Похрен Ругнётся варнингом, но скомпилирует В функцию с эллипсис... большой текст свёрнут, показать
     
  • 6.100, Anonymoustus (ok), 19:57, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > с puts() ошибиться

    Опытные собаководы рекомендуют функции на f:

    [CODE]
    fputs()

    fscanf()

    fprintf()

    [/CODE]

    и т. п.

     
  • 5.79, pavlinux (ok), 16:09, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Детская попытка высера.
    > puts("привет"

    ...

    В C можно нах...ячить так, что ни одни парсер, анализатор, человек не вдуплят.    




    #include<stdio.h>

    int main(void) {

    int value = 1;
    return  printf("value %d" "value+1 %d", "value +2 %d\n", value, value+1, value+2);
    }



    $ ./a.out
    value -412667900 value+1 1


    Рекомендую для старта: grep -R va_list /usr/include/  
    А не выёб... гуглением стандартов.


     
     
  • 6.81, Аноним (81), 16:18, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Ты просто усложнил пример, не показав ничего нового. Зато как наехать так сразу.
     
  • 6.83, Аноним84701 (ok), 16:24, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • +/
    code include stdio h int main void int value 0 return pr... большой текст свёрнут, показать
     
     
  • 7.84, pavlinux (ok), 16:28, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > Рекомендую перед

    Я ж говорю, завязывай с дpoчиловом на идеальный мир ...
    Сходи на хитбаб, ознакомься как в реaльном мире живут  с -W -Wall -Wextra  -petantic -ansi -Wstrict- .... итп


    Такой муйнёй занимаются только домашние хелловордисты. :D

    Когда у тебя в проекте заняты 50 человек, 5-6 языков, три платформы, 4 аппаратные арх.
    личные тикеты расписаны до ноября 2022 года ... те не до рассматривания срача от -Wall -Wextra  

     
     
  • 8.86, Аноним84701 (ok), 16:36, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Я ж говорю, завязывай с чтением с помощью афедрона -- тебе в новости уже привели... текст свёрнут, показать
     
  • 8.98, user (??), 19:44, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Что мешает добавить второй способ сборки и спокойно там ковыряться когда время е... текст свёрнут, показать
     
  • 6.111, _kp (ok), 22:01, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • +/
    int main[-1]; //это корректный однострочник на Си с интересным эффектом ;)
     
  • 5.99, Anonymoustus (ok), 19:54, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Однострочники на Сишечке — это прекрасно!
     
  • 3.56, Аноним (57), 14:26, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Это каким дундуком надо быть, чтобы на Си не ставить запятые? У Си вообще самый удобный синтаксис, просто писать на нём надо так, чтобы программа была прозрачной, а не хитровыеб-ной, чтоб "никто не догадался".

    Лгут эти тестировщики.

     

     ....большая нить свёрнута, показать (32)

  • 1.2, макпыф (ok), 10:46, 08/01/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    > Проведя анализ 666 GitHub-репозиториев

    Они сатанисты?

     
     
  • 2.15, Аноним (15), 11:25, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • +28 +/
    Хуже, они — питонисты.
     
     
  • 3.39, uis (ok), 13:27, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Дьявол кроется в мелочах. Возможно они латентные растоманы.
     
  • 3.129, Senior Python Developer (?), 13:56, 09/01/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Хнык-хнык, зачем абижаете, какие тут все токсичные душнилы, маааам
     
     
  • 4.133, Skif (ok), 15:50, 09/01/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Не плачь, юный падавал, с тобой ML и DS, async и ...не, про GIL не будем. А ещё хорошая сетка зарплат, востребованность и зависть непитонистов.
     
  • 2.58, OpenEcho (?), 14:28, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Но, они змеи, питоны
     
  • 2.134, Аноним (134), 16:38, 09/01/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Датасатанисты! Tensorflow жы
     
  • 2.162, Аноним (162), 16:30, 16/01/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Они PythoRUSTы.
     

  • 1.3, Онаним (?), 10:46, 08/01/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +7 +/
    А сколько их, связанных с пропущенными пробелами, даже представить страшно.
     
     
  • 2.9, Аноним (7), 11:02, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • –4 +/
    не страшно, Ваганыч, тк на пробелы ругнется компилятор байт-кода
     
  • 2.33, Аноним (33), 13:08, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Не так опасно. Они же не файлы конфигурации для модного нетплана пишут.
     
     
  • 3.61, Аноним (61), 14:39, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Хуже - они их парсер пишут.
    В котором, к примеру, кусок внутри if оказался снаружи из-за быстрой копипасты без сдвига.

    Поэтому оно типа работает, но не так как ожидал копипастер. И никакой анализатор тут не поможет.

     
  • 2.71, КО (?), 15:16, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Работает - не трогай
     
     
  • 3.161, Dmitry (??), 19:27, 14/01/2022 [^] [^^] [^^^] [ответить]  
  • +/
    пахнет - не трогай
     

  • 1.4, Аноним (4), 10:46, 08/01/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • –4 +/
    Нельзя казнить помиловать
     
     
  • 2.5, Аноним (5), 10:47, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • +8 +/
    Казнить нельзя помиловать
     
     
  • 3.10, Аноним (7), 11:06, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • +9 +/
    писать комментарии на OpenNET необязательно думать
     
     
  • 4.25, Аноним (25), 12:08, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • +/
    писать комментарии на OpenNET необязательно, думать
     
  • 2.107, Аноним (107), 21:26, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • +/
    дефис пропустил.
     
     
  • 3.112, Рмщъ (?), 22:50, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Тире
     

  • 1.6, Аноним (6), 10:49, 08/01/2022 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • –13 +/
     
     
  • 2.11, Аноним (7), 11:07, 08/01/2022 Скрыто ботом-модератором     [к модератору]
  • +2 +/
     
     
  • 3.18, Аноним (-), 11:38, 08/01/2022 Скрыто ботом-модератором     [к модератору]
  • +/
     
     
  • 4.29, YetAnotherOnanym (ok), 12:35, 08/01/2022 Скрыто ботом-модератором     [к модератору]
  • +/
     
  • 2.14, Аноним (14), 11:19, 08/01/2022 Скрыто ботом-модератором     [к модератору]
  • +3 +/
     
  • 2.20, Аноним (20), 11:43, 08/01/2022 Скрыто ботом-модератором     [к модератору]
  • +2 +/
     
     
  • 3.22, Аноним (22), 11:57, 08/01/2022 Скрыто ботом-модератором     [к модератору]
  • +2 +/
     
     
  • 4.59, OpenEcho (?), 14:33, 08/01/2022 Скрыто ботом-модератором     [к модератору]
  • +/
     
  • 3.48, Аноним (-), 13:57, 08/01/2022 Скрыто ботом-модератором     [к модератору]
  • +1 +/
     
  • 3.53, Аноним (-), 14:05, 08/01/2022 Скрыто ботом-модератором     [к модератору]
  • +/
     
  • 2.63, OpenEcho (?), 14:41, 08/01/2022 Скрыто ботом-модератором     [к модератору]
  • +/
     
     
  • 3.76, Аноним (-), 15:36, 08/01/2022 Скрыто ботом-модератором     [к модератору]
  • +/
     
     
  • 4.89, OpenEcho (?), 17:29, 08/01/2022 Скрыто ботом-модератором     [к модератору]
  • +/
     
     
  • 5.93, Аноним (-), 19:20, 08/01/2022 Скрыто ботом-модератором     [к модератору]
  • +/
     
     
  • 6.117, OpenEcho (?), 01:16, 09/01/2022 Скрыто ботом-модератором     [к модератору]
  • +/
     
  • 4.92, Не будь васяном (?), 19:09, 08/01/2022 Скрыто ботом-модератором     [к модератору]
  • –1 +/
     
     
  • 5.94, Аноним (94), 19:23, 08/01/2022 Скрыто ботом-модератором     [к модератору]
  • +/
     
  • 4.102, Аноним (-), 20:06, 08/01/2022 Скрыто ботом-модератором     [к модератору]
  • –1 +/
     

     ....ответы скрыты (17)

  • 1.8, Аноним (8), 11:00, 08/01/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    вайти в айти
     
     
  • 2.38, Модный (?), 13:22, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • +/
    А чо не так? Да нормально.
     
  • 2.85, Аноним (85), 16:35, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Одно дело когда ты думал-думал и надумал не ставить запятую, и совсем другое когда ты по невнимательности ее не поставил.
    А ЯП это пропускает.
     

  • 1.12, Аноним (12), 11:12, 08/01/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Вообще забавно, с пропущенной между строками запятой это прямо жиза. Сомневаюсь конечно, что кто-нибудь пропускает запятую в кортеже или добавляет в конце (разве что те, кто никогда не юзал питон прежде, потому что это анриал). Поэтому обычно элементы списков разделяют построчно. То, что ошибки обнаружили только в шляпных проектах, довольно показательно.
     
  • 1.16, Аноним (16), 11:27, 08/01/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Просто на лицо бескультурная разработка. На прекомите или хотябы в ci должен крутиться линтер(pylint/flake8/black), который все это безобразие не допустит. А с использованием mypy и внедрением type-хинтов ошибок будет выявлено еще больше. Проблема как обычно в людях..
     
     
  • 2.50, Аноним (50), 14:00, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Так открывай свой старап линьт питоновские репо за свои деньги.  
     
  • 2.64, Аноним (85), 14:49, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Больше похоже на сомнительную фичу языка. Если она к таким ошибкам приводит, а выгоды от ее использования практически и нет.
     

  • 1.19, Аноним (19), 11:38, 08/01/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    values = (1,)
    ааа... да. я помню было наоборот. когда  силами копипасты из строки вида "a, b, c, ..."  в коде получается вот такое
    def some_method(self, a, b, c):
      self.a = a,
      self.b = b,
      self.c = c,
    и забываешь про эти запятые, темболее никто на синтаксис не ругается. но в процессе работы с этими переменными тщетно силишься понять почему они кортеж, темболее если это датакласс в другом файле который на глаза не попадается.
    очевидно под подозрением становятся аргументы метода, особенно если аргументы получаешь из недоверяемого апи. часа полтора дебага.
     
  • 1.24, Аскольд (ok), 12:05, 08/01/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    питоноидный школодром as is
     
     
  • 2.26, Аноним (12), 12:19, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Вот не надо, это очень годные фичи. Например, когда у тебя длинная строка, ты разбиваешь её на несколько строк и при этом она сохраняет форматирование и остаётся читаемой. Из пальца высосали.
     
     
  • 3.31, Аноним (31), 12:54, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • +/
    В нормальных языках строки объединяются специальным оператором, отличным от пробела. Так что если забудешь поставить запятую, то компилятор/интерпретатор ругнётся.
     
     
  • 4.32, YetAnotherOnanym (ok), 13:01, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    AWK, значит, ненормальный...
     
     
  • 5.124, . (?), 10:13, 09/01/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Ну, скажем так - устаревший на сорок лет. Ему (как и Си) простительно - компьютеры были большие, код простым, мощности надо было экономить, а ломать совместимость нельзя.

    Нескучному язычку ломающему совместимость раз в год "патамуштамагем" - как бы не.

    А, ну да, ну да - зато у нас есть PEP!

     
  • 4.41, uis (ok), 13:31, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Например?
     
     
  • 5.118, Аноним (31), 01:18, 09/01/2022 [^] [^^] [^^^] [ответить]  
  • +/
    В пхп - точка; в джаваскрипт - плюс; в ди, если не ошибаюсь, тильда.
     
  • 4.135, userd (ok), 17:25, 09/01/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > В нормальных языках строки объединяются специальным оператором, отличным от пробела.

    В python есть специальный оператор - это '+'.
    Конкатенация смежных литералов - https://docs.python.org/3/reference/lexical_analysis.html#string-literal-conca , вероятно, заимствована из C.

    оставим C (вместе с AWK, SNOBOL и другими) на разбор знатокам. В python это скорее всего уже ненужный атавизм - когда-то компилятор был слаб и не умел сворачивать константы -  'a' 'b' обрабатывал во время компиляции, а 'a'+'b' - во время выполнения. Сейчас судя по dis.dis в коде в обоих случаях получается константа 'ab'.

     
     
  • 5.144, Аноним (31), 03:21, 10/01/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Атавизм - не атавизм, но в итоге язык проглатывает пробелы без ошибок. Почему не убрали этот косяк при переходе на 3-ю версию, когда всё-равно обратную совместимость ломали?
     
     
  • 6.145, userd (ok), 09:47, 10/01/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Ты такой умный, сделай милость, поищи почему отбросили PEP-3126 (2007, сцуко, год)
    https://www.python.org/dev/peps/pep-3126/

    и чем закончилось обсуждение предложения Гвидо ван Рассума, наступившего на эти грабли и предложившего удалить конкатенацию смежных строчных литералов -  
    https://mail.python.org/pipermail/python-ideas/2013-May/020527.html

     
     
  • 7.156, Аноним (31), 03:39, 11/01/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Да мне глубоко накласть на ваши питонопроблемы с клиническим пробелодрочерством, когда есть более адекватные языки. Сами объясняйте друг-другу, почему вы не можете избавиться от грабель, на которые сами же постоянно и натыкаетесь. А мне в это болото лезть незачем.

    Сначала сам же заявил про ненужный атавизм, потом отправил куда-то читать - почему он нужен...

     
  • 2.28, anonymous (??), 12:22, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Авторы tensorflow -- это "школодром"?
     
     
  • 3.66, Аноним (50), 14:59, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    А кто они по твоему?
     
     
  • 4.70, Аноним (85), 15:10, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Тут можно на них посмотреть, и на их работы https://research.google/teams/brain/
     
  • 3.130, Аноня (?), 14:01, 09/01/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Отделяй мух от котлет. Питоня как пхп - есть серьёзные проекты, типа твоего tensorflow, но есть и 95% школоты и вайтишек

     
  • 3.157, ptr (ok), 08:32, 11/01/2022 [^] [^^] [^^^] [ответить]  
  • +/
    TensorFlow написан на С++ с использованием CUDA. Для Python только API, причем наравне с API для других языков. Загляните в его исходники, если не верите
     

  • 1.27, Аноним (27), 12:22, 08/01/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +5 +/
    вот до чего отсутствие поцкаля в школьной программе доводит
     
     
  • 2.35, Аноним (33), 13:11, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Скорее его былое присутствие. Ибо диагноз.
     
     
  • 3.42, uis (ok), 13:31, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Не, диагноз - это qbasic
     
     
  • 4.47, Аноним (47), 13:56, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • +/
    у qbasic вообще-то уже адекватный синтаксис был
     

  • 1.30, YetAnotherOnanym (ok), 12:43, 08/01/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Это чё, в Питоне бланк между двумя строками - это конкатенация? Тогда пропуск запятой непростителен.
     
     
  • 2.36, Аноним (36), 13:19, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Не поверишь, в Си тоже
     
     
  • 3.49, Аноним (-), 14:00, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • –3 +/
    >> Это чё, в Питоне бланк между двумя строками - это конкатенация
    > Не поверишь, в Си тоже

    ты си то вообще видел хоть раз в жизни ?

     
     
  • 4.55, Siborgium (ok), 14:21, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • +5 +/
        $ cat - > main.c
        #include <stdio.h>

        int main(void) {
            puts("Hello" " " "world");
            return 0;
        }
        $ gcc main.c
        $ ./a.out
        Hello world

     
     
  • 5.75, Аноним (75), 15:24, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    строго говоря, в си это используется только чтобы для удобства чтения разбить очень длинную строку на несколько, поскольку неявная конкатенация возможна только для строковых литералов. Во всех остальных случаях - будьте добры использовать str[n]cat, s[n]printf и т.д.
     
     
  • 6.78, Аноним (78), 15:48, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Не поверишь, в Питоне также
     
     
  • 7.82, 123456789 (??), 16:19, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • –2 +/
    ну да, ну да, "также" пока не обернёшь в скобочки
     
     
  • 8.110, Здрасьте (?), 21:50, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Если обернёшь, ничего не изменится Речь о ситуации, когда есть запятая, когда е... текст свёрнут, показать
     
  • 6.88, YetAnotherOnanym (ok), 17:09, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > будьте добры использовать str[n]cat,

    Опередил.

     
  • 5.80, 123456789 (??), 16:17, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • –2 +/
    во-первых, это не "конкатенация"
    во-вторых, только для compiletime
     
  • 5.103, Аноним (-), 20:41, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >  puts("Hello" " " "world");

    это сахарок конпелятора дурень

     
     
  • 6.105, Аноним (85), 21:13, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • +/
    >сахарок конпелятора

    Это прописано в стандарте Си. Называется "конкатенацией прилегающих строковых литералов"
    Первую ветку комментариев почитай.

     
  • 6.106, Аноним (107), 21:23, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Конпелятор об этом сахарке ваще ничего не знает.
    Конкатенация происходит *до* конпеляции.
     
     
  • 7.113, Аноним (113), 22:59, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • +/
    буководрочка доводит до срача доказывания одного и того же. желаете продолжить ? y/N: _
     
  • 7.143, Ordu (ok), 02:12, 10/01/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > Конпелятор об этом сахарке ваще ничего не знает.
    > Конкатенация происходит *до* конпеляции.

    Забавное высказывание. Если компилятор об этом сахарке ничего не знает, то кто производит desugaring? (хм... расслащивание?)

     
     
  • 8.149, n00by (ok), 12:04, 10/01/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Так по стандарту вообще нет компилятора, есть фазы трансляции, где выделен препр... текст свёрнут, показать
     
     
  • 9.152, Ordu (ok), 17:52, 10/01/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Если заниматься буквоедством, то при таких вводных, фраза компилятор не знает ... текст свёрнут, показать
     
  • 5.158, ptr (ok), 08:49, 11/01/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Для GCC, чтобы тут не попасться, можно использовать -Wtraditional. А что использовать для Python?
     
     
  • 6.159, Аноним (85), 00:00, 12/01/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Выше где-то писали что линтер помогает.
     
  • 6.160, ptr (ok), 03:27, 12/01/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > Для GCC, чтобы тут не попасться, можно использовать -Wtraditional. А что использовать
    > для Python?

    Просто штатный ключ компиляции и статический анализатор кода - это все же различные вещи.
    Линтер использовать проблематично при написании скриптов для встроенного в какое-то приложение Python. Да запретить пушить недописанный код в git - усложнить регулярное резервное копирование исходников, которое при пуше выполняется автоматически.

     

  • 1.40, Аноним (40), 13:30, 08/01/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    я тоже пропускаю запятые...
     
     
  • 2.128, YetAnotherOnanym (ok), 13:18, 09/01/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > "Здравствуйте! Меня зовут Аноним-с-опеннета, и я тоже пропускаю запятые..."

    Пофиксил.

     

  • 1.45, uis (ok), 13:34, 08/01/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Я даже знаю, где один из таких репозиториев на гх - YosysHQ/prjtrellis ЕМНИП.
    PR с исправлением около полу года висит, хотя может уже приняли.
     
     
  • 2.52, Аноним (50), 14:01, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Если все итак работает то зачем?
     

  • 1.60, Питонист (?), 14:38, 08/01/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    '''
    for page in 'issues releases discover user-feedback'.split()
    '''
     
     
  • 2.90, ананоша (?), 17:31, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Мы приняли очень лёгкое решение назначить вас тимлидом в тензорфлоу
     

  • 1.67, Аноним (67), 15:03, 08/01/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Это они ещё пробелы не считали.
     
  • 1.69, Sergey (??), 15:07, 08/01/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Так не понятно, эти проги с багами что ли и они не работают ? Ну напишите разрабам и они это закроют.
     
  • 1.87, Аноним (-), 16:44, 08/01/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    Синтаксис языка простить нельзя осудить.
     
     
  • 2.104, Аноним (-), 20:45, 08/01/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Синтаксис языка г..но нельзя этим пользоваться.
     

  • 1.108, T00 (?), 21:30, 08/01/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Берём паскаль и не паримся.
     
     
  • 2.150, Аноним (134), 13:51, 10/01/2022 [^] [^^] [^^^] [ответить]  
  • +/
    действительно, никто не парится, что там на коленке работает или не работает у студента на хомяке
     

  • 1.115, kai3341 (ok), 23:06, 08/01/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Эм. Я смею заметить, что многих ошибок можно было легко избежать, если бы соблюдалось хотя бы PEP8. Знаете, сколько раз я тыкал носом и заставлял писать каждый элемент списка на отдельной строке? Сколько раз я возмущался, что 2 коротких элемента в одной строке не читаются?

    А сколько раз константные списки просил выносить из функций наружу?

     
     
  • 2.120, myhand (ok), 04:11, 09/01/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Нэ нада просить.  Нада по рукам чекером стиля бить.
     
  • 2.122, угу (?), 07:51, 09/01/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Язык г-но и псевдокомпилятор ничего не проверяет - поэтому мы просто запритим-запритим ниправильные-ниправильные, плахие стили кодинга - вместо того чтобы этим занималась собственно языковая среда. И потом будем плакать, потому что опять какой-то гад нисаблюл.

    Причем от уже процитированного выше self.a=a,
    никак не защищает.

     
     
  • 3.127, Аноним (-), 13:05, 09/01/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > Язык г-но и псевдокомпилятор ничего не проверяет - поэтому мы просто запритим-запритим
    > ниправильные-ниправильные, плахие стили кодинга - вместо того чтобы этим занималась собственно
    > языковая среда. И потом будем плакать, потому что опять какой-то гад нисаблюл.
    >> При этом проблемы с запятыми не специфичны для Python и часто всплывают в проектах на C/C++

    А, ну да, "Вынипонимаити! Это другое!"

     
  • 3.138, Аноним (12), 20:00, 09/01/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    После шелла збс, в нём пропустил пробел и о том, что тебе очко порвало, ты узнаешь через полгода, не раньше.
     
     
  • 4.153, kai3341 (ok), 18:37, 10/01/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > После шелла збс, в нём пропустил пробел и о том, что тебе очко порвало, ты узнаешь через полгода, не раньше.

    true story =(

     

  • 1.121, Аноним (121), 04:35, 09/01/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Граммар-наци добрались до питона
     
  • 1.131, Аноня (?), 14:03, 09/01/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Питон привёл в индустрию кучу левых людей.
     
     
  • 2.146, Простоник (ok), 11:01, 10/01/2022 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Наоборот. Индустрия требует большего количества людей. Но вот процент разумных  всегда примерно одинаков, их больше не становится. Значит приходится привлекать и менее способных. Вот потому и python...
     
     
  • 3.154, СССР (?), 00:40, 11/01/2022 [^] [^^] [^^^] [ответить]  
  • +/
    именно по этому на тиобе он в топе )
     
  • 2.148, commiethebeastie (ok), 12:00, 10/01/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    basic, fox pro, delphi, php, 1c, js, много таких.
     

  • 1.139, Gogi (??), 21:13, 09/01/2022 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • –2 +/
     
  • 1.142, Аноним (142), 00:44, 10/01/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Кривописцы! )
     
  • 1.155, СССР (?), 00:45, 11/01/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    питон - язык для бакланов.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру