Step 7 (S-98923)

From Stepik Wiki
Jump to: navigation, search

Step on Stepik: https://stepik.org/lesson/24460/step/7

Step 7 (S-98923) 1.png

[00:00 - 00:16] пишем функцию нам не всегда хватает лишь локальных переменных иногда хочется и очень даже нужные дни значения переменной глобальный или переменной в пространстве имен вызвавшая нас функции этого в языке python есть конструкция global ином локал предположим что мы написали приложение для


[00:16 - 00:33] какого нибудь словаря все слова и хранила их переводы однако время от времени при l слова на адекватность если в какой то момент времени мы понимаем что мы встретили слово без гласных достаточно странно мы бы подумали что наши когда мы что то пошло не так мы бы хотели где то глобально это зафиксировать


[00:33 - 00:50] тогда мы во вьюере глобальной переменной окей статус она равно true если у нас все хорошо у нас все окей и она принимала значение false есть в нашей программе что то пошло не так мы бы хотели список со всеми гласными в английском языке написать функцию человек который бы принимал 1 слово


[00:50 - 01:10] ходят ли хотя бы какая нибудь гласные в это слово если входит возвращала бы тру но возвращала false зиму мы в 1 раз использовали конструкцию global global окей статус как инструкции означает что нужно взять имя окей статус из глобального неймспейса


[01:10 - 01:27] и внутри нашей функции именно его использовать это означает что когда мы здесь делаем присваивания окей статус false в том случае если мы не нашли гласной нашим слове то мы используем окей статус не из нашего локального ним spacer функции check из глобального на экспрессе который объявлен здесь


[01:27 - 01:45] тогда если мы запустим функции человека слабо самым мы сможем увидеться в том что он содержит в себе гласные значение true и нашей глобальной переменной окей статус не изменится однако если мы запустим нашу функцию человека слова в убедимся в том что я значение false и 3 мы запустили эту функцию то


[01:45 - 02:01] здесь произойдет присваивания а значение false глобальному имени окей статус и грамм здесь выводим в терминал значение глобального именно и статус мы видим значение false однако и локальных переменных и глобальных переменных иногда тоже может не хватать


Step 7 (S-98923) 2.png

[02:01 - 02:18] давайте посмотрим если мы обернулись весь наш код внутри 1 функции тогда окей статус на самом деле бы означало насколько хорошо исполняется именно наша функция f то есть функция и статус имело бы значение false если в процессе исполнения нашей функции ф


[02:18 - 02:37] еще что нибудь странное например но вставить слово которое не содержит в себе глаз однако если мы скопировали весь такой без изменений использовать внутри функции check конструкцию global окей статус мы бы увидели именно такой вывод то есть мы проверили сабж увидели значение true проверила статус он также был равен true


[02:37 - 02:52] потом проверили че кладовая и затем снова увидела чей статус и он бы оказался опять же равно true это случается конечно же потому что когда мы вызываем функцию окей статус создается в локальную в песе функции ф поэтому никакому


[02:52 - 03:12] глобальном неймспейсе у нас нет имени окей статус когда мы запускаем функцию чем мы говорим использовать окей статус глобальной экспансии глобальному 75 присваиваем и меня окей статус имя фолс однако это никак изменять не изменяет значение нашла и меня окей статус внутри функции ф поэтому


[03:12 - 03:27] значение здесь такие статусы из 10 статуса не меняются и более того если после выполнения функций f мы попробуем вывести глобальное значение имени окей статусным увидим что оно появилось и она стала равно фраз то есть такая проведения это не совсем то что мы хотели


Step 7 (S-98923) 3.png

[03:27 - 03:43] мы хотели чтобы наши переменно кей статус на 2 функции как же исполняется наша функция есть мне какие нибудь проблемы в процессе исполнения для этого можно использовать ключевое слово gnome локал давайте просто использовать конструкцию но плохо вместо конструкции global


[03:43 - 03:58] таким образом что же произойдет глобальный неймспейс у нас был 1 из функции ф мы внутри функции ф вызвали функцию человек


[03:58 - 04:13] здесь находится в момент исполнения и интерпретатор встречает конструкции на блоке и статус это говорит о том что ему нужно найти такое пространство имен которое содержало имя окей статус этом ближайшая к текущему пространства имен


[04:13 - 04:28] текущего пространства имен данным с пояса global то есть нашей текущей пространства имен это пространство имен функций чек на пути от чем то докладывал и тебе лишь найти ближайшее пространства имен который бы содержал окей статус


[04:28 - 04:47] в нашем случае это конечно пространство имен функций f потому что в этой функции не объявляя имя и статус теперь функция чак работает правильным образом и наша переменная внутри функции окей статус хоронить себя только в том случае если в процессе исполнения функции ф произошла странная


[04:47 - 05:04] и мы встретили слово которое не содержит в себе гласных все это вывезти можно в этом убедиться и можно вывести после исполнения функции ф попробуй вывести такие статусы глобального на экспрессе и его там не найти важные мелочи является то что в процессе


[05:04 - 05:22] поиска инструкции на локал от пути до check the global мы никогда не будем смотреть не global не в чек об этом при этом пространстве имен по пути отчета global таким образом несмотря на то что стандартное поведение оператора присваивания внутри функции создает


[05:22 - 05:32] локальное имя внутри локальной и спайса вы далеко не ограничены лишь локальными переменными этом чтобы не использовать локальные переменные вы можете использовать конструкции global но локал