{"id":12794,"date":"2023-08-25T10:48:00","date_gmt":"2023-08-25T08:48:00","guid":{"rendered":"https:\/\/infoshareacademy.com\/blog\/?p=12794"},"modified":"2023-09-21T15:05:40","modified_gmt":"2023-09-21T13:05:40","slug":"python-zasiegi-zmiennych","status":"publish","type":"post","link":"https:\/\/infoshareacademy.com\/blog\/python-zasiegi-zmiennych\/","title":{"rendered":"Python &#8211; zasi\u0119gi zmiennych"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Python jest jednym z najpopularniejszych j\u0119zyk\u00f3w programowania, u\u017cywanym g\u0142\u00f3wnie w dziedzinie analizy danych, uczenia maszynowego, automatyzacji zada\u0144 i tworzenia stron internetowych.<\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Python dla pocz\u0105tkuj\u0105cych &#8211; warto?<\/h2>\n\n\n\n<p>Jedn\u0105 z g\u0142\u00f3wnych cech Pythona jest jego czytelno\u015b\u0107 &#8211; posiada czyteln\u0105 i intuicyjn\u0105 sk\u0142adni\u0119, kt\u00f3ra u\u0142atwia pisanie i czytanie kodu. Do tego charakteryzuje si\u0119 r\u00f3wnie\u017c ogromn\u0105 ilo\u015bci\u0105 bibliotek i modu\u0142\u00f3w, kt\u00f3re dostarczaj\u0105 gotowych rozwi\u0105za\u0144 do r\u00f3\u017cnych zastosowa\u0144. Dzi\u0119ki temu programi\u015bci Pythona mog\u0105 korzysta\u0107 z bogatego ekosystemu, oszcz\u0119dzaj\u0105c czas i wysi\u0142ek. Dzi\u0119ki temu Python jest \u015bwietnym j\u0119zykiem zar\u00f3wno dla pocz\u0105tkuj\u0105cych, jak i zaawansowanych programist\u00f3w.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Samodzielna nauka programowania czy jednak pod okiem trenera?<\/h3>\n\n\n\n<p>Je\u015bli jeste\u015b zainteresowany nauk\u0105 programowania, Python mo\u017ce by\u0107 doskona\u0142ym wyborem. Znajomo\u015b\u0107 Pythona otwiera drzwi do wielu mo\u017cliwo\u015bci kariery w obszarze IT. Wspomaga r\u00f3wnie\u017c rozw\u00f3j umiej\u0119tno\u015bci analizy danych i uczenia maszynowego.<\/p>\n\n\n\n<p>Programowania mo\u017cesz uczy\u0107 si\u0119 samodzielnie lub pod okiem trenera. Mo\u017cesz p\u00f3j\u015b\u0107 na studia, robi\u0107 kursy (zar\u00f3wno darmowe, jak i p\u0142atne), czyta\u0107 ksi\u0105\u017cki, czy buszowa\u0107 po internecie w poszukiwaniu innych sposob\u00f3w. Jest ich wiele, wi\u0119c na pewno ka\u017cdy znajdzie co\u015b dla siebie. <\/p>\n\n\n\n<div class=\"wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-16018d1d wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link has-background has-text-align-center wp-element-button\" href=\"https:\/\/infoshareacademy.com\/?&amp;utm_source=blog&amp;utm_medium=organic\" style=\"background-color:#f20b32\"><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-white-color\">Wybierz kurs dla siebie!<\/mark><\/a><\/div>\n<\/div>\n\n\n\n<h3 class=\"wp-block-heading\">A teraz b\u0119dzie troch\u0119 programowania! Czym s\u0105 zasi\u0119gi zmiennych?<\/h3>\n\n\n\n<p>Zasi\u0119gi zmiennych &#8211; kurs programowania dla pocz\u0105tkuj\u0105cych! <\/p>\n\n\n\n<p>Pyton to jest taki zwierz, kt\u00f3ry mo\u017ce robi\u0107 dla nas r\u00f3\u017cne fajne rzeczy. Najpierw jednak musimy mu wyt\u0142umaczy\u0107, w jaki spos\u00f3b nale\u017cy je robi\u0107. Je\u017celi chcemy poprosi\u0107 Pythona o wypisanie czego\u015b, to musimy mu wyt\u0142umaczy\u0107, co ma wypisa\u0107. A co to znaczy to \u201eco\u015b\u201d? To jest w\u0142a\u015bnie definicja ZMIENNYCH.<\/p>\n\n\n\n<p class=\"has-text-align-center\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh4.googleusercontent.com\/swBJPUfI3Jyvo4tZOgaK2IP1O0maao0e-9UWcwOcXQYNaZNHmsK0XooL0ovRaHU2Toyj-UWNSRE5MLvcwk4Hut-2AQfaIwxrDF-DCc-rs4KJStaeIF4LYdPqL1ojNN_vcpxWV_qmndtRvhbiYGHUHwk\" width=\"284\" height=\"142\"><\/p>\n\n\n\n<p>Python potrafi podstawowe rzeczy i rozumie s\u0142\u00f3wka typu \u201eprint\u201d (wypisz co\u015b). Ale na przyk\u0142ad takiego s\u0142\u00f3wka \u201estring\u201d ju\u017c nie rozumie. Nie wie, co to jest. Wi\u0119c nale\u017cy mu wyt\u0142umaczy\u0107, \u017ce to jest \u201eco\u015b\u201d (something) i \u017ce pod tym kryje si\u0119 w tym przypadku napis \u201eHello!\u201d. I po tym, jak zmienna \u201esomething\u201d zostanie zdefiniowana, to mo\u017cna poprosi\u0107 Pythona o to, \u017ceby tak\u0105 zmienn\u0105 wypisa\u0142.<\/p>\n\n\n\n<p class=\"has-text-align-center\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh5.googleusercontent.com\/FJt2UXiL7jOErZyx0maS8llWGYusNl7rB2J8O7ACvAfOEmBgKGZikUwTeL8pmJ0agnwx0aaeEQC-UPfyN8eoS5RbdMD_GX4WWfUQfFcQyub2J-4NuLJeOBZjcDRsIUq7H2L2vSK-tax2xXXGISTQOJo\" width=\"602\" height=\"83\"><\/p>\n\n\n\n<p>Wszystko dzia\u0142a! Python wypisa\u0142 \u201eHello!\u201d. Pami\u0119tajmy, \u017ce zadzia\u0142a to dopiero w sytuacji, kiedy zostanie zdefiniowane, czyli w sytuacji, gdy Python wie, o co nam chodzi.<\/p>\n\n\n\n<p>Je\u017celi odwo\u0142anie do \u201esomething\u201d nast\u0105pi, zanim zostanie ono zdefiniowane, to to nie zadzia\u0142a. Python powie, \u017ce nie rozumie, czym jest ta nazwa, czym jest ta zmienna, co to jest to \u201esomething\u201d.<\/p>\n\n\n\n<p class=\"has-text-align-center\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh6.googleusercontent.com\/sQS1_-rPOQymz7_LQY5CdstRHftVeMRPuL6GOCaI3-dv28qzzcMhlqnAbgxbuBu1MYPfYgLueuRtmwXm7vqmhbwlwZQq9QcdACba6poVkjyIcrthmiRzY87jHNTI0NpQKB_1HfxvO0jhvbgFmWSfXOw\" width=\"602\" height=\"79\"><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Jak wi\u0119c to si\u0119 ma do zasi\u0119gu zmiennych? Czym w\u0142a\u015bciwie jest zasi\u0119g zmiennych?<\/h4>\n\n\n\n<p>O interakcji z Pythonem mo\u017cna my\u015ble\u0107 jak o pewnego rodzaju rozmowie mi\u0119dzy osob\u0105 a Pythonem. Osoba najpierw t\u0142umaczymy co\u015b Pythonowi, by potem go o co\u015b poprosi\u0107. Ta rozmowa mo\u017ce by\u0107 bardzo z\u0142o\u017cona i skomplikowana, bo i program mo\u017ce by\u0107 bardzo z\u0142o\u017cony i skomplikowany. W tej rozmowie mo\u017ce przewija\u0107 si\u0119 kilka w\u0105tk\u00f3w, wiele r\u00f3\u017cnego rodzaju kontekstu i temat\u00f3w. Czasami zdarzy si\u0119 tak, \u017ce u\u017cyte zostan\u0105 te same s\u0142owa, ale b\u0119d\u0105 si\u0119 one odnosi\u0107 do r\u00f3\u017cnych rzeczy.<\/p>\n\n\n\n<p>Dzia\u0142a to na podobnej zasadzie, jak zwyczajna rozmowa z innymi lud\u017ami. Osoba X opowiada, jakiego ma fajnego pieska. Nast\u0119pnie osoba Y m\u00f3wi o innym psie, kt\u00f3ry by\u0142 ostatnio bardzo agresywny. Obie te rozmowy dotycz\u0105 r\u00f3\u017cnych ps\u00f3w, a przecie\u017c w obu przypadkach m\u00f3wimy \u201epies\u201d. To s\u0105 te same s\u0142owa, ale my, jako ludzie, u\u017cywamy s\u0142\u00f3w w pewnym kontek\u015bcie i w\u0142a\u015bnie w tym kontek\u015bcie te s\u0142owa rozumiemy.<\/p>\n\n\n\n<p>ZASI\u0118G ZMIENNYCH w Pythonie nale\u017cy rozumie\u0107 r\u00f3wnie\u017c w ten spos\u00f3b.<\/p>\n\n\n\n<p>Czyli zasi\u0119g zmiennych, to taki kontekst widoczno\u015bci zmiennej. Je\u015bli \u201eco\u015b\u201d zostanie wyt\u0142umaczone Pythonowi jako \u201eHello!\u201d, a \u201epies\u201d b\u0119dzie zdefiniowane jako na przyk\u0142ad \u201eMaks\u201d, to Python odczyta zmienn\u0105 w pewnym kontek\u015bcie. W momencie, gdy nast\u0105pi odwo\u0142anie do tej zmiennej, to Python zrozumie j\u0105 w zdefiniowanym kontek\u015bcie.\u00a0<\/p>\n\n\n\n<p>W skr\u00f3cie: mo\u017cna u\u017cywa\u0107 tej samej nazwy w r\u00f3\u017cnych kontekstach. Mo\u017ce ona znaczy\u0107 r\u00f3\u017cne rzeczy i Python b\u0119dzie wiedzia\u0142, o co chodzi. Wystarczy j\u0105 wcze\u015bniej zdefiniowa\u0107.<\/p>\n\n\n\n<p>Jakie mamy zasi\u0119gi zmiennych w Pythonie i co z tego wynika? Jak mo\u017cemy to wykorzysta\u0107 i na co nale\u017cy uwa\u017ca\u0107?<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">W Pythonie mamy 4 zasi\u0119gi zmiennych<\/h4>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"626\" src=\"https:\/\/infoshareacademy.com\/blog\/wp-content\/uploads\/2023\/09\/zasieg-zmiennych-1024x626.jpg\" alt=\"\" class=\"wp-image-12832\" srcset=\"https:\/\/infoshareacademy.com\/blog\/wp-content\/uploads\/2023\/09\/zasieg-zmiennych-1024x626.jpg 1024w, https:\/\/infoshareacademy.com\/blog\/wp-content\/uploads\/2023\/09\/zasieg-zmiennych-300x184.jpg 300w, https:\/\/infoshareacademy.com\/blog\/wp-content\/uploads\/2023\/09\/zasieg-zmiennych-768x470.jpg 768w, https:\/\/infoshareacademy.com\/blog\/wp-content\/uploads\/2023\/09\/zasieg-zmiennych.jpg 1200w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><strong>Zasi\u0119g lokalny<\/strong> &#8211; definicja zmiennej znajduje si\u0119 wewn\u0105trz funkcji. Zakresem lokalnym jest te\u017c zdefiniowanie czego\u015b wewn\u0105trz klasy. W Pythonie mo\u017cna mie\u0107 tych funkcji wiele i w ka\u017cdej funkcji mo\u017cna mie\u0107 tak samo nazwane zmienne, kt\u00f3re b\u0119d\u0105 odwo\u0142ywa\u0107 si\u0119 do r\u00f3\u017cnych warto\u015bci. Co wa\u017cne, te zmienne nie b\u0119d\u0105 dost\u0119pne poza t\u0105 funkcj\u0105.<\/p>\n\n\n\n<p>Wr\u00f3\u0107my zatem do rozm\u00f3w o pieskach. Je\u015bli osoba X z osob\u0105 Y rozmawia o piesku imieniem Maks, a potem z osob\u0105 Z o piesku imieniem Reks, to mimo \u017ce w obu przypadkach u\u017cywaj\u0105 tego samego s\u0142owa \u201epies\u201d, to osoba Z nie b\u0119dzie zna\u0142a Maksa. Osoba X b\u0119dzie musia\u0142a jej wyt\u0142umaczy\u0107, \u017ce mowa jest psie osoby Y.<\/p>\n\n\n\n<p><strong>Enclosing (nonlocal)<\/strong> &#8211; \u00a0to taki troch\u0119 specjalny zasi\u0119g (zakres zmiennych). Wyst\u0119puje on w sytuacji, gdy funkcja (a) jest zagnie\u017cd\u017cona w innej funkcji (b). To jest ten zasi\u0119g, kt\u00f3ry tak jakby otacza funkcj\u0119. To zmienna, kt\u00f3ra jest zdefiniowana w funkcji wewn\u0119trznej w kontek\u015bcie do funkcji zewn\u0119trznej. Czyli w Pythonie mo\u017cna definiowa\u0107 funkcje w kontek\u015bcie innych funkcji.<\/p>\n\n\n\n<p><strong>Zasi\u0119g globalny<\/strong> &#8211; zakres na poziomie pliku. To najszerszy zakres u\u017cytkownika, kt\u00f3ry mo\u017cemy zdefiniowa\u0107 na poziomie skryptu czy naszego modu\u0142u pythonowego.<\/p>\n\n\n\n<p><strong>Zakres built-in <\/strong>&#8211; czyli potocznie m\u00f3wi\u0105c, to takie \u201eoczywiste oczywisto\u015bci\u201d.<br>Czyli znowu w kontek\u015bcie rozmowy: je\u015bli osoba X zapyta osob\u0119 Y, kt\u00f3ry mamy teraz rok, to osoba Y bez g\u0142\u0119bszego zastanowienia b\u0119dzie wiedzia\u0142a, kt\u00f3ry mamy teraz rok. Tak samo jest w Pythonie. W kt\u00f3rymkolwiek miejscu Python zostanie poproszony \u201cwypisz co\u015b\u201d (print), to b\u0119dzie wiedzia\u0142, co to znaczy \u201eprint\u201d, bo ma to zdefiniowane w tym zakresie built-in. Jest to po prostu wbudowane w Pythona.<\/p>\n\n\n\n<p>Jak to wygl\u0105da w kodzie, w jaki spos\u00f3b one ze sob\u0105 wsp\u00f3\u0142graj\u0105?<\/p>\n\n\n\n<p class=\"has-text-align-center\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh4.googleusercontent.com\/YXnPvPw9mmEZ2JkKskSoXSsMM8pLiosrO090izGSfw3y4bKRq201lptci02aR61FdlshoMUvE-1qzMFw8VhI3AoXVC7tSylxZ_H_mW2t6EzfdvPM32cRwZbKvvhiXIMSDfqk2ESUuad8thr-RswSEzY\" width=\"602\" height=\"392\"><\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Przyk\u0142ad 1<\/h5>\n\n\n\n<p>Funkcja zdefiniowana w Pythonie. Przyjmuje ona dwa argumenty: liczy pr\u0119dko\u015b\u0107 \u015bredni\u0105 &#8211; przyjmuje argument \u201edistance\u201d i \u201etime\u201d i liczy jaki\u015b wynik \u201eresult\u201d. Ale wredna funkcja tego wyniku nie zwraca. Zamiast zwr\u00f3ci\u0107 wynik, to pisze, \u017ce nic nie zwraca. Ale wynik jest w \u015brodku dost\u0119pny.<\/p>\n\n\n\n<p class=\"has-text-align-center\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh5.googleusercontent.com\/LfkuO4HW4urq_EpWMNUV8MwSe47hvuglnb6HQSyySuNxNDjLzrbrDL-5gjXOIuT3UslXrU4d9upbyLTpLpMMbuI7Xkp49s3n2EKMCHtoL1V6Pe6cIEBWJs7rAJV-BwL4TFT_0kVktp-bk2lR5jzhQWw\" width=\"376\" height=\"74\"><\/p>\n\n\n\n<p>W zwi\u0105zku z tym sprytny programista m\u00f3g\u0142by stwierdzi\u0107, \u017ce zamiast zwraca\u0107 ten wynik, to mo\u017cna po prostu si\u0119 do niego odwo\u0142a\u0107, bo zmienna zosta\u0142a przecie\u017c zdefiniowana (result).<\/p>\n\n\n\n<p class=\"has-text-align-center\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh3.googleusercontent.com\/eFtVSN0kGDoRKRBrSjWDqmuVjutC9hAvkVLBxYYWgjF89Xya0r5EbNzj-x3rTXHcffENMnFvoVJ_goVVuRRVNrZCo4_IXTX-7VHTR-uLBhpQtHHzDIwGv4Gz_ieVJUKaV5qwep0kE0NHi09wUrnNXO0\" width=\"403\" height=\"147\"><\/p>\n\n\n\n<p>PyCharm podkre\u015bla \u201eresult\u201d na czerwono, co sugeruje, \u017ce to si\u0119 nie uda. I je\u017celi skrypt zostanie uruchomiony, to wida\u0107, \u017ce \u201eNic nie zwracam &#8211; ha ha!\u201d si\u0119 wypisa\u0142o, ale potem pojawi\u0142 si\u0119 b\u0142\u0105d nazwy.<\/p>\n\n\n\n<p class=\"has-text-align-center\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh4.googleusercontent.com\/z4SNc0guVBy27sCPpYFu2z-e73gYC-wTlkzxT5Wlb-Re87m_NQY_VLGI9beLANY-HvWZH-NeT_B-u8CrrHxenQUexctZodZydgsQwPcXrHVw8bJORFBfk9110nPgNncQy6MLDp0ZD1ZWYuofgMCFg1o\" width=\"602\" height=\"96\"><\/p>\n\n\n\n<p>Tak wi\u0119c Python nie wypisa\u0142 tej zmiennej \u201eresult\u201d, mimo \u017ce ta zmienna zosta\u0142a wcze\u015bniej w tym skrypcie zdefiniowana.<\/p>\n\n\n\n<p>Dlaczego nie mo\u017cna si\u0119 do tego dosta\u0107? Dlatego, \u017ce w\u0142a\u015bnie jeste\u015bmy w innym zakresie.<br>Tutaj jest zakres globalny, poziom modu\u0142u skryptu:<\/p>\n\n\n\n<p class=\"has-text-align-center\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh3.googleusercontent.com\/0nRiTnoOAQaHGJs_SA5KuFwnqKhZA7fHfzvOxc9O5d-wO2JpvfSPmO5XoEjZX0_oPb_I9rDKYs-ocpREZwtQJt9ckdVijeUjs8hwTn6gXnWDb6EZTgKWnTRVeF6vYzw34QDxly6FZA9OrRnq5rPIAi0\" width=\"174\" height=\"68\"><\/p>\n\n\n\n<p>A ta zmienna jest widoczna tylko w zakresie lokalnym, tylko w tej jednej konwersacji. Mo\u017cna si\u0119 do niej odwo\u0142ywa\u0107 tylko w ramach tej jednej funkcji.<\/p>\n\n\n\n<p class=\"has-text-align-center\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh6.googleusercontent.com\/L4v1kEEhWAr_VzBL3NxXMsxLU4xLl1YkKxLXROBXuVvMYh3kBb0gtDniihpbCwrtMLVbiY06A-S1KEmqyeqFp_4Mw_tL1qJKH_g3oh9tuGgBpgeRcTuHIIo4THa5lCcJLC2pqwuWuRY_8tU9V7iOvIM\" width=\"355\" height=\"83\"><\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Przyk\u0142ad 2<\/h5>\n\n\n\n<p>Zmienna \u201edistance\u201d zosta\u0142a zdefiniowana na zewn\u0105trz, czyli na poziomie globalnym (na poziomie modu\u0142u). Mimo \u017ce nie zosta\u0142a ona przekazana do funkcji, to mo\u017cna si\u0119 do niej bez problemu w tej funkcji odwo\u0142a\u0107. Wi\u0119c wszystko jest w porz\u0105dku.<\/p>\n\n\n\n<p class=\"has-text-align-center\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh3.googleusercontent.com\/fdgtqU8Di9QKSemxaUpoeYvsLbEDWOsS3RXCITqPJuy6Qmu7s0N8Njr6L1c3kdfpwplSK04GuXOD4RCVAmLKc2eKWkwodvVPMgeZ9fLJU_npD2xxcFPt2BBEAvFuJaqYd2cV-AVtbekldsgdyZtRz1c\" width=\"602\" height=\"175\"><\/p>\n\n\n\n<p>Wi\u0119c wszystko jest w porz\u0105dku, dzia\u0142a:<\/p>\n\n\n\n<p class=\"has-text-align-center\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh4.googleusercontent.com\/iTosib_wmRWuAbAXaQOgFKtGkgZlNCs0hxYSCYXsJCFqQHjE0lHLdPKaJRMEAmJOMA1LX6nhTeYh5ryMCaPooCQIodZQZ2zTEBItSCk9xRNEanxqDi6mIHtmqaJNCLYOLdMk3yQ9XeVyF9dRmW57QwY\" width=\"602\" height=\"56\"><\/p>\n\n\n\n<p>Przeliczy\u0142a si\u0119 pr\u0119dko\u015b\u0107 \u015brednia, mimo \u017ce zmienna \u201edistance\u201d nie zosta\u0142a przekazana.<br><br>Dlaczego tak si\u0119 sta\u0142o, mimo \u017ce ta funkcja zosta\u0142a zdefiniowana wcze\u015bniej, ni\u017c my j\u0105 tworzymy i t\u0142umaczymy Pythonowi, co to znaczy?<\/p>\n\n\n\n<p>Sta\u0142o si\u0119 tak, poniewa\u017c zmienna \u201edistance\u201d zosta\u0142a utworzona na poziomie globalnym, a funkcja zosta\u0142a wywo\u0142ana p\u00f3\u017aniej, ni\u017c ta zmienna \u201edistance\u201d zosta\u0142a zdefiniowana. Czyli zosta\u0142a wywo\u0142ana w tym miejscu:<\/p>\n\n\n\n<p class=\"has-text-align-center\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh6.googleusercontent.com\/oshkpBB3MlkBjKexZ86l5NPqpK9eQnJXrPvZ9w27yD3qkSFH4M6rLmpqmUTYjHspNtKdic3UhGoS1Re5yy7Eo6PCt2jqTyS9NSiq6Yus6njZpqIAcqVv5Bbn968F4xzBctxQtMbksqcYqC4rbY8RhFM\" width=\"324\" height=\"105\"><\/p>\n\n\n\n<p>Python poszukuje tej zmiennej dopiero wtedy, gdy ma wykona\u0107 ten kod, nie wcze\u015bniej. Czyli w momencie, kiedy funkcja \u201epolicz pr\u0119dko\u015b\u0107 \u015bredni\u0105\u201d zosta\u0142a wywo\u0142ana, to Python wszed\u0142 tutaj do \u015brodka. Sta\u0142o si\u0119 to ju\u017c po zdefiniowaniu zmiennej \u201edistance\u201d. I dopiero wtedy Python poszuka\u0142 sobie tej zmiennej \u201edistance\u201d. I jak jej szuka\u0142, to wykorzysta\u0142 kolejno\u015b\u0107 zakresu, o kt\u00f3rej by\u0142a mowa wcze\u015bniej. Czyli najpierw spr\u00f3bowa\u0142 poszuka\u0107 tej zmiennej na poziomie lokalnym i jej tam nie znalaz\u0142. Nast\u0119pnie poszuka\u0142 jej na poziomie enclosing i te\u017c jej nie znalaz\u0142. Potem szuka\u0142 jej na poziomie globalnym i w\u0142a\u015bnie tam j\u0105 znalaz\u0142. Gdyby jej jednak nie znalaz\u0142 na \u017cadnym poziomie, to wtedy by wyrzuci\u0142 wyj\u0105tek, \u017ce nie rozumie tego poj\u0119cia.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Przyk\u0142ad 3<\/h5>\n\n\n\n<p>Zmienna \u201edistance\u201d, kt\u00f3ra, bardzo podobnie jak by\u0142o wcze\u015bniej, jest zdefiniowana wewn\u0105trz innej funkcji.<\/p>\n\n\n\n<p class=\"has-text-align-center\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh5.googleusercontent.com\/cbbDpmTOPx6POWFDw1gHxanCnmjwO7OzEnRKky-WylMF9YxHBCjE48P7dZfOlfAVDNmwOxMJO_nCR0ZeHVgaZDjeTUGiGnQ4n9IdGsntUiazFVEV9kHxTPDrME4fSjZ50W8Rhgigb_uVx8rFBcKyKq0\" width=\"602\" height=\"185\"><\/p>\n\n\n\n<p>I ta funkcja definiuje zmienn\u0105 \u201edistance\u201d i tu ju\u017c to nie dzia\u0142a. Dlaczego to nie b\u0119dzie dzia\u0142a\u0107? Pojawi\u0142 si\u0119 b\u0142\u0105d.<\/p>\n\n\n\n<p class=\"has-text-align-center\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh3.googleusercontent.com\/xvUyI0KiUG9NONdmIzn7MHiwOjNE50yFRK9BHKj5PYnMsBnhSE9Sg3AT3EQdwbsnupV9iUvRRIVKgblaIIwPIlrRf4-dyaG7YX0gAOPikTJrrlABvsBGRI1osdv2UW_2D0uQ3S6RjU4gjhuXWVtoB6w\" width=\"602\" height=\"84\"><\/p>\n\n\n\n<p>Nie b\u0119dzie dzia\u0142a\u0107 dlatego, \u017ce jest to poziom lokalny.<\/p>\n\n\n\n<p class=\"has-text-align-center\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh6.googleusercontent.com\/Xuwml1xLFCiP66BCNX5RexeCLVLLPsgNaOXMRAI89FIbuNih9_a__GyY378ueRaQTheo_CeeHAeRRfrU3QwsPRTGow9lb4vVjVbEP6yynEtQ4xYrD4k2RAzxwCbH3kam1qcRaWIL02iQ-odU8z57nwg\" width=\"565\" height=\"174\"><\/p>\n\n\n\n<p>Wida\u0107 tu jeden zasi\u0119g lokalny jednej funkcji (a) i jeden zasi\u0119g lokalny drugiej funkcji (b). I teraz ten zasi\u0119g lokalny funkcji (a) nie jest dost\u0119pny dla funkcji (b).<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Przyk\u0142ad 4<\/h5>\n\n\n\n<p>W jaki spos\u00f3b mo\u017cna manipulowa\u0107 t\u0105 warto\u015bci\u0105 globaln\u0105? W jaki spos\u00f3b mo\u017cemy j\u0105 zmienia\u0107? Mo\u017cna wypisywa\u0107 warto\u015b\u0107 globaln\u0105 w ten spos\u00f3b:<\/p>\n\n\n\n<p class=\"has-text-align-center\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh5.googleusercontent.com\/8UaLHxNbbYIrRTwWL48puQ5CGBVJf3oRcyeBXk7acJioXSLT9lWUGHP2PygIY_xTjtnzuYL3WT1driPfEtQgBCv8Kbi-cStCG5IzjqqCXU12KLp_ezmJeuE8RZxGMe7FIi3VjH0N3pqXfv3_SJzcZrU\" width=\"602\" height=\"145\"><\/p>\n\n\n\n<p>Czyli warto\u015b\u0107 jest zdefiniowana na poziomie globalnym. Nast\u0119pnie nast\u0105pi odwo\u0142anie do funkcji, kt\u00f3rej u\u017cywa. Wszystko dzia\u0142a, mo\u017cna odwo\u0142a\u0107 si\u0119 do tej warto\u015bci i j\u0105 wypisa\u0107. A co by by\u0142o, gdyby\u015bmy chcieli np. zmodyfikowa\u0107 warto\u015b\u0107, kt\u00f3ra nie zosta\u0142a zdefiniowana w tej funkcji, tylko zosta\u0142a zdefiniowana na poziomie skryptu wcze\u015bniej? Jak by to wygl\u0105da\u0142o? Mo\u017cna spr\u00f3bowa\u0107 zrobi\u0107 to w ten spos\u00f3b:<\/p>\n\n\n\n<p class=\"has-text-align-center\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh5.googleusercontent.com\/myijjGA1GZA8UbBt8ouFeDq4prOU96ShK97W8VKaiewAfdGLhEOI9WTwu3TAXVI8D6LFlL-RtldP6A_5xV_9tkWz_pK6Uyj0ZrC6U2k6cBhsyEN8PMI_46qJO-kyxJqVxu1dKYPrIAVH6q9Uq3UOVkU\" width=\"444\" height=\"232\"><\/p>\n\n\n\n<p>Jak ju\u017c widzicie, funkcja nazywa si\u0119 filed_modify_global_name, czyli nam si\u0119 to najpewniej nie uda. I wygl\u0105da to w ten spos\u00f3b: <\/p>\n\n\n\n<p>Definiujemy najpierw nazw\u0119, na przyk\u0142ad imi\u0119 \u201cMiko\u0142aj\u201d i wypisujemy jego warto\u015b\u0107 przed wywo\u0142aniem funkcji. Nast\u0119pnie wywo\u0142ujemy t\u0119 funkcj\u0119, kt\u00f3ra powinna przestawi\u0107 t\u0119 zmienn\u0105 na \u201cKuba\u201d. Wypisujemy warto\u015b\u0107 wewn\u0105trz funkcji i patrzymy, jaka jest po funkcji: czy si\u0119 to zmieni\u0142o.<\/p>\n\n\n\n<p class=\"has-text-align-center\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh4.googleusercontent.com\/hJ6zqNDX0-2hpqnXFC6AuRYNuZi-B-KkFoPFcy36ZokzfQR_PbUSkqnXiuyOv2hFS0rZvDPnw73T8TzpHhK5GZ-AE_gDifQ8b5BGt0_gXqYGTkGPuNcFnHEMWHeIQEGXfJMqh36W_MPti3bDvdz2WEI\" width=\"602\" height=\"77\"><\/p>\n\n\n\n<p>Przed funkcj\u0105 jest \u201eMiko\u0142aj\u201d, wewn\u0105trz funkcji \u201eKuba\u201d i po funkcji jest znowu \u201eMiko\u0142aj\u201d. Wynika to z faktu, \u017ce je\u017celi odwo\u0142ujemy si\u0119 do zmiennej, to Python zaczyna jej poszukiwa\u0107. Czyli najpierw szuka jej na obszarze lokalnym, nast\u0119pnie na obszarze globalnym i tak dalej. <\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Uwaga!<\/h4>\n\n\n\n<p>Je\u017celi jeste\u015bmy wewn\u0105trz funkcji w kontek\u015bcie lokalnym i Python nie znajdzie zmiennej w obszarze lokalnym i to wyra\u017cenie, kt\u00f3re my wykonujemy, to nie jest odczyt tej zmiennej, tylko to jest zapis do tej zmiennej, to Python nie b\u0119dzie ju\u017c dalej szuka\u0142 tej zmiennej. Po prostu j\u0105 stworzy na obszarze lokalnym i stworzy zmienn\u0105 o takiej samej nazwie. Czyli teraz s\u0105 dwie zmienne o nazwie \u201ename\u201d, kt\u00f3re odnosz\u0105 si\u0119 do r\u00f3\u017cnych warto\u015bci. W jednej jest ukryty Miko\u0142aj, w drugiej jest ukryty \u201eKuba\u201d i funkcjonuj\u0105 r\u00f3wnocze\u015bnie, poniewa\u017c jedna jest w zasi\u0119gu globalnym, a druga w zasi\u0119gu lokalnym. Powoduje to, \u017ce nazwa \u201ename\u201d (zmienn\u0105 globaln\u0105) zosta\u0142a przys\u0142oni\u0119ta i nie mo\u017cna jej niejako zmodyfikowa\u0107. Ta modyfikacja si\u0119 nie uda\u0142a. Ta zmienna jest nietkni\u0119ta.<\/p>\n\n\n\n<p>To, \u017ce nie mo\u017cna modyfikowa\u0107 tej zmiennej na zewn\u0105trz, jest w og\u00f3le bardzo wa\u017cn\u0105 w\u0142a\u015bciwo\u015bci\u0105.<\/p>\n\n\n\n<p>Je\u017celi by\u015bmy natomiast chcieli to zrobi\u0107, to w Pythonie mo\u017cemy wywo\u0142a\u0107 funkcj\u0119, kt\u00f3ra zmodyfikuje t\u0119 zmienn\u0105, kt\u00f3ra jest na zewn\u0105trz, mimo \u017ce funkcja istnieje w kontek\u015bcie lokalnym. Nale\u017cy tylko to Pythonowi wprost powiedzie\u0107. Wtedy trzeba u\u017cy\u0107 jakiego\u015b kluczowego \u201eglobal\u201d, kt\u00f3re m\u00f3wi Pythonowi: Pythonie drogi, tej zmiennej, kt\u00f3rej \u201ename\u201d b\u0119dziemy za chwil\u0119 u\u017cywa\u0107, nie szukaj tu lokalnie, nie tw\u00f3rz jej lokalnie. Ona istnieje w kontek\u015bcie globalnym. We\u017a j\u0105 sobie z tego tekstu globalnego i do niej b\u0119dziemy si\u0119 odwo\u0142ywa\u0107. B\u0119dziemy j\u0105 zaraz modyfikowa\u0107 i wiemy, co robimy. To jest po to, \u017ceby\u015bmy powiedzieli wprost Pythonowi, \u017ce wiemy, co robimy. <\/p>\n\n\n\n<p>Jak uruchomi\u0119 ten kod, to jest przed funkcj\u0105 Miko\u0142aj, wewn\u0105trz funkcji Kuba i po funkcji jest r\u00f3wnie\u017c Kuba. Czyli rzeczywi\u015bcie ta zmienna zosta\u0142a zmodyfikowana.<\/p>\n\n\n\n<p class=\"has-text-align-center\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh4.googleusercontent.com\/E3Knl1ugxDMRBynuGkBGitvNs8KIjH_r97EweJIoSHW2BhbPhUn_Yu3MS0HT2FG2B1RKA3zCExscs5P2eo3enQaR7ARihcc9vBPf5737zLFs7VW0SenJrz1som74hMuAcBpopoWE4iWlrLQ1l4CbR8U\" width=\"602\" height=\"56\"><\/p>\n\n\n\n<p>Pami\u0119tajcie! Takie zachowanie jest zazwyczaj niechciane. U\u017cywanie tego rodzaju konstrukcji, w kt\u00f3rej definiujemy sobie zmienn\u0105 globaln\u0105 i potem j\u0105 modyfikujemy, jest czym\u015b, czego nie chcemy mie\u0107 w kodzie. W og\u00f3le stosowania zmiennych globalnych powinni\u015bmy unika\u0107.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Dlaczego?<\/h5>\n\n\n\n<p>Je\u017celi program b\u0119dzie bardzo z\u0142o\u017cony, albo cho\u0107 \u015brednio z\u0142o\u017cony, w kt\u00f3rym jest du\u017co zmiennych globalnych, i w kt\u00f3rym ka\u017cdy kawa\u0142ek programu mo\u017ce te zmienne globalne modyfikowa\u0107, i co wi\u0119cej &#8211; b\u0119dzie je modyfikowa\u0107, to my nigdy nie b\u0119dziemy wiedzie\u0107, co tam si\u0119 tak naprawd\u0119 dzieje, kt\u00f3ra rzecz ma jak\u0105 warto\u015b\u0107. Nie b\u0119dzie takiego liniowego, \u0142adnego przej\u015bcia przez algorytm, aby m\u00f3c go przeanalizowa\u0107, jako ludzie. Zamiast tego zmienne globalne b\u0119d\u0105 si\u0119 nadpisywa\u0107. Wi\u0119c tak naprawd\u0119 stosowanie zmiennych globalnych nale\u017cy ograniczy\u0107 tylko do jednego konkretnego przypadku.<\/p>\n\n\n\n<p>Oczywi\u015bcie s\u0105 pewnie jakie\u015b uzasadnione przypadki, gdzie mo\u017cna tego u\u017cy\u0107, mo\u017ce jakie\u015b proste skrypty itd. Ale lepiej tego nie praktykowa\u0107. Warto, jako tak\u0105 regu\u0142\u0119 bezpieczn\u0105, stosowa\u0107 to, \u017ce nie u\u017cywamy zmiennych globalnych poza jednym konkretnym przypadkiem, (o tym za moment).<\/p>\n\n\n\n<p>Do tego przypadku nie jest potrzebne s\u0142\u00f3wko \u201eglobal\u201d. Sytuacja, w kt\u00f3rej konieczne jest u\u017cycie \u201eglobal\u201d, jest niezwykle rzadka. Je\u015bli ju\u017c u\u017cyte jest \u201eglobal\u201d, to najpewniej mo\u017cna to zrobi\u0107 \u0142adniej i bezpieczniej. Na przyk\u0142ad wprost przekazuj\u0105c jak\u0105\u015b warto\u015b\u0107, zamiast dodawa\u0107 jak\u0105\u015b globaln\u0105 sta\u0142\u0105, kt\u00f3ra jest og\u00f3lnie niebezpieczna.<\/p>\n\n\n\n<p>Przy ma\u0142ych programach mo\u017cna nad tym zapanowa\u0107. Jednak programy maj\u0105 to do siebie, \u017ce s\u0105 rozbudowywane, a im wi\u0119kszy program, tym \u0142atwiej straci\u0107 kontrol\u0119 i napotka\u0107 sporo nieprzewidzianych efekt\u00f3w. No i, co si\u0119 z tym wi\u0105\u017ce, du\u017co problem\u00f3w.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">W jakiej sytuacji mo\u017cna u\u017cywa\u0107 zmiennych globalnych?<\/h4>\n\n\n\n<p>Ot\u00f3\u017c jest to sytuacja, kiedy mamy zmienn\u0105 globaln\u0105 jako sta\u0142\u0105, przy kt\u00f3rej znajduj\u0105 si\u0119 jakie\u015b rzeczy, zdefiniowane jako sta\u0142e.<\/p>\n\n\n\n<p class=\"has-text-align-center\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh6.googleusercontent.com\/p4UJyp6rUmgeTsmUD3v4UjVDyaG55Enp_amorPv_z--tQ65NluQQq_QoIX0q6I380X6PwkcwgzlMu-kG79O1Du6Qtu-iZW_Wo98kCLDobBpRftOYp4lah7Yp8N01jW_FuXZuG5xTFLdMZk-hEyRzhMY\" width=\"416\" height=\"140\"><\/p>\n\n\n\n<p>Tutaj jest przyk\u0142ad z \u03c0 (PI). W Pythonie \u03c0 jest w pakiecie Math, wi\u0119c nie trzeba go ustawia\u0107. Po prostu mo\u017cna zaimportowa\u0107 \u03c0, czy jak\u0105kolwiek inn\u0105 sta\u0142\u0105, kt\u00f3ra nie jest zdefiniowana w Pythonie.<\/p>\n\n\n\n<p>\u017beby zaznaczy\u0107 to, \u017ce jest to sta\u0142a i nie powinno si\u0119 jej modyfikowa\u0107, nale\u017cy wpisa\u0107 j\u0105 wielkimi literami.<\/p>\n\n\n\n<p>Je\u017celi mamy jak\u0105\u015b sta\u0142\u0105, kt\u00f3rej nie b\u0119dziemy modyfikowa\u0107, to mo\u017ce by\u0107 ona globalna i mo\u017cna jej u\u017cywa\u0107 w r\u00f3\u017cnych miejscach. To jest sta\u0142a i b\u0119dzie tylko do odczytu, wi\u0119c nie ma tego ryzyka, \u017ce kto\u015b j\u0105 przestawi. Zdecydowanie nie nale\u017cy tego robi\u0107. Jest to po prostu bezpieczne. To jest jaka\u015b liczba, jaka\u015b warto\u015b\u0107. Je\u015bli zosta\u0142a zdefiniowana i mamy taki \u201eworek\u201d z warto\u015bciami i jak\u0105\u015b konfiguracj\u0105, to mo\u017cna si\u0119 do niego odwo\u0142a\u0107. Nie chcemy przekazywa\u0107 tej warto\u015bci przez 6 wywo\u0142a\u0144 funkcji w d\u00f3\u0142. Po prostu niech ona tam b\u0119dzie globalna, a my sobie zaimportujemy tylko ten modu\u0142 globalny i b\u0119dziemy mieli do tego dost\u0119p.<\/p>\n\n\n\n<p>To jest ten jeden przypadek, kiedy mo\u017cna sobie bezpiecznie u\u017cy\u0107 tych zmiennych globalnych. Na pewno s\u0105 jeszcze jakie\u015b takie przypadki brzegowe, \u017ce to te\u017c by\u0142oby w porz\u0105dku, nie chcemy by\u0107 zero-jedynkowi. Ale jak zaczynamy przygod\u0119 z programowaniem, to dobr\u0105 regu\u0142\u0105 jest to, \u017ceby jednak tego \u201eglobala\u201d unika\u0107.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Przyk\u0142ady z kontekstem nonlocal.<\/h5>\n\n\n\n<p>Wyst\u0119puje w sytuacji, w kt\u00f3rej mamy funkcj\u0119 wrapuj\u0105c\u0105 i funkcj\u0119 wewn\u0119trzn\u0105. I ta zmienna jest w kontek\u015bcie do tej funkcji.<\/p>\n\n\n\n<p class=\"has-text-align-center\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh3.googleusercontent.com\/3e-Srq2dNySrBpANAt2LkE8bmZKS6o8OW6uUDEFrExEajQm456RfSEI7flqeHC02nMRf52FP7nv_6w6OBrUW1dL07SihFRuxIpZYsORQhzWYaohoF3J0R1K7wPcSQfRqzFcERuXf9VUEr9OENvyObHc\" width=\"297\" height=\"326\"><\/p>\n\n\n\n<p>I tutaj b\u0119dzie \u201enonlocal\u201d dlatego, \u017ce dzia\u0142a analogicznie do global. One maj\u0105 bardzo podobn\u0105 relacj\u0119 wzgl\u0119dem siebie i zamiast \u201eglobal\u201d jest s\u0142\u00f3wko kluczowe \u201enonlocal\u201d. Pozwala zmodyfikowa\u0107 zmienn\u0105, zamiast przys\u0142ania\u0107 j\u0105 na poziomie \u201eenclosing\u201d.<br>Przy czym znowu dok\u0142adnie ta sama historia jest z \u201eglobal\u201d. Definiowanie tutaj jest jak najbardziej w porz\u0105dku. Przyj\u0119cie jakiego\u015b argumentu czy jakiej\u015b warto\u015bci, kt\u00f3ra b\u0119dzie odczytywana poni\u017cej, jest jak najbardziej w porz\u0105dku, ale modyfikowanie tej warto\u015bci jest ju\u017c kwesti\u0105 dyskusyjn\u0105. S\u0105 jakie\u015b przypadki, gdzie mo\u017cna by to robi\u0107, ale trzeba uwa\u017ca\u0107, bo wprowadzamy sobie du\u017c\u0105 z\u0142o\u017cono\u015b\u0107 i potencjalne ryzyko problem\u00f3w naszego programu.<\/p>\n\n\n\n<p>Zainteresowa\u0142y Ci\u0119 zasi\u0119gi zmiennych?<\/p>\n\n\n\n<div class=\"wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-16018d1d wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button is-style-fill\"><a class=\"wp-block-button__link has-background has-text-align-center wp-element-button\" href=\"https:\/\/infoshareacademy.com\/kursy-python\/?&amp;utm_source=blog&amp;utm_medium=organic\" style=\"background-color:#f20b32\"><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-white-color\">Sprawd\u017a ofert\u0119 kurs\u00f3w Python w infoShare Academy!<\/mark><\/a><\/div>\n<\/div>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"859\" height=\"634\" src=\"https:\/\/infoshareacademy.com\/blog\/wp-content\/uploads\/2023\/08\/Mem-859x634px-1.png\" alt=\"\" class=\"wp-image-12798\" srcset=\"https:\/\/infoshareacademy.com\/blog\/wp-content\/uploads\/2023\/08\/Mem-859x634px-1.png 859w, https:\/\/infoshareacademy.com\/blog\/wp-content\/uploads\/2023\/08\/Mem-859x634px-1-300x221.png 300w, https:\/\/infoshareacademy.com\/blog\/wp-content\/uploads\/2023\/08\/Mem-859x634px-1-768x567.png 768w\" sizes=\"auto, (max-width: 859px) 100vw, 859px\" \/><\/figure>\n\n\n\n<p>Wpis powsta\u0142 na podstawie rozmowy z trenerem infoShare Academy<br>Miko\u0142ajem Lewandowskim.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Python jest jednym z najpopularniejszych j\u0119zyk\u00f3w programowania, u\u017cywanym g\u0142\u00f3wnie w dziedzinie analizy danych, uczenia maszynowego, automatyzacji zada\u0144 i tworzenia stron internetowych. Python dla pocz\u0105tkuj\u0105cych &#8211; warto? Jedn\u0105 z g\u0142\u00f3wnych cech Pythona jest jego czytelno\u015b\u0107 &#8211; posiada czyteln\u0105 i intuicyjn\u0105 sk\u0142adni\u0119, kt\u00f3ra u\u0142atwia pisanie i czytanie kodu. Do tego charakteryzuje si\u0119 r\u00f3wnie\u017c ogromn\u0105 ilo\u015bci\u0105 bibliotek i &hellip;<\/p>\n","protected":false},"author":1,"featured_media":12797,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[26,41],"tags":[55,69,72,169,168],"class_list":["post-12794","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-artykul","category-python","tag-kurs-programowania","tag-nauka-programowania","tag-poczatki-programowania","tag-programista-python","tag-samodzielna-nauka-programowania"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.7 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Python - zasi\u0119gi zmiennych - infoShare Academy Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/infoshareacademy.com\/blog\/python-zasiegi-zmiennych\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Python - zasi\u0119gi zmiennych - infoShare Academy Blog\" \/>\n<meta property=\"og:description\" content=\"Python jest jednym z najpopularniejszych j\u0119zyk\u00f3w programowania, u\u017cywanym g\u0142\u00f3wnie w dziedzinie analizy danych, uczenia maszynowego, automatyzacji zada\u0144 i tworzenia stron internetowych. Python dla pocz\u0105tkuj\u0105cych &#8211; warto? Jedn\u0105 z g\u0142\u00f3wnych cech Pythona jest jego czytelno\u015b\u0107 &#8211; posiada czyteln\u0105 i intuicyjn\u0105 sk\u0142adni\u0119, kt\u00f3ra u\u0142atwia pisanie i czytanie kodu. Do tego charakteryzuje si\u0119 r\u00f3wnie\u017c ogromn\u0105 ilo\u015bci\u0105 bibliotek i &hellip;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/infoshareacademy.com\/blog\/python-zasiegi-zmiennych\/\" \/>\n<meta property=\"og:site_name\" content=\"infoShare Academy Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/infoshareacademy\" \/>\n<meta property=\"article:published_time\" content=\"2023-08-25T08:48:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-09-21T13:05:40+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/infoshareacademy.com\/blog\/wp-content\/uploads\/2023\/08\/Header-1255x837px-2.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1255\" \/>\n\t<meta property=\"og:image:height\" content=\"837\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"ggolebiewski\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Napisane przez\" \/>\n\t<meta name=\"twitter:data1\" content=\"ggolebiewski\" \/>\n\t<meta name=\"twitter:label2\" content=\"Szacowany czas czytania\" \/>\n\t<meta name=\"twitter:data2\" content=\"20 minut\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/infoshareacademy.com\/blog\/python-zasiegi-zmiennych\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/infoshareacademy.com\/blog\/python-zasiegi-zmiennych\/\"},\"author\":{\"name\":\"ggolebiewski\",\"@id\":\"https:\/\/infoshareacademy.com\/blog\/#\/schema\/person\/6ff6884acf142f159cdc9f059302dbf5\"},\"headline\":\"Python &#8211; zasi\u0119gi zmiennych\",\"datePublished\":\"2023-08-25T08:48:00+00:00\",\"dateModified\":\"2023-09-21T13:05:40+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/infoshareacademy.com\/blog\/python-zasiegi-zmiennych\/\"},\"wordCount\":2884,\"publisher\":{\"@id\":\"https:\/\/infoshareacademy.com\/blog\/#organization\"},\"keywords\":[\"kurs programowania\",\"nauka programowania\",\"pocz\u0105tki programowania\",\"programista python\",\"samodzielna nauka programowania\"],\"articleSection\":[\"Artyku\u0142\",\"Python\"],\"inLanguage\":\"pl-PL\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/infoshareacademy.com\/blog\/python-zasiegi-zmiennych\/\",\"url\":\"https:\/\/infoshareacademy.com\/blog\/python-zasiegi-zmiennych\/\",\"name\":\"Python - zasi\u0119gi zmiennych - infoShare Academy Blog\",\"isPartOf\":{\"@id\":\"https:\/\/infoshareacademy.com\/blog\/#website\"},\"datePublished\":\"2023-08-25T08:48:00+00:00\",\"dateModified\":\"2023-09-21T13:05:40+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/infoshareacademy.com\/blog\/python-zasiegi-zmiennych\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/infoshareacademy.com\/blog\/python-zasiegi-zmiennych\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/infoshareacademy.com\/blog\/python-zasiegi-zmiennych\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/infoshareacademy.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Python &#8211; zasi\u0119gi zmiennych\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/infoshareacademy.com\/blog\/#website\",\"url\":\"https:\/\/infoshareacademy.com\/blog\/\",\"name\":\"infoShare Academy Blog\",\"description\":\"Strona o szkoleniach w IT\",\"publisher\":{\"@id\":\"https:\/\/infoshareacademy.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/infoshareacademy.com\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"pl-PL\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/infoshareacademy.com\/blog\/#organization\",\"name\":\"infoShare Academy\",\"url\":\"https:\/\/infoshareacademy.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/infoshareacademy.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/infoshareacademy.com\/blog\/wp-content\/uploads\/2022\/11\/infoShare-Academy-ver-white-with-background-1000x1000px.jpg\",\"contentUrl\":\"https:\/\/infoshareacademy.com\/blog\/wp-content\/uploads\/2022\/11\/infoShare-Academy-ver-white-with-background-1000x1000px.jpg\",\"width\":1000,\"height\":1000,\"caption\":\"infoShare Academy\"},\"image\":{\"@id\":\"https:\/\/infoshareacademy.com\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/infoshareacademy\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/infoshareacademy.com\/blog\/#\/schema\/person\/6ff6884acf142f159cdc9f059302dbf5\",\"name\":\"ggolebiewski\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/infoshareacademy.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/13f23d89507ae5070cad6333837f17254df31fb525160d0785fc8ea48a3b5c54?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/13f23d89507ae5070cad6333837f17254df31fb525160d0785fc8ea48a3b5c54?s=96&d=mm&r=g\",\"caption\":\"ggolebiewski\"},\"sameAs\":[\"https:\/\/infoshareacademy.com\/bbb2\"],\"url\":\"https:\/\/infoshareacademy.com\/blog\/author\/ggolebiewski\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Python - zasi\u0119gi zmiennych - infoShare Academy Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/infoshareacademy.com\/blog\/python-zasiegi-zmiennych\/","og_locale":"pl_PL","og_type":"article","og_title":"Python - zasi\u0119gi zmiennych - infoShare Academy Blog","og_description":"Python jest jednym z najpopularniejszych j\u0119zyk\u00f3w programowania, u\u017cywanym g\u0142\u00f3wnie w dziedzinie analizy danych, uczenia maszynowego, automatyzacji zada\u0144 i tworzenia stron internetowych. Python dla pocz\u0105tkuj\u0105cych &#8211; warto? Jedn\u0105 z g\u0142\u00f3wnych cech Pythona jest jego czytelno\u015b\u0107 &#8211; posiada czyteln\u0105 i intuicyjn\u0105 sk\u0142adni\u0119, kt\u00f3ra u\u0142atwia pisanie i czytanie kodu. Do tego charakteryzuje si\u0119 r\u00f3wnie\u017c ogromn\u0105 ilo\u015bci\u0105 bibliotek i &hellip;","og_url":"https:\/\/infoshareacademy.com\/blog\/python-zasiegi-zmiennych\/","og_site_name":"infoShare Academy Blog","article_publisher":"https:\/\/www.facebook.com\/infoshareacademy","article_published_time":"2023-08-25T08:48:00+00:00","article_modified_time":"2023-09-21T13:05:40+00:00","og_image":[{"width":1255,"height":837,"url":"https:\/\/infoshareacademy.com\/blog\/wp-content\/uploads\/2023\/08\/Header-1255x837px-2.png","type":"image\/png"}],"author":"ggolebiewski","twitter_card":"summary_large_image","twitter_misc":{"Napisane przez":"ggolebiewski","Szacowany czas czytania":"20 minut"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/infoshareacademy.com\/blog\/python-zasiegi-zmiennych\/#article","isPartOf":{"@id":"https:\/\/infoshareacademy.com\/blog\/python-zasiegi-zmiennych\/"},"author":{"name":"ggolebiewski","@id":"https:\/\/infoshareacademy.com\/blog\/#\/schema\/person\/6ff6884acf142f159cdc9f059302dbf5"},"headline":"Python &#8211; zasi\u0119gi zmiennych","datePublished":"2023-08-25T08:48:00+00:00","dateModified":"2023-09-21T13:05:40+00:00","mainEntityOfPage":{"@id":"https:\/\/infoshareacademy.com\/blog\/python-zasiegi-zmiennych\/"},"wordCount":2884,"publisher":{"@id":"https:\/\/infoshareacademy.com\/blog\/#organization"},"keywords":["kurs programowania","nauka programowania","pocz\u0105tki programowania","programista python","samodzielna nauka programowania"],"articleSection":["Artyku\u0142","Python"],"inLanguage":"pl-PL"},{"@type":"WebPage","@id":"https:\/\/infoshareacademy.com\/blog\/python-zasiegi-zmiennych\/","url":"https:\/\/infoshareacademy.com\/blog\/python-zasiegi-zmiennych\/","name":"Python - zasi\u0119gi zmiennych - infoShare Academy Blog","isPartOf":{"@id":"https:\/\/infoshareacademy.com\/blog\/#website"},"datePublished":"2023-08-25T08:48:00+00:00","dateModified":"2023-09-21T13:05:40+00:00","breadcrumb":{"@id":"https:\/\/infoshareacademy.com\/blog\/python-zasiegi-zmiennych\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/infoshareacademy.com\/blog\/python-zasiegi-zmiennych\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/infoshareacademy.com\/blog\/python-zasiegi-zmiennych\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/infoshareacademy.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Python &#8211; zasi\u0119gi zmiennych"}]},{"@type":"WebSite","@id":"https:\/\/infoshareacademy.com\/blog\/#website","url":"https:\/\/infoshareacademy.com\/blog\/","name":"infoShare Academy Blog","description":"Strona o szkoleniach w IT","publisher":{"@id":"https:\/\/infoshareacademy.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/infoshareacademy.com\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"pl-PL"},{"@type":"Organization","@id":"https:\/\/infoshareacademy.com\/blog\/#organization","name":"infoShare Academy","url":"https:\/\/infoshareacademy.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/infoshareacademy.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/infoshareacademy.com\/blog\/wp-content\/uploads\/2022\/11\/infoShare-Academy-ver-white-with-background-1000x1000px.jpg","contentUrl":"https:\/\/infoshareacademy.com\/blog\/wp-content\/uploads\/2022\/11\/infoShare-Academy-ver-white-with-background-1000x1000px.jpg","width":1000,"height":1000,"caption":"infoShare Academy"},"image":{"@id":"https:\/\/infoshareacademy.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/infoshareacademy"]},{"@type":"Person","@id":"https:\/\/infoshareacademy.com\/blog\/#\/schema\/person\/6ff6884acf142f159cdc9f059302dbf5","name":"ggolebiewski","image":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/infoshareacademy.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/13f23d89507ae5070cad6333837f17254df31fb525160d0785fc8ea48a3b5c54?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/13f23d89507ae5070cad6333837f17254df31fb525160d0785fc8ea48a3b5c54?s=96&d=mm&r=g","caption":"ggolebiewski"},"sameAs":["https:\/\/infoshareacademy.com\/bbb2"],"url":"https:\/\/infoshareacademy.com\/blog\/author\/ggolebiewski\/"}]}},"_links":{"self":[{"href":"https:\/\/infoshareacademy.com\/blog\/wp-json\/wp\/v2\/posts\/12794","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/infoshareacademy.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/infoshareacademy.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/infoshareacademy.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/infoshareacademy.com\/blog\/wp-json\/wp\/v2\/comments?post=12794"}],"version-history":[{"count":16,"href":"https:\/\/infoshareacademy.com\/blog\/wp-json\/wp\/v2\/posts\/12794\/revisions"}],"predecessor-version":[{"id":12841,"href":"https:\/\/infoshareacademy.com\/blog\/wp-json\/wp\/v2\/posts\/12794\/revisions\/12841"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/infoshareacademy.com\/blog\/wp-json\/wp\/v2\/media\/12797"}],"wp:attachment":[{"href":"https:\/\/infoshareacademy.com\/blog\/wp-json\/wp\/v2\/media?parent=12794"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/infoshareacademy.com\/blog\/wp-json\/wp\/v2\/categories?post=12794"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/infoshareacademy.com\/blog\/wp-json\/wp\/v2\/tags?post=12794"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}