↓
 ↑
Регистрация
Имя/email

Пароль

 
Войти при помощи
Временно не работает,
как войти читайте здесь!
Руслан Калыков
22 марта 2022
Aa Aa
#тыжпрограммист
Кто-нибудь может объяснить для чего (скрин ниже) в коде, внутри обьявленной функции, объявлен параметр initial, еще и со значением 5?
Он разве не лишний? Язык Пайтон.
В примере нужен только счетчик, (count).
Не логичнее задать ему ноль?
Туплю, "сам бади хелп ми, плиз".

Скрин (как сделать его фоткой тут, а не ссылкой??) :

https://ltdfoto.ru/image/M4fzDB
22 марта 2022
47 комментариев
Эх)
initial параметр, который по умолчанию равен пять. Если вызвать функцию без указания initial, то initial присвоится значение пять, а если с, то то значение, что вы там напишете. Внутри функции объявлена переменная count, её стартовое значение - то, что вы передали как параметр initial. То есть смысл initial - это "считать от сих ...", а дальше по функции там выясняется, как "... до сих". Вы правы в плане оптимизации, что можно было бы сделать так
def total(count=5, ...):
for number in numbers: ...
но это не очень хороший стиль, потому что лучше, чтобы смысл переменной по ходу дела не менялся. initial=5 как "по умолчанию считаем от 5" ложится хорошо, а count=5 как "по умолчанию уже насчитали 5" решение спорное.
Потому что:
1. Мы имеем дело с функцией с переменным количеством параметров
2. Предполагается, что количество параметров (initial) не больше пяти.
3. Пять - заданное в определении функции значение по умолчанию. При вызове функции можно указать свое значение, от 1 до MAX_INT.
P.S. Сраный питон. А авторы - извращенцы.
Это не функция с переменным количеством параметров. Просто авторы зачем-то начинают отсчет с 5.

P.P.P.S Поправил сильно
Cheery Cherry
Виктор Некрам

Мое почтение)
1) А если задать (count = 0...)?
2) Почему стоит 5 в примере в initial? Это просто рандомно, чтобы было? Ведь счетчик начинает считать с нуля, плюсуя только переданные данные
Виктор Некрам
У initial ведь вообще потом нет параметров вроде. Не возьму в толк для чего она там. Код не будет работать, если задать count=0, вместо initial 5?
Cheery Cherry
И почему 5? Count в итоге считает только переданные данные. Причем аргументу initial вообще не передается ничего. Данные только идут в два массива же.
ДНИЩE--ЫЫЫЫ
Виктор Некрам
Потому что:
1. Мы имеем дело с функцией с переменным количеством параметров
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

Пробелы поставить по вкусу.) Здесь они удаляются.
fake news

initial никак не относится к кол-ву параметров
и с 5-го элемента тоже никто ничего не начинает

initial это просто начальное значение счётчика суммы
т.е. результат - итоговая сумма состоит из initial, суммы по массиву numbers и суммы значений из словаря keywords
Показать полностью
Виктор Некрам
Вооот))
Нахрена там вообще 5 в примере у initial?
Спасибо, я тоже считаю, что initial бессмысла. Но автора примера не могу понять...
ДНИЩE--ЫЫЫЫ
Руслан Калыков
У initial ведь вообще потом нет параметров вроде. Не возьму в толк для чего она там. Код не будет работать, если задать count=0, вместо initial 5?
всё будет работать
ответ будет на 5 меньше
ДНИЩE--ЫЫЫЫ
initial в примере только для того, чтобы показать тебе, что в сигнатуре функции могут до вараргов быть обычные именованные параметры
ДНИЩE--ЫЫЫЫ
Прикол в том, что при вызове функции, счетчик возвращает сумму только 2ух массивов, не прибавляется 5 там
ДНИЩE--ЫЫЫЫ
ДНИЩE--ЫЫЫЫ
initial в примере только для того, чтобы показать тебе, что в сигнатуре функции могут до вараргов быть обычные именованные параметры
Понятно, если просто для примера что в функции могут быть не используемые параметры. Но зачем count пнисваивать значение initial?
Count в примере дает сумму без пятерки, как будто ее и не было
Руслан Калыков
Потому что initial - способ передать функции начальное значение count. После count = initial этот параметр не используется. Да, это рандомно заданное значение, кмк.
А если задать (count = 0...), то а зачем? Как мне подсказывает мой склероз, переменные в питоне инициализируются при первом использовании, и целые переменные инициализируются нулем. Так что если ты используешь count в теле функции, он гарантированно будет сначала равен нулю.
Причем аргументу initial вообще не передается ничего
В примере в конце параграфа в initial передаётся 10. Cheery Cherry всё разжевала на пальцах.


Count в примере дает сумму без пятерки, как будто ее и не было
Проверьте, верно ли переписан пример.

P.S. питон вижу первый раз. Не могу взять в толк, как определяется, какой аргумент пойдёт в numbers, а какой уже в keywords.
Руслан Калыков
>> А если задать (count = 0...)?
Ну с нуля будет считать
>> Почему стоит 5 в примере в initial? Это просто рандомно, чтобы было? Ведь счетчик начинает считать с нуля
>> Count в итоге считает только переданные данные.
Нет, не начинает, и нет, не только, он начинает с initial, обратите внимание на первую строку в теле функции
>> У initial ведь вообще потом нет параметров вроде
Параметры есть у функций. У initial может быть значение. По умолчанию задано значение пять. В первом примере вызова функции у initial значение 10, потому что так вызвана функция.
>> Данные только идут в два массива же.
Может, вы не в ту сторону читаете? Если я пишу
x = y
то это значит, что я беру значение y и складываю его в x. То, что справа от знака равно, записывается в то, что слева от знака равно. count += number не записывает всё в numbers, от их оттуда по одиночке по одному number выковыривает и прибавляет к count.
ДНИЩE--ЫЫЫЫ
Руслан Калыков
Прикол в том, что при вызове функции, счетчик возвращает сумму только 2ух массивов, не прибавляется 5 там
не понимаю, почему вы так решили

вот я даже запустил этот код -
ответ как и в книжке 166

у нас получается
initial = 10
numbers = [1,2,3]
keywords = {"vegetables": 50, "fruits" = 100}
итоговая сумма 166

Но я понял, почему этот пример проблемный для понимания
им нужно было бы сделать первый аргумент другого типа, тогда всё было бы ясно
Руслан Калыков
Count в примере дает сумму без пятерки, как будто ее и не было
Это неправильно.
А включи-ка ты пошаговый отладчик и посмотри значения initial и count до входа в функцию и после входа в функцию. И после присваивания.
Найдем мы твою пятерку сейчас, никуда не денется.
Cheery Cherry
Все!! Дошло! Спасибо, домо аригато, сэнк ю, благодарю!)
Люблю фф)
ДНИЩE--ЫЫЫЫ
в общем в коде как в задаче пятерка действительно не особо полезная
ДНИЩE--ЫЫЫЫ
ДНИЩE--ЫЫЫЫ
Руслан Калыков
не понимаю, почему вы так решили

вот я даже запустил этот код -
ответ как и в книжке 166

у нас получается
initial = 10
numbers = [1,2,3]
keywords = {"vegetables": 50, "fruits" = 100}
итоговая сумма 166

Но я понял, почему этот пример проблемный для понимания
им нужно было бы сделать первый аргумент другого типа, тогда всё было бы ясно

Ага, с первого раза я подумал что все числа идут в массив nambers.)))
ReFeRy
строка=значение - это обычный для питона способ задания пар (строка, значение).
ДНИЩE--ЫЫЫЫ
А не
придумал, как продемонстрировать

ДНИЩE--ЫЫЫЫ
в общем в коде как в задаче пятерка действительно не особо полезная
Это нормальный приём, когда в задаче дополнительно используется уже пройденный ранее материал. Если влезть в середину курса/учебника это может показаться лишним, а если проходить материал последовательно, то это помогает лучше запомнить каждую тему. Получается, что ты не прочитал главу и пошел дальше, а то и дело возвращаешься к прочитанному, в примерах в последующих главах.
Всем большое спасибо!!
Cheery Cherry
ДНИЩE--ЫЫЫЫ
Виктор Некрам
ReFeRy
Я ошибся когда подумал, что все числа, которые в самом низу кода идут в массив. Первая десятка идет в initial.
Разжевали)) благодарю)) а то и спросить не кого было))
ДНИЩE--ЫЫЫЫ
ReFeRy
P.S. питон вижу первый раз. Не могу взять в толк, как определяется, какой аргумент пойдёт в numbers, а какой уже в keywords.
т.к. в сигнатуре функции есть и *args и **kwargs, то

в numbers пойдут позиционные после объявленных в сигнатуре именованных
в keywords именованные после позиционных

то бишь
numbers = [1,2,3]
keywords = {"vegetables": 50, "fruits": 100}
Виктор Некрам
ReFeRy
строка=значение - это обычный для питона способ задания пар (строка, значение).
А... дошло. Кортеж - это нумерованный список, а словарь - ассоциативный массив.
ДНИЩE--ЫЫЫЫ
оффтоп: (вообще я хейтер питона)
ДНИЩE--ЫЫЫЫ
оффтоп: (вообще я хейтер питона)
А почему?
Руслан Калыков
Я вообще-то тоже. Потому что задание структуры программы отступами, а не операторными скобками {{}}, это извращение.
Пишу на питоне лет 15 и не понимаю, нахера лишние убогие фигурные скобки )
yzman
Пишу на питоне лет 15 и не понимаю, нахера лишние убогие фигурные скобки )
IDE рулит =)
ReFeRy
IDE рулит =)
Ну всё равно, читабельность хуже.
yzman
Так я как раз имею ввиду, что IDE помогает форматировать отступами. Если бы такой код писали в простом текстовом редакторе, это было бы мучение.
Кстати, о птичках.

Тот код, что выше, немного не в питон-стиле. Перебирать dict по ключам чтобы потом читать значения dict[key] - некошерно.



Итератор значений dict можно получить через .values(). Если нужны и значение ключа, и значение параметра, то используется итератор .items(), как в примере выше.

И ещё один момент: за что я люблю Python, так это за то, что coding style conventions уже давно утверждены глобально, самими разработчиками. Есть такой стандарт PEP-8 (PEP = Python Enhancement Proposal, "предложение по улучшению Python", в таких вот штуках на голосование предлагаются новые фичи языка и стандартных модулей), который, например говорит, что при объявлении или использовании функций, не нужно ставить пробелы перед и после равно, нужно ставить пробелы после запятой и так далее. В общем, не нужно сильно договариваться.
ReFeRy
Так я как раз имею ввиду, что IDE помогает форматировать отступами. Если бы такой код писали в простом текстовом редакторе, это было бы мучение.
Ну, кстати, писать в простом текстовом редакторе просто, достаточно чтобы редактор вставлял по tab 4 пробела и умел выделенный блок сдвигать влево или вправо. Я до PyCharm долго использовал notapad++ и gedit, плюс иногда на сервере приходится файлы править через vim. Проблем ноль, дело привычки. А вот скобочку фигурную забыть — это пожалуйста.

Кстати, не хватает очень сильно тэга для моноширинного преформатированного текста ) Вдобавок к закачке картинок непосредственно на сервера фанфикса )))
Кстати, не хватает очень сильно тэга для моноширинного преформатированного текста ) Вдобавок к закачке картинок непосредственно на сервера фанфикса )))
Ровно один человек просит тэг для кода, с тобой вас будет два.
ReFeRy
Даёшь публичный багтрекер с голосовалкой )
Хотя по сути - там копипаста из того же спойлер тэга + дополнительный CSS.

P.S. Хотя вру, там нужно обработку всех скобок убрать квадратных, в коде этого добра много — копипасты не получится )
yzman
Пишу на питоне лет 15 и не понимаю, нахера лишние убогие фигурные скобки )
Э, нет. Скобку поставил, и она стоит. А пробелы такие фюить! и нету. Вот, например, в редакторе блогов они просто съедаются, на питоне не попишешь.
А на языке с операторными скобками - запросто!
ReFeRy
> с тобой вас будет два.

Три.
Виктор Некрам
> А пробелы такие фюить! и нету. Вот, например, в редакторе блогов они просто съедаются, на питоне не попишешь.

Это проблема редактора блогов, не кода.
C17H19NO3
Использование для структурирования программ символа, чувствительного к редактору - это проблема языка.
Код на JS или C# я могу спокойно перегнать по маршруту Notepad - блоги - MSC, и он продолжит компилироваться и выполнять свою работу.
Питон от такого рухнет.
yzman
Даёшь публичный багтрекер с голосовалкой )
Есть fanfics.reformal.ru, но им почти никто не пользуется; есть пост жалоб, вопросов и предложений, но там уже год закрыты комментарии.
Виктор Некрам
> Использование для структурирования программ символа, чувствительного к редактору - это проблема языка.

Чувствительность редактора к универсально распространённым символам — таки проблема редактора.
C17H19NO3
Отрефлексировал вопрос, понял много интересного. Вот смотри: бывают такие школьные училки с ОКР, которым непременно отступи слева три клеточки, сверху две строчечки, а иначе истерика и работу порвет.
Но когда таким же ОКР страдает _язык_программирования_?
Отвратительно.
Виктор Некрам
> Но когда таким же ОКР страдает _язык_программирования_?

Речь не про школьных училок и ОКР.

Речь о том, что при переносе между редакторами — текст должен оставаться неизменным, безотносительно конкретного содержания.

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

> Отвратительно.

А давай я тоже приведу пример. Вот смотри: ты написал некий фанфик, вставил его в форму публикации на сайте, а форма взяла и задним числом выкинула из твоего текста все переводы строки. Наверное, это не с формой публикации проблемы, это у тебя неправильный текст, которому обязательно нужно разбиение на абзацы?
C17H19NO3
Ты взял на себя совершенно неподъемную задачу - объяснить мне, что это не разработчики языка мудаки, потому что ввели структурирование отступами, а я, потому что мне это не нравится.
Виктор Некрам
> что это не разработчики языка мудаки, потому что ввели структурирование отступами, а я, потому что мне это не нравится

Ещё раз, медленно и внимательно.

Речь не о том, будто бы структурирование отступами — хорошо или плохо.

Речь о том, что редактор, который задним числом без предупреждения произвольно сжирает некоторые символы или последовательности символов, безотносительно сути введённого в него текста — это плохой редактор, безотносительно сути введённого в него текста.

И даже если мы примем, будто бы "структурирование кода отступами это мудацкое решение" — от этого никак не становится лучше ситуация, когда редактор сжирает отступы в любом тексте, даже тексте, который не является кодом на этом конкретном языке.

Так — понятнее?
ПОИСК
ФАНФИКОВ











Закрыть
Закрыть
Закрыть