# #38. Позиционные и именованные аргументы. Параметры со значениями | Python для начинающих

## Метаданные

- **Канал:** selfedu
- **YouTube:** https://www.youtube.com/watch?v=d7H5CP8RAOg
- **Дата:** 29.03.2026
- **Длительность:** 15:09
- **Просмотры:** 787

## Описание

Обучающий курс: https://stepik.org/course/100707
Telegram-канал: https://t.me/python_selfedu

## Содержание

### [0:00](https://www.youtube.com/watch?v=d7H5CP8RAOg) Segment 1 (00:00 - 05:00)

Здравствуйте, дорогие друзья. Я Сергей Балакирев, и мы продолжаем серию занятий по функциям языка Python. Сейчас мы с вами будем говорить о способах определения параметров, функциях и передачи аргументов. Казалось бы, мы подробно разобрали эту тему, и каждый из вас уже знает, что при объявлении функции в круглых скобках через запятую можно указать сколько угодно параметров. Ну, например, мы можем с вами определить некую функцию, которая будет вычислять объём прямоугольного параллепипеда. Пусть она называется вот так вот. get подчёркивание V, и у неё будет три вот таких вот параметра A, B и C. Далее мы в этой функции с вами выведем значение вот этих вот параметров. Я воспользуюсь fко и сделаю следующим образом. Значит, параметр А, потом значение параметра B и, соответственно, значение параметра C. А дальше мы с вами вычислим объёмы вот этого прямоугольного паралепипеда как произведение этих трёх значений A, B и C. То есть вот так вот достаточно просто мы с вами можем описать подобную функцию и затем её вызвать. Причём, когда мы с вами будем вызывать эту функцию, то обязательно должны указать три аргумента для А, для B и для C. Соответственно, выведем на экран то, что у нас получится, запустим эту программу и видим следующее значение. Значит, параметр А у нас принимает значение один, параметр B2, параметр C3. Я думаю, что вы прекрасно понимаете, почему получили именно такие значения параметров, потому что они определяются позицией соответствующих аргументов. То есть первый аргумент относится вот к этому первому параметру А. На второй позиции у нас стоит двоечка, ну а на третьей, соответственно, троечка. И вот такие вот аргументы, которые записано просто через запятую 1 2 3, называются позиционные, и они определяют значение соответствующих параметров. Однако, смотрите, мы можем, не меняя порядка записей вот этих вот значений 1 2 3, например, параметру B присвоить единичку, параметру C присвоить двоечку, а параметру А присвоить троечку. Сделать это можно следующим образом. Мы здесь пропишем вот так вот B присвоить 1, то есть B = 1, C = 2 и, соответственно, A = 3. Вот так в языке Python тоже можно вызывать функции. И вот такие вот аргументы, когда мы указываем имя параметра и его значения, получили название именованных, потому что мы здесь явно указываем имя параметра. Если мы сейчас запустим эту программу, то, соответственно, параметр А принимает 3, B 1, а C 2. Мало того, мы можем комбинировать позиционную запись аргументов с именованными, например, вот первый аргумент указать просто единицу. Тогда, соответственно, здесь пусть у нас будет C2, а здесь B = 3. Соответственно, запускаем программу и видим, что никаких ошибок нету. Значение параметров у нас 1, 3 и 2. Причём правило здесь такое: в начале должны идти позиционные аргументы, а, именованые в самом конце. Например, прописать вот так вот будет недопустимо. А присвоить один, то есть вот здесь вот именованный аргумент, а здесь обычный позиционный. Так будет ошибка. Значит, запускаем программу и видим синтаксическую ошибку. Обязательно в самом начале должны идти позиционные аргументы, ну, а, соответственно, именованные в конце. Тогда функция вызывается без каких-либо проблем. Причём, смотрите, если вот здесь вот в самом начале мы с вами указали два вот таких вот позиционных аргумента 1 и 2, соответственно, один - это для параметра А, два для параметра B. Поэтому вот здесь вот третьим аргументом, именованным, мы можем с вами указать только параметр C. Например, параметр B указать не можем, потому что ему уже соответствует вот это вот значение два. И вот при такой записи возникает как бы неопределённость, чему должен быть равен аргумент B: 2 или три. И кроме того, мы никак не определили третий параметр C, который тоже должен принимать какое-то значение. Поэтому после запуска программы мы с вами видим вот такую вот ошибку. А вот если мы пропишем C = 3, то никаких ошибок не будет. Ну давайте вернёмся теперь непосредственно к параметрам самой функции. Мы их объявили просто через запятую A, B и C. Однако мы можем задавать параметры со значениями по умолчанию. Например, вот здесь вот мы с вами определим ещё четвёртый параметр. Пусть он у нас вызывается вот так вот. И по умолчанию принимает значение true. Соответственно, в самой функции мы с вами сделаем следующее. Если вот этот вот параметр WBOS принимает значение true, то только в этом случае будет выводиться вот эта вот строчка со значениями параметров. Если мы сейчас с вами запустим программу, то никаких ошибок не будет. При этом при вызове вот этой вот функции get мы с вами не указывали вот этот вот четвёртый параметр. То есть у нас есть первые три a bc, а четвёртый мы никак не прописывали. То есть вот в данном случае, когда вызывается функция get, то значение вот этого четвёртого параметра

### [5:00](https://www.youtube.com/watch?v=d7H5CP8RAOg&t=300s) Segment 2 (05:00 - 10:00)

равно true. И, соответственно, мы видим отображение вот этой строчки. Но мы можем вот здесь вот поменять значение этого параметра, если нам это необходимо. Сделать это можно вот так вот, например, прописать verboss и указать, соответственно, значение, допустим, false. Запускаем программу. И теперь вот эта вот строчка у нас не отображается. Либо мы можем вызвать эту же функцию. вот таким вот образом, то есть передавать не именованный аргумент, а просто обычный позиционный. Тогда вот это вот четвёртое значение, соответственно, будет присвоено вот эта вот переменная VerbС, и она в данном случае уже будет принимать значение фS. Запускаем программу и видим тот же самый результат. То есть вот в этом удобство использования параметров со значением по умолчанию. При вызове функции мы можем их не указывать. достаточно передать только первые три вот этих вот обычных параметра A, B, C, потому что у них нет значения по умолчанию. И, соответственно, вот эта функция get как минимум требует три аргумента для вот этих вот параметров ABC. То есть мы с вами имеем следующую картину. У любой функции языка Python мы можем с вами определять как обычные параметры, то есть без значений, так и параметры с некоторым начальным значением. Их может быть несколько. Причём вот эти вот параметры с начальным значением всегда должна быть записана после обычных вот этих вот параметров без каких-либо значений. То есть сначала идут вот такие вот A B C просто без значений. А если есть у нас параметры с какими-то значениями по умолчанию, то их обязательно прописывать в самом конце. И чтобы вот это вот всё было понятнее, давайте мы с вами рассмотрим ещё один пример, ещё одну функцию определим, которая будет сравнивать строки. Причём при сравнении строк мы с вами можем указывать у этой функции, учитывается ли регистр и учитываются ли пробелы до и после. То есть вот здесь вот есть пробел до, например, а здесь Python записан в разных регистрах. Здесь большими буквами, а здесь только P первая большая, остальные малые. Для этого здесь вот в программе мы с вами определим следующую функцию. Пусть она называется так вот CMP str. Соответственно, здесь мы будем передавать две строки, которые сравниваются между собой. А дальше у нас с вами будут два параметра со значением по умолчанию. Значит, первый параметр rec со значением флse. Он будет определять, учитывать регистр при сравнении строк или не учитывать. А параметр трим, соответственно, учитывать пробелы или не учитывать. Ну и пусть он у нас по умолчанию принимает значение true. А далее мы здесь с вами сделаем следующую проверку. Если вот этот вот параметр recнимает значение true, то тогда мы с вами не будем учитывать регистр при сравнении строк. И для этого мы все строки переведём просто в нижний регистр. Соответственно, здесь для первой строки и для второй строки. Далее, если вот этот вот параметр 3 у нас принимает значение true, то в этом случае мы не будем учитывать пробелы до и после. Поэтому вот у этих строк S1 и S2 мы с вами вызовем вот этот вот методстрип, который удаляет пробелы. Значит, это для первой строки и, соответственно, для второй строки. А в конце мы просто пропишем S1 = S2. Всё. Вот такая вот у нас функция. То есть здесь два обычных параметра и два параметра со значением по умолчанию. Вот эти вот последние два параметра мы можем не передавать при вызове функции CPSR, а первые два обязательно. Ну и давайте вызвем эту функцию следующим образом. Значит, сейчас сразу напишу print, по той cm CMP str, значит, вот первая строка, пусть у нас будет Python. В конце у нас здесь вот будет пробел, а здесь, соответственно, Python, но с пробелом в самом начале. Давайте посмотрим, что у нас в итоге получится. Запускаем эту программу и видим значение true. Почему у нас получилось значение true? Ну, очевидно, вот этот вот параметр трим у нас принимает значение true, поэтому пробелы вот здесь вот у нас не учитываются, и, соответственно, они будут удаляться перед вот этим вот сравнением. Ну а вот этот вот регистр у нас сейчас будет влиять. То есть, если сейчас прописать Python заглавными буквами, то получим значение false. Давайте в этом убедимся. Значит, вот здесь вот мы с вами вот так вот пропишем Python, запускаем программу и видим false. Но если вот здесь вот дополнительно мы с вами пропишем вот этот вот параметр rec со значением true, то, соответственно, здесь тоже получаем true, потому что теперь обе строки переводятся в нижний регистр, удаляются затем вот эти вот пробелы и строки получаются равные. Ну или мы можем прописать так. Значит, здесь вот просто обычно будет позиционный аргумент true. И далее вот здесь вот ещё можем указать четвёртый аргумент false. То есть, соответственно, true будет для rec для параметра rec, а false для параметра трим. Запускаем программу и в данном случае ведём фSE, потому что у нас сейчас учитываются пробелы. То есть вот такими вот способами мы можем вызывать и использовать вот эту вот функцию CPSTR. Ну и в заключении этого занятия я хочу показать вам ещё один нюанс при объявлении функции с параметрами со значениям по умолчанию. Давайте предположим, что у нас есть функция, которая добавляет некое значение value в

### [10:00](https://www.youtube.com/watch?v=d7H5CP8RAOg&t=600s) Segment 3 (10:00 - 15:00)

список. И эта функция будет такая. Значит, первый обычный параметр, а второй у нас будет как раз список. И пусть это будет список вот такой вот пустой. И в этот пустой список мы, соответственно, будем добавлять значение value. Значит, здесь у нас будет lst appen, а здесь, соответственно, value. Затем мы возвратим тот список, который у нас с вами получается, и вышла вот такая вот функция adduver. Давайте теперь посмотрим, как эта функция будет работать. Вызываем её первый раз, вызываем её второй раз, выводим итоговый список L на экран. И как вы думаете, что в итоге у нас получится? На первый взгляд может показаться, что в списке L должна оказаться только вот эта вот двоечка. Давайте проверим. Запускаем программу, но видим два значения 1 и 2. Почему так получилось? На самом деле всё просто. Смотрите, когда мы с вами объявили вот эту вот функцию, то параметр LST ссылается вот на этот вот список. После того, как мы первый раз вызвали эту функцию со значением один, то, соответственно, вот эта вот единичка была занесена вот в этот вот список. Я думаю, что пока всё понятно. Но теперь смотрите, если мы с вами вызовем эту функцию ещё раз, то у нас получится буквально следующее. Вот этот вот параметр l, он продолжает ссылаться на тот же самый список, в котором уже записана вот эта вот единичка. Потому что значение вот этой вот ссылки никак не поменялось. Она ведёт на всё тот же самый список, потому что инициализация вот этого вот параметра пустым списком происходит только один раз в момент создания объекта вот этой вот функции. И далее при каждом вызове этой функции используется один и тот же список. И так как список - это изменяемый тип данных, то мы сначала туда записали вот эту вот первую единичку, а потом при повторном вызове этой функции туда же записали вот эту вот двоечку. И у нас получается два значения: 1 и 2. Это происходит ровно потому, что параметр ЛСT, значение вот этого вот параметра ЛСT инициализируется только один раз вот этим вот пустым списком в момент создания объекта вот этой вот функции add value. Далее, когда мы вызываем эту функцию первый, второй раз, третий, четвёртый и так далее, значение вот этого вот параметра ЛСT у нас никак не меняется. То есть он всё время ссылается на один и тот же список. Вот этот вот момент нужно очень хорошо себе понимать, когда мы используем параметры со значением по умолчанию. И в связи с этим есть одна очень важная рекомендация. Когда мы с вами используем параметры со значением по умолчанию, то в качестве значения следует указывать только неизменяемые типы данных. А вот такие вот вроде списков, словарей, множеств и так далее указывать не следует. Но тогда спрашивается: "А как можно было бы поправить вот эту вот функцию, чтобы при каждом её вызове у нас формировался вот такой вот пустой список? " И сделать это можно следующим образом. Вот здесь вот в качестве значения мы с вами укажем неизменяемое значение. Пусть это будет нан. И, соответственно, вот здесь вот будем проверять. Если вот этот вот список у нас принимает значение нан, то тогда мы с вами будем формировать новый пустой список. То есть теперь вот при каждом вызове вот этой вот функции у нас для каждой функции будет формироваться свой пустой список. И мы в этом с вами можем убедиться. Если запустим программу, то, соответственно, вот эта вот переменна L будет ссылаться на двоечку. Значит, давайте вот здесь вот мы с вами пропишем L1, здесь L2, и вывезем оба этих списка. Здесь L1, а здесь L2. Запускаем программу и видим, что теперь формируется два независимых списка. В первом содержится единица, а во втором двойка. Если же нам нужно в один и тот же список заносить значение сначала один, а потом два, то мы можем второй раз вызвать вот эту вот функцию от девелуя уже со значением вот этого списка L1. Тогда в качестве вот этого вот параметра будет подставляться сюда уже список. Это условие не сработает, и мы в существующий список добавим ещё одно значение. Поэтому после выполнения программы у нас получается вот такой вот список со значением 1 и 2. Это один и тот же список, только мы его дважды вывели на экран. То есть вот такой вот нюанс существует при определении параметров функции со значением по умолчанию. Эти значения следует определять только неизменяемыми типами данных. Вот это вот правило следует запомнить и всегда использовать. Итак, из этого занятия вам нужно запомнить, что такое позиционные и именованные аргументы и как их можно записывать и комбинировать, а также, что такое параметры и параметр со значением по умолчанию, зачем нужны такие параметры и как они используются на практике. Закрепляйте материал практическими заданиями и переходите к следующему

### [15:00](https://www.youtube.com/watch?v=d7H5CP8RAOg&t=900s) Segment 4 (15:00 - 15:00)

уроку.

---
*Источник: https://ekstraktznaniy.ru/video/51608*