{"id":1031,"date":"2021-09-17T15:35:00","date_gmt":"2021-09-17T13:35:00","guid":{"rendered":"https:\/\/trzykody.pl\/?page_id=1031"},"modified":"2026-02-19T22:49:00","modified_gmt":"2026-02-19T21:49:00","slug":"python","status":"publish","type":"page","link":"https:\/\/trzykody.pl\/index.php\/python\/","title":{"rendered":"Python"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><strong>Python to wysokopoziomowy j\u0119zyk programowania og\u00f3lnego przeznaczenia, zaprojektowany z naciskiem na czytelno\u015b\u0107 kodu i prostot\u0119 sk\u0142adni. Jego tw\u00f3rc\u0105 jest Guido van Rossum, a pierwsze publiczne wydanie pojawi\u0142o si\u0119 w 1991 roku. Od pocz\u0105tku zak\u0142adano, \u017ce j\u0119zyk ma by\u0107 narz\u0119dziem praktycznym: umo\u017cliwia\u0107 szybkie tworzenie oprogramowania, minimalizowa\u0107 ilo\u015b\u0107 \u201eszumu sk\u0142adniowego\u201d oraz zach\u0119ca\u0107 do klarownego stylu.<\/strong><\/p>\n\n\n\n<div class=\"wp-block-rank-math-toc-block\" id=\"rank-math-toc\"><h2>Spis tre\u015bci<\/h2><nav><ol><li class=\"\"><a href=\"#python-skladnia-typy-danych-model-wykonywania-i-podstawowe-kody-python\">Python \u2013 sk\u0142adnia, typy danych, model wykonywania i podstawowe kody Python<\/a><ol><li class=\"\"><a href=\"#struktura-programu-i-wykonywanie-kodu\">Struktura programu i wykonywanie kodu<\/a><\/li><li class=\"\"><a href=\"#dynamiczne-typowanie-i-obiekty\">Dynamiczne typowanie i obiekty<\/a><\/li><li class=\"\"><a href=\"#podstawowe-typy-danych\">Podstawowe typy danych<\/a><\/li><li class=\"\"><a href=\"#wciecia-jako-element-skladni\">Wci\u0119cia jako element sk\u0142adni<\/a><\/li><li class=\"\"><a href=\"#funkcje-i-model-przekazywania-argumentow\">Funkcje i model przekazywania argument\u00f3w<\/a><\/li><\/ol><\/li><li class=\"\"><a href=\"#python-moduly-srodowisko-uruchomieniowe-zarzadzanie-pamiecia-i-informacje-python-o-implementacji\">Python \u2013 modu\u0142y, \u015brodowisko uruchomieniowe, zarz\u0105dzanie pami\u0119ci\u0105 i informacje Python o implementacji<\/a><ol><li class=\"\"><a href=\"#moduly-i-przestrzenie-nazw\">Modu\u0142y i przestrzenie nazw<\/a><\/li><li class=\"\"><a href=\"#model-pamieci-i-garbage-collector\">Model pami\u0119ci i garbage collector<\/a><\/li><li class=\"\"><a href=\"#interpreter-c-python-i-bajtkod\">Interpreter CPython i bajtkod<\/a><\/li><li class=\"\"><a href=\"#global-interpreter-lock-gil\">Global Interpreter Lock (GIL)<\/a><\/li><li class=\"\"><a href=\"#kody-python-w-kontekscie-skryptow-systemowych\">Kody Python w kontek\u015bcie skrypt\u00f3w systemowych<\/a><\/li><li class=\"\"><a href=\"#obsluga-wyjatkow\">Obs\u0142uga wyj\u0105tk\u00f3w<\/a><\/li><li class=\"\"><a href=\"#typowanie-statyczne-jako-rozszerzenie\">Typowanie statyczne jako rozszerzenie<\/a><\/li><\/ol><\/li><li class=\"\"><a href=\"#uwagi-praktyczne-i-typowe-pulapki\">Uwagi praktyczne i typowe pu\u0142apki<\/a><\/li><li class=\"\"><a href=\"#zakonczenie\">Zako\u0144czenie<\/a><\/li><\/ol><\/nav><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Co to jest Python<\/strong> w sensie technicznym? Jest to j\u0119zyk:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>interpretowany (standardowa implementacja CPython kompiluje do bajtkodu wykonywanego przez maszyn\u0119 wirtualn\u0105),<\/li>\n\n\n\n<li>dynamicznie typowany,<\/li>\n\n\n\n<li>z automatycznym zarz\u0105dzaniem pami\u0119ci\u0105,<\/li>\n\n\n\n<li>wieloparadygmatowy (imperatywny, obiektowy, funkcyjny).<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>J\u0119zyk Python<\/strong> znajduje zastosowanie w:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>automatyzacji zada\u0144 systemowych,<\/li>\n\n\n\n<li>analizie danych i obliczeniach numerycznych,<\/li>\n\n\n\n<li>aplikacjach webowych,<\/li>\n\n\n\n<li>testowaniu oprogramowania,<\/li>\n\n\n\n<li>przetwarzaniu tekstu,<\/li>\n\n\n\n<li>edukacji programistycznej.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Python<\/strong> ma by\u0107 narz\u0119dziem czytelnym. Bloki kodu s\u0105 definiowane przez wci\u0119cia, a nie przez nawiasy klamrowe. To wymusza jednolity styl i eliminuje cz\u0119\u015b\u0107 b\u0142\u0119d\u00f3w strukturalnych typowych dla j\u0119zyk\u00f3w takich jak C czy C++.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"python-skladnia-typy-danych-model-wykonywania-i-podstawowe-kody-python\">Python \u2013 sk\u0142adnia, typy danych, model wykonywania i podstawowe kody Python<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"struktura-programu-i-wykonywanie-kodu\">Struktura programu i wykonywanie kodu<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Plik \u017ar\u00f3d\u0142owy zawiera instrukcje wykonywane sekwencyjnie. Interpreter analizuje kod, kompiluje go do bajtkodu i uruchamia w maszynie wirtualnej.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Najprostszy program:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">print(\"Witaj \u015bwiecie\")<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Brak funkcji <code>main<\/code>, brak deklaracji typu zmiennych. Wykonywanie zaczyna si\u0119 od pierwszej instrukcji w pliku.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dla por\u00f3wnania w C:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">#include &lt;stdio.h&gt;int main() {<br>    printf(\"Witaj \u015bwiecie\\n\");<br>    return 0;<br>}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">R\u00f3\u017cnica jest istotna: Python redukuje warstw\u0119 techniczn\u0105 potrzebn\u0105 do uruchomienia programu.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"dynamiczne-typowanie-i-obiekty\">Dynamiczne typowanie i obiekty<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">W Pythonie ka\u017cda warto\u015b\u0107 jest obiektem. Zmienna jest jedynie referencj\u0105 do obiektu.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">x = 10<br>x = \"tekst\"<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ta sama nazwa mo\u017ce wskazywa\u0107 r\u00f3\u017cne typy w czasie wykonania.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">W C:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">int x = 10;<br>x = 20;<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Typ jest sta\u0142y i znany w czasie kompilacji.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Konsekwencje dynamicznego typowania:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>wi\u0119ksza elastyczno\u015b\u0107,<\/li>\n\n\n\n<li>mniej kodu,<\/li>\n\n\n\n<li>potencjalne b\u0142\u0119dy wykrywane dopiero w czasie wykonania.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"podstawowe-typy-danych\">Podstawowe typy danych<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Najwa\u017cniejsze wbudowane typy:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>int<\/code> \u2013 liczby ca\u0142kowite (dowolna precyzja),<\/li>\n\n\n\n<li><code>float<\/code> \u2013 liczby zmiennoprzecinkowe (podw\u00f3jna precyzja),<\/li>\n\n\n\n<li><code>bool<\/code> \u2013 warto\u015bci logiczne,<\/li>\n\n\n\n<li><code>str<\/code> \u2013 \u0142a\u0144cuchy znak\u00f3w,<\/li>\n\n\n\n<li><code>list<\/code> \u2013 lista dynamiczna,<\/li>\n\n\n\n<li><code>tuple<\/code> \u2013 krotka niemodyfikowalna,<\/li>\n\n\n\n<li><code>dict<\/code> \u2013 s\u0142ownik (tablica mieszaj\u0105ca),<\/li>\n\n\n\n<li><code>set<\/code> \u2013 zbi\u00f3r.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">a = 5<br>b = 3.14<br>c = \"napis\"<br>d = [1, 2, 3]<br>e = {\"klucz\": 42}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Lista jest struktur\u0105 dynamiczn\u0105 \u2013 mo\u017ce zmienia\u0107 rozmiar w trakcie dzia\u0142ania programu. W C analogiczna struktura wymaga r\u0119cznej alokacji pami\u0119ci.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"wciecia-jako-element-skladni\">Wci\u0119cia jako element sk\u0142adni<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Bloki kodu definiuje si\u0119 poprzez wci\u0119cia:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">if x &gt; 0:<br>    print(\"Dodatnia\")<br>else:<br>    print(\"Niedodatnia\")<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Interpreter wymaga sp\u00f3jnego wci\u0119cia (zwykle 4 spacje). To eliminuje b\u0142\u0119dy zwi\u0105zane z przypadkowym pomini\u0119ciem nawiasu klamrowego, ale wprowadza now\u0105 kategori\u0119 b\u0142\u0119d\u00f3w \u2013 nieprawid\u0142owe wci\u0119cia.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"funkcje-i-model-przekazywania-argumentow\">Funkcje i model przekazywania argument\u00f3w<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Definicja funkcji:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">def dodaj(a, b):<br>    return a + b<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Argumenty przekazywane s\u0105 przez przypisanie referencji (call by object reference). Je\u015bli przekazany obiekt jest modyfikowalny (np. lista), funkcja mo\u017ce zmieni\u0107 jego zawarto\u015b\u0107.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">def zmien(lista):<br>    lista.append(100)dane = [1, 2]<br>zmien(dane)<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>dane<\/code> zostaje zmodyfikowane.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">W C analogiczny efekt wymaga wska\u017anik\u00f3w.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"python-moduly-srodowisko-uruchomieniowe-zarzadzanie-pamiecia-i-informacje-python-o-implementacji\">Python \u2013 modu\u0142y, \u015brodowisko uruchomieniowe, zarz\u0105dzanie pami\u0119ci\u0105 i informacje Python o implementacji<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"moduly-i-przestrzenie-nazw\">Modu\u0142y i przestrzenie nazw<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Plik <code>.py<\/code> jest modu\u0142em. Import:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">import math<br>print(math.sqrt(16))<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ka\u017cdy modu\u0142 posiada w\u0142asn\u0105 przestrze\u0144 nazw. Zapobiega to konfliktom identyfikator\u00f3w.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mo\u017cliwe jest:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">from math import sqrt<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">W wi\u0119kszych projektach struktura modu\u0142\u00f3w pozwala logicznie dzieli\u0107 kod.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"model-pamieci-i-garbage-collector\">Model pami\u0119ci i garbage collector<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Python u\u017cywa:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Zliczania referencji,<\/li>\n\n\n\n<li>Cyclic garbage collector do usuwania cykli.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Gdy liczba referencji do obiektu spada do zera \u2013 pami\u0119\u0107 jest zwalniana. Problemem s\u0105 cykle referencji:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">a = []<br>b = [a]<br>a.append(b)<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Tu potrzebny jest dodatkowy mechanizm wykrywania cykli.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">W C programista zarz\u0105dza pami\u0119ci\u0105 r\u0119cznie (<code>malloc<\/code>, <code>free<\/code>). Python upraszcza to, ale kosztem mniejszej kontroli i potencjalnych op\u00f3\u017anie\u0144 zwi\u0105zanych z GC.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"interpreter-c-python-i-bajtkod\">Interpreter CPython i bajtkod<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Standardowa implementacja to CPython. Kod \u017ar\u00f3d\u0142owy kompilowany jest do bajtkodu <code>.pyc<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mo\u017cna podejrze\u0107 bajtkod:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">import disdef f(x):<br>    return x + 1dis.dis(f)<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Bajtkod wykonywany jest przez wirtualn\u0105 maszyn\u0119 stosow\u0105. Operacje s\u0105 stosunkowo wysokiego poziomu, co wp\u0142ywa na wydajno\u015b\u0107 w por\u00f3wnaniu z j\u0119zykami kompilowanymi do kodu maszynowego.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"global-interpreter-lock-gil\">Global Interpreter Lock (GIL)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">W <strong>CPython<\/strong> istnieje mechanizm GIL \u2013 tylko jeden w\u0105tek mo\u017ce wykonywa\u0107 kod Pythona naraz. Ogranicza to r\u00f3wnoleg\u0142o\u015b\u0107 w programach CPU-bound.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">W przypadku operacji I\/O GIL nie stanowi istotnego problemu, ale w obliczeniach numerycznych mo\u017ce ogranicza\u0107 skalowalno\u015b\u0107.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Alternatywy:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>multiprocessing,<\/li>\n\n\n\n<li>biblioteki napisane w C,<\/li>\n\n\n\n<li>inne implementacje (np. PyPy).<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"kody-python-w-kontekscie-skryptow-systemowych\">Kody Python w kontek\u015bcie skrypt\u00f3w systemowych<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Python cz\u0119sto u\u017cywany jest jako j\u0119zyk skryptowy.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad przetwarzania pliku:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">with open(\"dane.txt\") as f:<br>    for linia in f:<br>        print(linia.strip())<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ten sam problem w C wymaga wi\u0119kszej liczby instrukcji i r\u0119cznego zarz\u0105dzania buforem.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"obsluga-wyjatkow\">Obs\u0142uga wyj\u0105tk\u00f3w<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Mechanizm wyj\u0105tk\u00f3w:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">try:<br>    x = 10 \/ 0<br>except ZeroDivisionError:<br>    print(\"Dzielenie przez zero\")<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Wyj\u0105tki propaguj\u0105 si\u0119 w g\u00f3r\u0119 stosu wywo\u0142a\u0144. To strukturalny spos\u00f3b obs\u0142ugi b\u0142\u0119d\u00f3w, w przeciwie\u0144stwie do kod\u00f3w b\u0142\u0119d\u00f3w w C.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"typowanie-statyczne-jako-rozszerzenie\">Typowanie statyczne jako rozszerzenie<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Chocia\u017c Python jest dynamiczny, mo\u017cna stosowa\u0107 adnotacje typ\u00f3w:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">def suma(a: int, b: int) -&gt; int:<br>    return a + b<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Adnotacje nie s\u0105 wymuszane przez interpreter, ale mog\u0105 by\u0107 analizowane przez narz\u0119dzia (np. mypy).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To kompromis mi\u0119dzy elastyczno\u015bci\u0105 a bezpiecze\u0144stwem typ\u00f3w.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"uwagi-praktyczne-i-typowe-pulapki\">Uwagi praktyczne i typowe pu\u0142apki<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Modyfikowalne argumenty domy\u015blne:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\">def f(lista=[]):<br>    lista.append(1)<br>    return lista<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Lista tworzona jest tylko raz \u2013 efekt uboczny mi\u0119dzy wywo\u0142aniami.<\/p>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>Kopiowanie list:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\">a = [1, 2]<br>b = a<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">To nie kopia, tylko druga referencja.<\/p>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>Por\u00f3wnywanie to\u017csamo\u015bci vs r\u00f3wno\u015bci:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\">a == b<br>a is b<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>==<\/code> por\u00f3wnuje warto\u015bci, <code>is<\/code> \u2013 to\u017csamo\u015b\u0107 obiektu.<\/p>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li>Wydajno\u015b\u0107 p\u0119tli w czystym Pythonie jest ni\u017csza ni\u017c w C\/C++. W obliczeniach numerycznych lepiej u\u017cywa\u0107 bibliotek zoptymalizowanych w C.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"zakonczenie\">Zako\u0144czenie<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">J\u0119zyk Python \u0142\u0105czy prostot\u0119 sk\u0142adni z rozbudowanym \u015brodowiskiem standardowym i czytelnym modelem programowania. Jego si\u0142a wynika z r\u00f3wnowagi mi\u0119dzy elastyczno\u015bci\u0105 a struktur\u0105. Nie jest to j\u0119zyk najszybszy ani najbli\u017cszy sprz\u0119towi, ale w ogromnej liczbie zastosowa\u0144 pozwala uzyska\u0107 poprawne rozwi\u0105zanie szybciej ni\u017c j\u0119zyki ni\u017cszego poziomu.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Python to wysokopoziomowy j\u0119zyk programowania og\u00f3lnego przeznaczenia, zaprojektowany z naciskiem na czytelno\u015b\u0107 kodu i prostot\u0119 sk\u0142adni. Jego tw\u00f3rc\u0105 jest Guido van Rossum, a pierwsze publiczne wydanie pojawi\u0142o si\u0119 w 1991 roku. Od pocz\u0105tku zak\u0142adano, \u017ce j\u0119zyk ma by\u0107 narz\u0119dziem praktycznym: umo\u017cliwia\u0107 szybkie tworzenie oprogramowania, minimalizowa\u0107 ilo\u015b\u0107 \u201eszumu sk\u0142adniowego\u201d oraz zach\u0119ca\u0107 do klarownego stylu. Co to jest Python w sensie technicznym? Jest to j\u0119zyk: J\u0119zyk Python znajduje zastosowanie w: Python ma by\u0107 narz\u0119dziem czytelnym. Bloki kodu s\u0105 definiowane przez wci\u0119cia, a nie przez nawiasy klamrowe. To wymusza jednolity styl i eliminuje cz\u0119\u015b\u0107 b\u0142\u0119d\u00f3w strukturalnych typowych dla j\u0119zyk\u00f3w takich jak C czy C++. Python \u2013 sk\u0142adnia, typy danych, model wykonywania i podstawowe kody Python Struktura programu i wykonywanie kodu Plik \u017ar\u00f3d\u0142owy zawiera instrukcje wykonywane sekwencyjnie. Interpreter analizuje kod, kompiluje go do bajtkodu i uruchamia w maszynie wirtualnej. Najprostszy program: print(&#8222;Witaj \u015bwiecie&#8221;) Brak funkcji main, brak deklaracji typu zmiennych. Wykonywanie zaczyna si\u0119 od pierwszej instrukcji w pliku. Dla por\u00f3wnania w C: #include &lt;stdio.h&gt;int main() { printf(&#8222;Witaj \u015bwiecie\\n&#8221;); return 0;} R\u00f3\u017cnica jest istotna: Python redukuje warstw\u0119 techniczn\u0105 potrzebn\u0105 do uruchomienia programu. Dynamiczne typowanie i obiekty W Pythonie ka\u017cda warto\u015b\u0107 jest obiektem. Zmienna jest jedynie referencj\u0105 do obiektu. x = 10x = &#8222;tekst&#8221; Ta sama nazwa mo\u017ce wskazywa\u0107 r\u00f3\u017cne typy w czasie wykonania. W C: int x = 10;x = 20; Typ jest sta\u0142y i znany w czasie kompilacji. Konsekwencje dynamicznego typowania: Podstawowe typy danych Najwa\u017cniejsze wbudowane typy: Przyk\u0142ad: a = 5b = 3.14c = &#8222;napis&#8221;d = [1, 2, 3]e = {&#8222;klucz&#8221;: 42} Lista jest struktur\u0105 dynamiczn\u0105 \u2013 mo\u017ce zmienia\u0107 rozmiar w trakcie dzia\u0142ania programu. W C analogiczna struktura wymaga r\u0119cznej alokacji pami\u0119ci. Wci\u0119cia jako element sk\u0142adni Bloki kodu definiuje si\u0119 poprzez wci\u0119cia: if x &gt; 0: print(&#8222;Dodatnia&#8221;)else: print(&#8222;Niedodatnia&#8221;) Interpreter wymaga sp\u00f3jnego wci\u0119cia (zwykle 4 spacje). To eliminuje b\u0142\u0119dy zwi\u0105zane z przypadkowym pomini\u0119ciem nawiasu klamrowego, ale wprowadza now\u0105 kategori\u0119 b\u0142\u0119d\u00f3w \u2013 nieprawid\u0142owe wci\u0119cia. Funkcje i model przekazywania argument\u00f3w Definicja funkcji: def dodaj(a, b): return a + b Argumenty przekazywane s\u0105 przez przypisanie referencji (call by object reference). Je\u015bli przekazany obiekt jest modyfikowalny (np. lista), funkcja mo\u017ce zmieni\u0107 jego zawarto\u015b\u0107. def zmien(lista): lista.append(100)dane = [1, 2]zmien(dane) dane zostaje zmodyfikowane. W C analogiczny efekt wymaga wska\u017anik\u00f3w. Python \u2013 modu\u0142y, \u015brodowisko uruchomieniowe, zarz\u0105dzanie pami\u0119ci\u0105 i informacje Python o implementacji Modu\u0142y i przestrzenie nazw Plik .py jest modu\u0142em. Import: import mathprint(math.sqrt(16)) Ka\u017cdy modu\u0142 posiada w\u0142asn\u0105 przestrze\u0144 nazw. Zapobiega to konfliktom identyfikator\u00f3w. Mo\u017cliwe jest: from math import sqrt W wi\u0119kszych projektach struktura modu\u0142\u00f3w pozwala logicznie dzieli\u0107 kod. Model pami\u0119ci i garbage collector Python u\u017cywa: Gdy liczba referencji do obiektu spada do zera \u2013 pami\u0119\u0107 jest zwalniana. Problemem s\u0105 cykle referencji: a = []b = [a]a.append(b) Tu potrzebny jest dodatkowy mechanizm wykrywania cykli. W C programista zarz\u0105dza pami\u0119ci\u0105 r\u0119cznie (malloc, free). Python upraszcza to, ale kosztem mniejszej kontroli i potencjalnych op\u00f3\u017anie\u0144 zwi\u0105zanych z GC. Interpreter CPython i bajtkod Standardowa implementacja to CPython. Kod \u017ar\u00f3d\u0142owy kompilowany jest do bajtkodu .pyc. Mo\u017cna podejrze\u0107 bajtkod: import disdef f(x): return x + 1dis.dis(f) Bajtkod wykonywany jest przez wirtualn\u0105 maszyn\u0119 stosow\u0105. Operacje s\u0105 stosunkowo wysokiego poziomu, co wp\u0142ywa na wydajno\u015b\u0107 w por\u00f3wnaniu z j\u0119zykami kompilowanymi do kodu maszynowego. Global Interpreter Lock (GIL) W CPython istnieje mechanizm GIL \u2013 tylko jeden w\u0105tek mo\u017ce wykonywa\u0107 kod Pythona naraz. Ogranicza to r\u00f3wnoleg\u0142o\u015b\u0107 w programach CPU-bound. W przypadku operacji I\/O GIL nie stanowi istotnego problemu, ale w obliczeniach numerycznych mo\u017ce ogranicza\u0107 skalowalno\u015b\u0107. Alternatywy: Kody Python w kontek\u015bcie skrypt\u00f3w systemowych Python cz\u0119sto u\u017cywany jest jako j\u0119zyk skryptowy. Przyk\u0142ad przetwarzania pliku: with open(&#8222;dane.txt&#8221;) as f: for linia in f: print(linia.strip()) Ten sam problem w C wymaga wi\u0119kszej liczby instrukcji i r\u0119cznego zarz\u0105dzania buforem. Obs\u0142uga wyj\u0105tk\u00f3w Mechanizm wyj\u0105tk\u00f3w: try: x = 10 \/ 0except ZeroDivisionError: print(&#8222;Dzielenie przez zero&#8221;) Wyj\u0105tki propaguj\u0105 si\u0119 w g\u00f3r\u0119 stosu wywo\u0142a\u0144. To strukturalny spos\u00f3b obs\u0142ugi b\u0142\u0119d\u00f3w, w przeciwie\u0144stwie do kod\u00f3w b\u0142\u0119d\u00f3w w C. Typowanie statyczne jako rozszerzenie Chocia\u017c Python jest dynamiczny, mo\u017cna stosowa\u0107 adnotacje typ\u00f3w: def suma(a: int, b: int) -&gt; int: return a + b Adnotacje nie s\u0105 wymuszane przez interpreter, ale mog\u0105 by\u0107 analizowane przez narz\u0119dzia (np. mypy). To kompromis mi\u0119dzy elastyczno\u015bci\u0105 a bezpiecze\u0144stwem typ\u00f3w. Uwagi praktyczne i typowe pu\u0142apki def f(lista=[]): lista.append(1) return lista Lista tworzona jest tylko raz \u2013 efekt uboczny mi\u0119dzy wywo\u0142aniami. a = [1, 2]b = a To nie kopia, tylko druga referencja. a == ba is b == por\u00f3wnuje warto\u015bci, is \u2013 to\u017csamo\u015b\u0107 obiektu. Zako\u0144czenie J\u0119zyk Python \u0142\u0105czy prostot\u0119 sk\u0142adni z rozbudowanym \u015brodowiskiem standardowym i czytelnym modelem programowania. Jego si\u0142a wynika z r\u00f3wnowagi mi\u0119dzy elastyczno\u015bci\u0105 a struktur\u0105. Nie jest to j\u0119zyk najszybszy ani najbli\u017cszy sprz\u0119towi, ale w ogromnej liczbie zastosowa\u0144 pozwala uzyska\u0107 poprawne rozwi\u0105zanie szybciej ni\u017c j\u0119zyki ni\u017cszego poziomu.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1031","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/pages\/1031","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/comments?post=1031"}],"version-history":[{"count":1,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/pages\/1031\/revisions"}],"predecessor-version":[{"id":1035,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/pages\/1031\/revisions\/1035"}],"wp:attachment":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/media?parent=1031"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}