Usporedba osnovnih elemenata C-a i python-a =========================================== Osnovni tipovi podataka ----------------------- .. tabularcolumns:: p{ 2.93447613117in } p{ 2.03156039851in } p{ 1.80583146534in } .. list-table:: :header-rows: 1 * - Python - Komentar - C * - ``boolean`` .. literalinclude:: tipovi01.py.filtered :language: pycon - Logički tip podataka ``True``, ``False``. U Pythonu ``None``, razne nule (``0``, ``0.0``), prazne liste ``[]``, stringovi ``""``, itd. kad se koriste kao logički uvjet znače ``False``. - Nema, u C-u se ``int`` koristi umjesto ``boolean`` (to možemo vidjeti pomoću ``sizeof(1==0)`` koji vrati broj 4). Kad je potrebno držati u memoriji polje ``boolean`` vrijednosti, radi štednje memorije možemo koristiti npr. ``char`` umjesto ``int`` ili radi još veće uštede igrati se s pojedinačnim bitovima kao `ovdje `_ ili `ovdje `_. * - ``int`` .. literalinclude:: tipovi02.py.filtered :language: pycon - Pythonov ``int`` je implementiran pomoću C-ovog ``long``-a. - ``long`` * - ``long`` .. literalinclude:: tipovi03.py.filtered :language: pycon - Pythonov ``long`` drži cijele brojeve proizvoljnog broja znamenaka. - C nema ugrađen takav tip. * - ``float`` .. literalinclude:: tipovi04.py.filtered :language: pycon - Python-ov ``float`` je implementiran pomoću C-ovog ``double``-a - ``double`` * - ``complex`` .. literalinclude:: tipovi05.py.filtered :language: pycon - Noviji C prevoditelji podržavaju kompleksne brojeve. Primjeri na: http://stackoverflow.com/questions/6418807/how-to-work-with-complex-numbers-in-c. - ``double complex`` * - ``NoneType`` .. literalinclude:: tipovi06.py.filtered :language: pycon - Varijabla se postavi na ovaj tip kad je definirana ali nije inicijalizirana. Primjer je funkcija koja zaboravi vratiti vrijednost: .. literalinclude:: tipovi07.py :language: python .. literalinclude:: tipovi07.py.filtered :language: text - Podsjeća na ``void`` u C-u, samo u C-u nisu postojale vrijednosti tipa ``void``, postojao je samo tip ``void``. U pythonu postoji samo jedna moguća vrijednost tipa ``NoneType`` a to je ``None``. Literatura - https://docs.python.org/2/library/stdtypes.html#numeric-types-int-float-long-complex - http://www.diveintopython3.net/native-datatypes.html - http://www.tutorialspoint.com/python/python_variable_types.htm - http://www.python-course.eu/sequential_data_types.php - http://stackoverflow.com/questions/47981/how-do-you-set-clear-and-toggle-a-single-bit-in-c-c - http://graphics.stanford.edu/~seander/bithacks.html Osnovni elementi ----------------- Neke očite sličnosti i razlike C-a i python-a vidimo u sljedećoj tablici. .. tabularcolumns:: p{ 1.73447799917in } p{ 1.73447799917in } .. list-table:: :header-rows: 1 * - Python - C * - ``and`` - ``&&`` * - ``or`` - ``||`` * - ``a**b`` - ``pow(a,b)`` * - ``not`` - ``!`` * - ``id(x)`` - ``&x`` (adresa od x) * - ``break`` - ``break;`` * - ``continue`` - ``continue;`` * - :: if uvjet: radnja - .. code-block:: c if(uvjet){ radnja; } * - :: if uvjet: radnja1 else: radnja2 - .. code-block:: c if(uvjet){ radnja1; } else{ radnja2; } U sljedećoj tablici su dane daljnje sličnosti i razlike. .. tabularcolumns:: p{ 5.02998619759in } p{ 1.90792579909in } .. list-table:: :header-rows: 1 * - Python - C * - indentacija .. note:: U pythonu nema vitičastih zagrada, a blok naredbi je definiran time što je uvučen u desno, **relativno na prethodni red**, pomoću razmaka ili tabova. Kako broj razmaka koje tab predstavlja nije fiksan (tj. može se namjestiti u editoru po želji) bitno je to indentiranje raditi uniformno. Preporuča se koristiti isključivo razmake za uvlačenje (npr. 2 ili 4). Da bi se olakšalo upisivanje obično je moguće namjestiti u editoru da pritisak na tab generira npr. 4 razmaka ``' '`` (a ne tab ``'\t'``). .. note:: U C-u se lako moglo definirati prazan blok pomoću ``;`` ili ``{}``. Za tu svrhu u pythonu postoji naredba ``pass`` koja ne radi ništa. - vitičaste zagrade * - svaka naredba u svom redu ili ``;`` - ``;`` * - ``'xx'`` ili ``"xx"`` ili ``"""xx"""`` (trostruki navodnici mogu uključivati više redaka teksta) - ``"xx"`` * - nema tip podataka znak (char). umjesto toga koristi string duljine 1: ``"x"`` ili ``'x'``. - ``'x'`` * - Python izvršava kôd naredbu po naredbu. Ne pregledava točnost unaprijed kao C nego tek u trenutku izvršavanja. To znači da ako se program u pythonu uspije pokrenuti, ne znači da u njemu nema tipfelera. - C sve provjerava unaprijed. * - case sensitive (tj. razlikuje velika i mala slova) - također case sensitive ``for`` petlja ---------------------------- .. tabularcolumns:: p{ 5.02998619759in } p{ 1.90792579909in } .. list-table:: :header-rows: 1 * - Python - C * - :: for i in range(pocetak,kraj,korak): radnja funkcija :func:`range` u pythonu proizvodi listu sa zadanim granicama. .. literalinclude:: op1_17.py :language: python .. literalinclude:: op1_17.py.filtered :language: text .. attention:: bitno je uočiti da su elementi liste uvijek manji od granice ``kraj``. (npr. u gornjem primjeru broj 26 nije u listi) .. tip:: ako se na ovakav način radi, python2, u memoriji drži odjednom sve vrijednosti koje se pojavljuju u petlji. to, naravno, nije zgodno u slučaju ``range(0,1000000000)`` pa se u tom slučaju koristi ``xrange(0,1000000000)``. :func:`xrange` ne generira cijelu listu unaprijed pa ne zauzima nepotrebno memoriju. (u pythonu 3 range se ponaša kao xrange u pythonu 2. u pythonu 3 xrange ne postoji.) http://stackoverflow.com/questions/135041/should-you-always-favor-xrange-over-range - .. code-block:: c for(i=pocetak; i