Python on suosittu oh­jel­moin­ti­kie­li. Jos haet ke­hit­tä­jän työ­paik­kaa, sinun kannattaa varautua yk­si­tyis­koh­tai­siin ky­sy­myk­siin sen toi­min­nas­ta. Tässä ar­tik­ke­lis­sa tar­kas­te­lem­me 10 Python-haas­tat­te­lu­ky­sy­mys­tä, joita saatat saada, ja miten niihin voi vastata.

Python-haas­tat­te­lu­ky­sy­mys 1: Mikä on erityistä Pyt­ho­nis­sa ja mitä etuja kielellä on?

Python on mo­ni­puo­li­nen oh­jel­moin­ti­kie­li, jota voidaan käyttää verk­ko­ke­hi­tyk­sen, data-analyysin ja tekoälyn aloilla. Se on erittäin käyt­tä­jäys­tä­väl­li­nen, mo­ni­puo­li­nen ja suo­ri­tus­ky­kyi­nen – vain kolme syytä, miksi monet aloit­te­le­vat oh­jel­moi­jat va­lit­se­vat sen op­pi­mak­seen oh­jel­moin­ti­kie­le­nä.

Se on aloit­te­li­joil­le erittäin sopiva kieli, jonka syntaksi on helppo ymmärtää ja joka sisältää kattavan stan­dar­di­kir­jas­ton, jossa on monia valmiita moduuleja ja toi­min­to­ja.

Muita etuja ovat suuri, ak­tii­vi­nen Python-ke­hit­tä­jien yhteisö, joka tarjoaa ulkoisia re­surs­se­ja ja tukea ke­hi­tyspro­ses­sil­le. Tul­kit­se­va­na ja ob­jek­ti­poh­jai­se­na kielenä se sopii hyvin myös koodin nopeaan kir­joit­ta­mi­seen ja vä­lit­tö­mään tes­taa­mi­seen. Dy­naa­mi­nen tyypitys parantaa kielen jous­ta­vuut­ta en­ti­ses­tään.

Java:n tavoin Python on alus­ta­riip­pu­ma­ton. Se voidaan in­tegroi­da sau­mat­to­mas­ti muihin kieliin, kuten C++:aan, mikä helpottaa alustojen välistä työs­ken­te­lyä ja mah­dol­lis­taa suo­ri­tus­ky­vyn op­ti­moin­nin.

Python-haas­tat­te­lu­ky­sy­mys 2: Mitä tar­koi­te­taan Pyt­ho­nis­sa termillä “scope” (laajuus)?

‘Scope’ viittaa alueeseen, jossa muuttuja on voimassa. Se on osa koodia, jossa muuttuja on näkyvissä ja käy­tet­tä­vis­sä ja jossa muuttujat voidaan mää­ri­tel­lä ja käyttää. Se tekee koodista sel­keäm­män ja minimoi ni­mi­konflik­tit. Pyt­ho­nis­sa on kaksi pää­tyyp­pis­tä scopea:

  • Globaali laajuus: Tä­män­tyyp­pi­nen muuttuja mää­ri­tel­lään funk­tioi­den ja luokkien ul­ko­puo­lel­la. Se on käy­tet­tä­vis­sä koko oh­jel­mas­sa ja löytyy usein koodin alusta tai ylemmältä tasolta.
  • Pai­kal­li­nen laajuus: Pai­kal­li­sen laajuuden muuttujat ovat ra­joi­tet­tu­ja funktioon, jossa ne on mää­ri­tel­ty. Ne voidaan myös määrittää tiettyyn lohkoon.

Jos haluat käyttää muuttujaa mää­ri­tel­lyn koodin ul­ko­puo­lel­la, sinun on laa­jen­net­ta­va sen vai­ku­tusa­luet­ta eri­tyi­sel­lä lauseella, kuten ‘global’ tai ‘nonlocal’.

Python-haas­tat­te­lu­ky­sy­mys 3: Mikä on ero Pythonin listojen ja tuplejen välillä?

Pyt­ho­nis­sa on kaksi tie­to­tyyp­piä jär­jes­tet­ty­jen ele­ment­tien ko­koel­mien tal­len­ta­mi­seen: listat ja tuple-tyypit. Listat ovat tyy­pil­li­ses­ti suo­si­tum­pia niiden jous­ta­vuu­den vuoksi. Tässä on muutamia keskeisiä eroja näiden kahden välillä:

  • Muut­tu­vuus: Luet­te­loi­ta voidaan muokata myös niiden luomisen jälkeen. Niihin voi lisätä, poistaa tai muuttaa ele­ment­te­jä. Sen sijaan tuple-tyyppisen luettelon ele­ment­te­jä ei voi muuttaa sen luomisen jälkeen.
  • Syntaksi: Luettelot luodaan ha­ka­sul­keil­la [], kun taas tupleissa käytetään pyöreitä sulkeita (). Toisin kuin luettelot, tupleja voidaan mää­ri­tel­lä myös pilkuilla sulkeiden sijaan.
  • Nopeus: Kumpi tie­to­tyyp­pi on nopeampi, riippuu kon­teks­tis­ta. Listojen muo­kat­ta­vuus tekee niistä nopeampia joissakin toi­min­nois­sa, kuten laajoissa tietojen muok­kauk­sis­sa. Tupleja on nopeampi käyttää, kun on kyse kokoelman ele­ment­tien käyt­tä­mi­ses­tä.

Python-haas­tat­te­lu­ky­sy­mys 4: Mikä on ero moduulien ja pakettien välillä?

Moduulit ja paketit eroavat toi­sis­taan so­vel­luk­sil­taan. Moduulit ovat yk­sit­täi­siä tie­dos­to­ja, jotka si­säl­tä­vät koodia, kun taas paketit ovat ha­ke­mis­tos­sa olevien moduulien kokoelmia. Molemmat on tar­koi­tet­tu auttamaan selkeän rakenteen luo­mi­ses­sa, mikä voi olla hyö­dyl­lis­tä suu­rem­mis­sa Python-pro­jek­teis­sa. Muita moduulien ja pakettien välisiä eroja ovat:

  • Moduuli: Pyt­ho­nis­sa moduulit ovat yk­sit­täi­siä tie­dos­to­ja, jotka voivat sisältää funk­tioi­ta, luokkia ja muuttujia. Tie­dos­to­jen pääte on .py, ja ne auttavat jär­jes­tä­mään koodia paremmin. Yk­sit­täi­set tiedostot pa­ran­ta­vat luet­ta­vuut­ta ja ylläpitoa.
  • Paketti: Paketteja käytetään myös jär­jes­tä­mi­seen, mutta ne on ra­ken­net­tu ha­ke­mis­toi­hin ja kan­sioi­hin. Tämä mah­dol­lis­taa koodin moduulien hie­rark­ki­sen jär­jes­tä­mi­sen. Jotta ha­ke­mis­toa voidaan käsitellä pakettina, sen tulisi sisältää tiedosto __init__.py.

Python-haas­tat­te­lu­ky­sy­mys 5: Mitä ovat pickling ja un­pickling?

“Pickling” ja “un­pickling” viit­taa­vat sisäisten objektien sar­joit­ta­mi­seen ja sar­joi­tuk­sen pur­ka­mi­seen. Näiden pro­ses­sien avulla objektit voidaan muuntaa bi­nää­ri­muo­toi­sik­si datan esi­tyk­sik­si (pickling) tai hakea objektit bi­nää­ri­muo­toi­sis­ta esi­tyk­sis­tä (un­pickling).

  • Pickling: Pickling muuntaa objektin bi­nää­ri­muo­toon. Tämä on tärkeää, jos haluat tallentaa tietoja pysyvästi tai siirtää tietoja verkkoon. Pickle-moduulia käytetään picklin­giin Pyt­ho­nis­sa. Se sar­joit­taa objektin muun­ta­mal­la sen ta­vu­vir­rak­si.
  • Un­pickling: Pickling-prosessin kään­tei­se­nä un­pickling palauttaa aiemmin pickling-kä­si­tel­lyn objektin sen bi­nää­ri­muo­dos­ta. Pickle- moduulia käytetään myös un­pickling-kä­sit­te­lyyn, ja se de­se­ria­li­soi ta­vu­vir­ran takaisin Python-ob­jek­tik­si.

Python-haas­tat­te­lu­ky­sy­mys 6: Mikä ero on funktion ja lambda-funktion välillä?

Yleisesti ottaen nämä kaksi funk­tio­tyyp­piä pal­ve­le­vat samaa tar­koi­tus­ta. Lambda-funktiot ovat lyhyempiä ja niitä käytetään useammin yk­sin­ker­tai­sem­piin ope­raa­tioi­hin ja suo­da­tus­teh­tä­viin. Tär­keim­mät erot normaalin funktion ja lambda-variantin välillä liittyvät syn­tak­siin, laa­juu­teen ja käyt­tö­aluei­siin.

  • Syntaksi: Lambda-funk­tioil­la on kom­pak­tim­pi syntaksi mää­ri­tel­män, rungon ja pa­lau­tusar­von osalta. Esi­mer­kik­si pa­lau­tusar­vol­le ei ole ek­spli­siit­tis­tä “return”-komentoa, koska lausek­keen arvo pa­lau­te­taan impli­siit­ti­ses­ti. Tämä tekee lambda-lausek­keis­ta erityisen sopivia lyhyille, yti­mek­käil­le funk­tio­ku­vauk­sil­le.
  • So­vel­ta­mi­sa­la: Normaalit funktiot voivat sisältää useita lauseita ja mo­ni­mut­kais­ta logiikkaa, mutta lambda-funktiot ovat ra­joi­tet­tu­ja yhteen lausek­kee­seen. Lambda-variantit voivat käyttää vain pai­kal­li­sia muuttujia, joiden so­vel­ta­mi­sa­la on tyy­pil­li­ses­ti ra­joi­tet­tu. Normaalit funktiot voivat puo­les­taan käyttää sekä pai­kal­li­sia että glo­baa­le­ja muuttujia.
  • Käyt­tö­alu­eet: Normaalit funktiot voidaan mää­ri­tel­lä missä tahansa koodissa. Lambda-muuttujia käytetään usein silloin, kun tarvitaan ly­hy­tai­kai­nen funktio, kuten sorted, filter tai map.

Python-haas­tat­te­lu­ky­sy­mys 7: Millaisia pe­rin­tö­tyyp­pe­jä Pyt­ho­nis­sa on ja miten Python kä­sit­te­lee mo­ni­pe­rin­töä?

Pyt­ho­nis­sa on useita pe­rin­tö­tyyp­pe­jä. Sekä yk­sit­täi­nen perintö että mo­nin­ker­tai­nen perintö ovat mah­dol­li­sia. Yk­sit­täi­ses­sä pe­rin­nös­sä yksi luokka perii yhden vanhemman luokan ja johdettu luokka ottaa käyttöön kaikki vanhemman luokan att­ri­buu­tit ja me­ne­tel­mät.

Mon pe­riy­ty­mi­ses­sä luokka perii useam­mas­ta kuin yhdestä van­hem­mas­ta luokasta. Johdettu luokka voi omaksua kaikkien van­hem­pien luokkien att­ri­buu­tit ja me­ne­tel­mät.

Pyt­ho­nis­sa käytetään C3-li­nea­ri­soin­tial­go­rit­mia tai me­ne­tel­män rat­kai­su­jär­jes­tys­tä mo­ni­pe­rin­töi­syy­den yh­tey­des­sä. Algoritmi määrittää jär­jes­tyk­sen, jossa me­ne­tel­mät rat­kais­taan mo­ni­pe­rin­töi­syy­den hie­rar­kias­sa. Tämä varmistaa, että att­ri­buut­te­ja ja me­ne­tel­miä haetaan joh­don­mu­kai­ses­sa ja en­nus­tet­ta­vas­sa jär­jes­tyk­ses­sä. Python käyttää li­nea­ri­soin­tia es­tääk­seen tun­net­tu­ja pe­rin­tö­on­gel­mia, kuten ti­mant­tion­gel­man.

Python-haas­tat­te­lu­ky­sy­mys 8: Mikä on monkey patching?

”Monkey patching” tar­koit­taa olemassa olevan koodin muok­kaa­mis­ta suo­ri­tuk­sen aikana. Tämä voidaan tehdä esi­mer­kik­si li­sää­mäl­lä tai kor­vaa­mal­la toi­min­to­ja tai me­ne­tel­miä. Monkey patching mah­dol­lis­taa koodin dy­naa­mi­set muutokset muut­ta­mat­ta al­ku­pe­räi­sen luokan tai toiminnon läh­de­koo­dia. Se voi olla hyö­dyl­lis­tä virheiden kor­jaa­mi­ses­sa, toi­min­to­jen laa­jen­ta­mi­ses­sa ja kir­jas­to­jen tai kehysten osien mu­kaut­ta­mi­ses­sa. Luokkien osalta myös me­ne­tel­mät voidaan korvata ja uusia me­ne­tel­miä voidaan lisätä.

Python-haas­tat­te­lu­ky­sy­mys 9: Mitkä ovat Djangon, Pyramidin ja Flaskin erot?

Django, Pyramid ja Flask ovat Python-verk­ko­ke­hyk­siä, jotka eroavat toi­sis­taan lä­hes­ty­mis­ta­voil­taan, mo­ni­mut­kai­suu­del­taan ja käy­tet­tä­vis­sä olevilta toi­min­noil­taan. Tässä on joitakin niiden tär­keim­piä eroja.

Django

Django on korkean tason web-kehys, joka tarjoaa monia li­sä­omi­nai­suuk­sia. Monet toiminnot ja moduulit ovat esia­sen­net­tui­na. Esi­mer­kik­si Djangolla on oma ob­jek­ti­re­laa­tio­mal­lin­nus tie­to­kan­tayh­tey­den­pi­toa varten. Se tarjoaa myös in­tegroi­dun hal­lin­ta­liit­ty­män, joka yk­sin­ker­tais­taa tie­to­mal­lien hallintaa.

So­vel­luk­sen URL-suun­nit­te­lu ja rakenne on mää­ri­tel­ty etukäteen, mikä helpottaa ke­hi­tys­työ­tä. Django painottaa paljon käy­tän­tö­jä. Se tarjoaa myös si­sään­ra­ken­ne­tun to­den­nuk­sen ja val­tuu­tuk­sen sekä sisältää toi­min­to­ja, kuten kaavoja ja CSRF-suojausta. Kehys sopii parhaiten edis­ty­neil­le käyt­tä­jil­le, sillä laaja valikoima omi­nai­suuk­sia ja tiukka rakenne tekevät op­pi­mis­käy­räs­tä jyrkän.

Pyramidi

Toisin kuin kattava Django, Pyramid on kevyt ja joustava. Se antaa ke­hit­tä­jil­le mah­dol­li­suu­den valita ha­lua­man­sa kirjastot ja kom­po­nen­tit, ja se on suun­ni­tel­tu skaa­lau­tu­vak­si ja laa­jen­net­ta­vak­si. Kehys tukee erilaisia so­vel­luk­sia pienistä pro­jek­teis­ta suuriin ja mo­ni­mut­kai­siin so­vel­luk­siin.

Toisin kuin Django, Py­ra­mi­dil­la ei ole määrättyä so­vel­lus­ra­ken­net­ta, mikä antaa enemmän vapautta koodin jär­jes­tä­mi­ses­sä. Myös mal­li­moot­to­rin valinta on vapaa, koska Pyramid ei käytä ole­tus­moot­to­ria.

Sen joustava käyttö ja vähäiset esia­se­tuk­set tekevät sen op­pi­mis­käy­räs­tä huo­mat­ta­vas­ti ta­sai­sem­man, minkä ansiosta Pyramid sopii paremmin aloit­te­li­joil­le.

Pullo

Flask on niin sanottu mik­ro­ke­hys. Se on alun perin suun­ni­tel­tu kevyeksi ja help­po­käyt­töi­sek­si. Tämän hel­pot­ta­mi­sek­si kehys tarjoaa vain vält­tä­mät­tö­mät omi­nai­suu­det. Tar­vit­taes­sa Flaskiin voidaan lisätä kir­jas­to­ja.

Flask käyttää yk­sin­ker­tais­ta ja selkeää so­vel­lus­liit­ty­mää (API), jonka avulla ke­hi­tys­työ voidaan aloittaa nopeasti. Kehys perustuu WSGI-työ­ka­lu­pa­ket­tiin ”Werkzeug” ja käyttää Jinja2-mal­li­moot­to­ria. Ke­hit­tä­jät voivat myös in­tegroi­da muita kom­po­nent­te­ja tarpeen mukaan.

Lopulta va­lit­se­ma­si kehys riippuu pro­jek­ti­si tarpeista ja siitä, kuinka paljon jous­ta­vuut­ta tarvitset. Django tarjoaa lukuisia in­tegroi­tu­ja toi­min­to­ja ja selkeän rakenteen. Pyramid painottaa jous­ta­vuut­ta ja skaa­lau­tu­vuut­ta. Flask puo­les­taan keskittyy yk­sin­ker­tai­suu­teen ja mi­ni­ma­lis­miin.

Python-haas­tat­te­lu­ky­sy­mys 10: Mitä ‘args’ ja ‘kwargs’ tar­koit­ta­vat Pyt­ho­nis­sa?

Nämä kaksi termiä tar­koit­ta­vat po­si­tii­vi­sar­gu­ment­te­ja (args) ja avainsana-ar­gu­ment­te­ja (kwargs). Molemmat ovat käy­tän­tö­jä, joita käytetään usein mää­ri­tel­täes­sä funk­tioi­ta, joissa on vaih­te­le­va määrä ar­gu­ment­te­ja, mikä antaa ke­hit­tä­jil­le lisää jous­ta­vuut­ta. Tämä on erityisen hyö­dyl­lis­tä, jos ei ole alusta alkaen selvää, kuinka monta tai min­kä­lai­sia ar­gu­ment­te­ja lopulta annetaan.

Args-muuttujia käytetään, kun funk­tios­sa hy­väk­sy­tään vaih­te­le­va määrä ar­gu­ment­te­ja sijainnin pe­rus­teel­la. Tämä mah­dol­lis­taa ennalta mää­rit­te­le­mät­tö­män määrän ar­gu­ment­tien syöt­tä­mi­sen, jotka puo­les­taan ovat käy­tet­tä­vis­sä funk­tios­sa tupleina.

Kwargit ovat sa­man­lai­sia. Niitä käytetään hy­väk­sy­mään vaih­te­le­va määrä ar­gu­ment­te­ja avain­sa­no­jen pe­rus­teel­la. Tämä mah­dol­lis­taa ennalta mää­rit­te­le­mät­tö­män määrän ar­gu­ment­tien syöt­tä­mi­sen, jotka ovat käy­tet­tä­vis­sä funk­tios­sa sa­na­kir­ja­na.

Jos funktio tarvitsee sisältää sekä muut­tu­jien sijaintia että avain­sa­no­ja koskevia ar­gu­ment­te­ja, Pyt­ho­nis­sa on mah­dol­lis­ta käyttää args- ja kwargs-ar­gu­ment­te­ja samassa funk­tios­sa.

Siirry pää­va­lik­koon