![]() #тыжпрограммист
Кто-нибудь может объяснить для чего (скрин ниже) в коде, внутри обьявленной функции, объявлен параметр initial, еще и со значением 5? Он разве не лишний? Язык Пайтон. В примере нужен только счетчик, (count). Не логичнее задать ему ноль? Туплю, "сам бади хелп ми, плиз". Скрин (как сделать его фоткой тут, а не ссылкой??) : https://ltdfoto.ru/image/M4fzDB 22 марта 2022
|
![]() |
|
Эх)
|
![]() |
|
Cheery Cherry
Виктор Некрам Мое почтение) 1) А если задать (count = 0...)? 2) Почему стоит 5 в примере в initial? Это просто рандомно, чтобы было? Ведь счетчик начинает считать с нуля, плюсуя только переданные данные |
![]() |
|
Виктор Некрам
У initial ведь вообще потом нет параметров вроде. Не возьму в толк для чего она там. Код не будет работать, если задать count=0, вместо initial 5? |
![]() |
|
Cheery Cherry
И почему 5? Count в итоге считает только переданные данные. Причем аргументу initial вообще не передается ничего. Данные только идут в два массива же. |
![]() |
ДНИЩE--ЫЫЫЫ
|
Виктор Некрам
Показать полностью
Потому что: fake news1. Мы имеем дело с функцией с переменным количеством параметров 2. Предполагается, что количество параметров (initial) не больше пяти. 3. Пять - заданное в определении функции значение по умолчанию. При вызове функции можно указать свое значение, от 1 до MAX_INT. P.S. Сраный питон. А авторы - извращенцы. Это не функция с переменным количеством параметров. Просто авторы зачем-то начинают отсчет с 5 элемента массива numbers. С учетом того, что в питоне есть срезы массивов, понять это невозможно. P.P.S. Вот что я имею в виду: neededNumbers = numbers[5::1] neededKeywords = keywords[5::1] def total(*numbers, **keywords) for number in neededNumbers sum += number for keyword in neededKeywords sum += keyword return sum Пробелы поставить по вкусу.) Здесь они удаляются. initial никак не относится к кол-ву параметров и с 5-го элемента тоже никто ничего не начинает initial это просто начальное значение счётчика суммы т.е. результат - итоговая сумма состоит из initial, суммы по массиву numbers и суммы значений из словаря keywords 1 |
![]() |
|
Виктор Некрам
Вооот)) Нахрена там вообще 5 в примере у initial? Спасибо, я тоже считаю, что initial бессмысла. Но автора примера не могу понять... |
![]() |
ДНИЩE--ЫЫЫЫ
|
Руслан Калыков
У initial ведь вообще потом нет параметров вроде. Не возьму в толк для чего она там. Код не будет работать, если задать count=0, вместо initial 5? всё будет работатьответ будет на 5 меньше 1 |
![]() |
ДНИЩE--ЫЫЫЫ
|
initial в примере только для того, чтобы показать тебе, что в сигнатуре функции могут до вараргов быть обычные именованные параметры
|
![]() |
|
ДНИЩE--ЫЫЫЫ
Прикол в том, что при вызове функции, счетчик возвращает сумму только 2ух массивов, не прибавляется 5 там |
![]() |
|
ДНИЩE--ЫЫЫЫ
ДНИЩE--ЫЫЫЫ initial в примере только для того, чтобы показать тебе, что в сигнатуре функции могут до вараргов быть обычные именованные параметры Понятно, если просто для примера что в функции могут быть не используемые параметры. Но зачем count пнисваивать значение initial?Count в примере дает сумму без пятерки, как будто ее и не было |
![]() |
|
Руслан Калыков
Потому что initial - способ передать функции начальное значение count. После count = initial этот параметр не используется. Да, это рандомно заданное значение, кмк. А если задать (count = 0...), то а зачем? Как мне подсказывает мой склероз, переменные в питоне инициализируются при первом использовании, и целые переменные инициализируются нулем. Так что если ты используешь count в теле функции, он гарантированно будет сначала равен нулю. 1 |
![]() |
|
Руслан Калыков
>> А если задать (count = 0...)? Ну с нуля будет считать >> Почему стоит 5 в примере в initial? Это просто рандомно, чтобы было? Ведь счетчик начинает считать с нуля >> Count в итоге считает только переданные данные. Нет, не начинает, и нет, не только, он начинает с initial, обратите внимание на первую строку в теле функции >> У initial ведь вообще потом нет параметров вроде Параметры есть у функций. У initial может быть значение. По умолчанию задано значение пять. В первом примере вызова функции у initial значение 10, потому что так вызвана функция. >> Данные только идут в два массива же. Может, вы не в ту сторону читаете? Если я пишу x = y то это значит, что я беру значение y и складываю его в x. То, что справа от знака равно, записывается в то, что слева от знака равно. count += number не записывает всё в numbers, от их оттуда по одиночке по одному number выковыривает и прибавляет к count. 1 |
![]() |
ДНИЩE--ЫЫЫЫ
|
Руслан Калыков
Прикол в том, что при вызове функции, счетчик возвращает сумму только 2ух массивов, не прибавляется 5 там не понимаю, почему вы так решиливот я даже запустил этот код - ![]() ответ как и в книжке 166 у нас получается initial = 10 numbers = [1,2,3] keywords = {"vegetables": 50, "fruits" = 100} итоговая сумма 166 Но я понял, почему этот пример проблемный для понимания им нужно было бы сделать первый аргумент другого типа, тогда всё было бы ясно 1 |
![]() |
|
Руслан Калыков
Count в примере дает сумму без пятерки, как будто ее и не было Это неправильно.А включи-ка ты пошаговый отладчик и посмотри значения initial и count до входа в функцию и после входа в функцию. И после присваивания. Найдем мы твою пятерку сейчас, никуда не денется. 1 |
![]() |
|
1 |
![]() |
ДНИЩE--ЫЫЫЫ
|
в общем в коде как в задаче пятерка действительно не особо полезная
1 |
![]() |
|
ДНИЩE--ЫЫЫЫ
ДНИЩE--ЫЫЫЫ Руслан Калыков не понимаю, почему вы так решили вот я даже запустил этот код - ![]() ответ как и в книжке 166 у нас получается initial = 10 numbers = [1,2,3] keywords = {"vegetables": 50, "fruits" = 100} итоговая сумма 166 Но я понял, почему этот пример проблемный для понимания им нужно было бы сделать первый аргумент другого типа, тогда всё было бы ясно Ага, с первого раза я подумал что все числа идут в массив nambers.))) |
![]() |
|
ReFeRy
строка=значение - это обычный для питона способ задания пар (строка, значение). 1 |
![]() |
ДНИЩE--ЫЫЫЫ
|
А не
придумал, как продемонстрировать ![]() 1 |
![]() |
|
ДНИЩE--ЫЫЫЫ
в общем в коде как в задаче пятерка действительно не особо полезная Это нормальный приём, когда в задаче дополнительно используется уже пройденный ранее материал. Если влезть в середину курса/учебника это может показаться лишним, а если проходить материал последовательно, то это помогает лучше запомнить каждую тему. Получается, что ты не прочитал главу и пошел дальше, а то и дело возвращаешься к прочитанному, в примерах в последующих главах. |
![]() |
|
Всем большое спасибо!!
Cheery Cherry ДНИЩE--ЫЫЫЫ Виктор Некрам ReFeRy Я ошибся когда подумал, что все числа, которые в самом низу кода идут в массив. Первая десятка идет в initial. Разжевали)) благодарю)) а то и спросить не кого было)) 1 |
![]() |
ДНИЩE--ЫЫЫЫ
|
ReFeRy
P.S. питон вижу первый раз. Не могу взять в толк, как определяется, какой аргумент пойдёт в numbers, а какой уже в keywords. т.к. в сигнатуре функции есть и *args и **kwargs, тов numbers пойдут позиционные после объявленных в сигнатуре именованных в keywords именованные после позиционных то бишь numbers = [1,2,3] keywords = {"vegetables": 50, "fruits": 100} |
![]() |
|
Виктор Некрам
ReFeRy А... дошло. Кортеж - это нумерованный список, а словарь - ассоциативный массив.строка=значение - это обычный для питона способ задания пар (строка, значение). 1 |
![]() |
ДНИЩE--ЫЫЫЫ
|
оффтоп: (вообще я хейтер питона)
|
![]() |
|
![]() |
|
Руслан Калыков
Я вообще-то тоже. Потому что задание структуры программы отступами, а не операторными скобками {{}}, это извращение. 1 |
![]() |
|
Пишу на питоне лет 15 и не понимаю, нахера лишние убогие фигурные скобки )
|
![]() |
|
![]() |
|
![]() |
|
yzman
Так я как раз имею ввиду, что IDE помогает форматировать отступами. Если бы такой код писали в простом текстовом редакторе, это было бы мучение. |
![]() |
|
ReFeRy
Так я как раз имею ввиду, что IDE помогает форматировать отступами. Если бы такой код писали в простом текстовом редакторе, это было бы мучение. Ну, кстати, писать в простом текстовом редакторе просто, достаточно чтобы редактор вставлял по tab 4 пробела и умел выделенный блок сдвигать влево или вправо. Я до PyCharm долго использовал notapad++ и gedit, плюс иногда на сервере приходится файлы править через vim. Проблем ноль, дело привычки. А вот скобочку фигурную забыть — это пожалуйста.Кстати, не хватает очень сильно тэга для моноширинного преформатированного текста ) Вдобавок к закачке картинок непосредственно на сервера фанфикса ))) |
![]() |
|
ReFeRy
Даёшь публичный багтрекер с голосовалкой ) Хотя по сути - там копипаста из того же спойлер тэга + дополнительный CSS. P.S. Хотя вру, там нужно обработку всех скобок убрать квадратных, в коде этого добра много — копипасты не получится ) |
![]() |
|
yzman
Пишу на питоне лет 15 и не понимаю, нахера лишние убогие фигурные скобки ) Э, нет. Скобку поставил, и она стоит. А пробелы такие фюить! и нету. Вот, например, в редакторе блогов они просто съедаются, на питоне не попишешь.А на языке с операторными скобками - запросто! |
![]() |
|
![]() |
|
Виктор Некрам
> А пробелы такие фюить! и нету. Вот, например, в редакторе блогов они просто съедаются, на питоне не попишешь. Это проблема редактора блогов, не кода. |
![]() |
|
C17H19NO3
Использование для структурирования программ символа, чувствительного к редактору - это проблема языка. Код на JS или C# я могу спокойно перегнать по маршруту Notepad - блоги - MSC, и он продолжит компилироваться и выполнять свою работу. Питон от такого рухнет. |
![]() |
|
yzman
Даёшь публичный багтрекер с голосовалкой ) Есть fanfics.reformal.ru, но им почти никто не пользуется; есть пост жалоб, вопросов и предложений, но там уже год закрыты комментарии. |
![]() |
|
Виктор Некрам
> Использование для структурирования программ символа, чувствительного к редактору - это проблема языка. Чувствительность редактора к универсально распространённым символам — таки проблема редактора. |
![]() |
|
C17H19NO3
Отрефлексировал вопрос, понял много интересного. Вот смотри: бывают такие школьные училки с ОКР, которым непременно отступи слева три клеточки, сверху две строчечки, а иначе истерика и работу порвет. Но когда таким же ОКР страдает _язык_программирования_? Отвратительно. |
![]() |
|
Виктор Некрам
> Но когда таким же ОКР страдает _язык_программирования_? Речь не про школьных училок и ОКР. Речь о том, что при переносе между редакторами — текст должен оставаться неизменным, безотносительно конкретного содержания. Если какой-то редактор при обработке произвольного текста по своей собственной прихоти произвольно преобразует некоторые широко распространённые символы, не уведомляя об этом пользователя заранее в явном виде — это не проблема текста, это плохой редактор. > Отвратительно. А давай я тоже приведу пример. Вот смотри: ты написал некий фанфик, вставил его в форму публикации на сайте, а форма взяла и задним числом выкинула из твоего текста все переводы строки. Наверное, это не с формой публикации проблемы, это у тебя неправильный текст, которому обязательно нужно разбиение на абзацы? |
![]() |
|
C17H19NO3
Ты взял на себя совершенно неподъемную задачу - объяснить мне, что это не разработчики языка мудаки, потому что ввели структурирование отступами, а я, потому что мне это не нравится. |
![]() |
|
Виктор Некрам
> что это не разработчики языка мудаки, потому что ввели структурирование отступами, а я, потому что мне это не нравится Ещё раз, медленно и внимательно. Речь не о том, будто бы структурирование отступами — хорошо или плохо. Речь о том, что редактор, который задним числом без предупреждения произвольно сжирает некоторые символы или последовательности символов, безотносительно сути введённого в него текста — это плохой редактор, безотносительно сути введённого в него текста. И даже если мы примем, будто бы "структурирование кода отступами это мудацкое решение" — от этого никак не становится лучше ситуация, когда редактор сжирает отступы в любом тексте, даже тексте, который не является кодом на этом конкретном языке. Так — понятнее? |