Mga praktikal na gawaing python. Python programming language - saan magsisimula? Mga metaclass at descriptor

Mas sikat kaysa dati, ginagamit ito hangga't maaari, mula sa mga backend server hanggang sa pagbuo ng mga laro sa frontend, at iba pa. Ang Python ay nararapat na ituring na isang pangkalahatang layunin na wika at mabilis na nagiging isang kailangang-kailangan na tool sa arsenal ng sinumang may paggalang sa sarili na programmer.

Ngunit hindi sikat ang Python dahil lang sikat ito. Madali itong matutunan, nagbabasa tulad ng pseudo-code, at napaka-dynamic. Gayunpaman, ang pag-aaral ng bagong wika ay maaaring maging isang hamon sa paghahanap ng tamang lugar para mag-aral at ang mga tao kung saan maaari kang matuto ng bagong impormasyon ay malulutas ang kalahati ng problema. Tutulungan ka ng aming gabay dito. Ito ang iyong magiging walang kabuluhang plano na magpapadali sa pag-aaral ng Python at gawing masaya at kawili-wili ang pag-aaral.

Gawain 1: Magsimula sa Mga Pangunahing Kaalaman

Sa pagsulat na ito, mayroong dalawang pangunahing bersyon ng Python: Python 2.7 at Python 3.2. Aling bersyon ang pipiliin mong pag-aralan ay hindi masyadong mahalaga, dahil ang mga pagkakaiba ay magiging minimal, lalo na para sa isang baguhan. Ngunit dapat mong malaman na ang Python 2 ay sumusuporta sa higit pang mga third-party na aklatan, habang ang Python 3 ay pangunahing nakatuon sa mga developer na nagtatrabaho sa pagpapabuti ng wika. Ang pagpipilian ay sa iyo, kung ang code mula sa anumang tutorial ay hindi gumagana ayon sa nilalayon, tiyaking ginagamit mo ang naaangkop na bersyon ng Python mula sa tutorial na iyon.

Ang Wikibooks ay palaging isang maaasahang mapagkukunan para sa pag-aaral ng bago at ang Python ay walang pagbubukod. Dito makikita mo ang isang mahusay na serye ng mga tutorial upang matulungan kang maging mas pamilyar sa Python. Hindi magkakaroon ng maraming tech jargon at maaari kang magsimulang magsulat ng code nang napakabilis, na tiyak na magiging kapaki-pakinabang na karanasan. Samakatuwid, inirerekumenda ko ang site na ito bilang isang magandang lugar upang simulan ang iyong paglalakbay sa Python.

Hindi ka makakahanap ng mas mahusay na mapagkukunan ng impormasyon kaysa sa opisyal na dokumentasyon sa python.org. Gayunpaman, kung gusto mong magsimula kaagad mula rito, maaaring hindi ito magandang ideya.

Ang nilalaman dito ay mas teknikal kaysa sa mga wikibook, na magiging kapaki-pakinabang sa ibang pagkakataon habang ikaw ay sumusulong sa pag-aaral ng wika. Para sa isang baguhan, ang nilalaman ay maaaring mukhang kumplikado at ito ay magiging isang balakid sa pag-aaral ng simple at magandang wika.

Para sa mga nagsisimula, ang pinaka-kapansin-pansing pagkakaiba sa pagitan ng Python 2 at Python 3 ay malamang na ang kakayahan sa Python 2 na gumamit ng print nang walang panaklong. Ang mga panaklong ay kinakailangan sa Python 3, iyon lang.

Gawain 2: mga tutorial at screencast

Ang NewBoston playlist ay palaging mahusay at maaari kang matuto ng maraming mga wika. Si "Bucky" ay isang mahusay na tagapagturo, siya ay kawili-wiling pakinggan dahil natagpuan niya ang balanse sa pagitan ng pagiging nakakatawa at nagbibigay-kaalaman, kung ano ang sinusubukan niyang ipahiwatig ay laging madaling maunawaan. Inirerekomenda kong tingnan ang alinman sa kanyang mga playlist - lalo na ang Python playlist. Hindi mo kailangang magkaroon ng anumang kaalaman sa programming, pagkatapos panoorin ang kanyang mga video tutorial magkakaroon ka ng matatag na pag-unawa sa wika.

Nettuts+ Python mula sa simula

Ang isang magandang panimula sa Python ay ang kurso ni Giles Lavelle. Tulad ng serye ng TheNewBoston, ipinapalagay ni Lavelle na wala kang karanasan sa programming.

Kung gusto mong makakita ng mga real-world na application o gusto mong maunawaan ang Python web development, perpekto ang seryeng ito.

Sa screencast na ito, gagawa ka ng isang dynamic na website mula sa simula gamit ang Django Python framework.

Python screencast mula sa ShowMeDo

Ang StackOverflow ay hindi lang kilala para sa mga baguhan, bug, at problema.

Ang ShowMeDo ay may malaking katalogo ng mga video na nauugnay sa Python. Bagama't ang site ay maaaring mukhang hindi ito may pinakamahusay na user interface, mayroon itong malaking hanay ng mga kapaki-pakinabang na video, mula sa impormasyon para sa mga nagsisimula hanggang sa mga advanced na diskarte para sa paggamit ng Python. Dapat mong tiyak na tingnan ang site na ito.

Gumawa ng Python bot na maaaring maglaro ng mga laro sa web

Sa tutorial na ito ay makikilala mo ang partikular na materyal, hindi ko inirerekomenda ito sa mga ganap na nagsisimula. Gayunpaman, sa tingin ko ito ay nagkakahalaga ng pagbanggit. Sa tutorial na ito, ipapakita sa iyo ni Chris Kiehl kung paano lumikha ng isang napaka-interesante na Python bot na maglalaro ng isang simpleng laro para sa iyo. Ipapakita sa iyo ng tutorial ang kapangyarihan ng Python; maaari itong maging kapaki-pakinabang para sa paglutas ng mga pang-araw-araw na gawain na maaaring magamit upang pamahalaan ang iyong computer.

Gawain 3: Libreng eBook

Malaking tulong ang isang magandang libro kapag natututo ng bago, at ang Python ay may kamangha-manghang at palakaibigang komunidad, na nagreresulta sa malaking seleksyon ng mga libreng eBook. Sa ibaba makikita mo ang isang maliit na listahan ng pinakamahusay na mga libro. Maaari kang mag-download ng isang libreng electronic na bersyon ng bawat isa sa kanila o bumili ng isang naka-print na edisyon (o mag-donate) kung nais mong suportahan ang may-akda, sigurado akong pahahalagahan nila ito.

Alamin ang Python sa Mahirap na Paraan

Sa kabila ng pamagat ng aklat, "Ang Hindi Madaling Diskarte sa Pag-aaral ng Python," ang pag-aaral ng Python ay madali pa rin—gaya ng nararapat! Sa aklat na ito, binibigyan ka ni Zed A. Shaw ng isang kumpletong at detalyadong gabay, na may mga problema at mga halimbawa upang subukan ang iyong mga kasanayan sa programming. Ang aklat ay nakasulat sa isang impormal na wika, ngunit ito ay naglalarawan ng maraming detalye nang detalyado, kaya hindi ka mahihirapang basahin ito at ang resulta ay hindi magtatagal.

Think Python: How to Think Like a Computer Scientist

Hindi ka makakahanap ng mas mahusay na mapagkukunan ng impormasyon kaysa sa opisyal na dokumentasyon ng python.org.

Gaya ng sinasabi ng subtitle, "Thinking Like a Programmer," makakakita ka ng maraming teoretikal na materyal dito. Maaaring mabigo ang mga nagsisimula at mahirapan ang aklat, ngunit maniwala ka sa akin, sulit itong basahin dahil makakahanap ka ng impormasyon tungkol sa teorya ng algorithm at mga konseptong may mataas na antas.

Mag-imbento Gamit ang Python

Kung mas interesado ka sa praktikal na bahagi, ang paggawa ng sarili mong laro ay magiging isang tunay na kapakipakinabang na karanasan! Sa aklat na ito, ipinapalagay ni Al Sweigart na hindi ka komportable sa Python at tinutulungan kang lumikha ng isang laro. Bagama't ang aklat na ito ay tungkol sa pagbuo ng laro, ito ay angkop din para sa mga kumpletong nagsisimula. Nang maglaon sa artikulong ito, binanggit ko ang isang katulad na libro, ngunit nangangailangan ito ng isang malakas na utos ng Python. Kung sa tingin mo ay alam mo nang mabuti ang wika, ang isa pang libro ay magiging isang mas nagbibigay-kaalaman na mapagkukunan para sa iyo.

Ang Django Book

Kung gusto mong matuto ng web development sa Python, malamang na gagamitin mo ang Django framework. Maaaring hindi ka pamilyar sa balangkas ng Django, ngunit dapat kang magkaroon ng mahusay na pag-unawa sa Python upang mabasa ang aklat na ito. Ang impormasyon sa loob nito ay kailangang-kailangan para sa sinumang baguhan na web developer.

Mga aklat sa Python

Kung hindi sapat ang lahat ng aklat sa itaas o interesado ka sa isang partikular na paksa, sundan ang link na ito. Ang mga lalaki mula sa python.org ay lumikha ng isang malawak na listahan ng mga libro, pinag-uuri-uri ang mga ito ayon sa pagiging kumplikado at paksa.

Gawain 4: Kilalanin ang StackOverflow

Libu-libong mga developer ang nakaranas ng parehong mga problema na kailangan mong harapin nang direkta. Ang StackOverflow ay isang mahusay na mapagkukunan ng impormasyon kung saan makakahanap ng solusyon ang sinumang developer sa kanilang problema. Kapag nakatagpo ka ng isa pang bug at wala kang ideya kung paano ito ayusin, hanapin ang sagot sa StackOverflow. Malamang, mayroon nang impormasyon doon kung paano nireresolba ng ibang tao ang isang katulad na problema.

Ngunit ang StackOverflow ay hindi lamang kilala para sa mga baguhan, bug, at problema; Ang site na ito ay puno ng napakatalino na mga taong handang tumulong - matuto mula sa kanila!

Karamihan sa mga trick at tip na makikita mo dito ay hindi makikita sa alinman sa mga tutorial at magiging lubhang kapaki-pakinabang para sa mga advanced o intermediate na gumagamit ng Python.

Gawain 5: Project Euler


Ang Project Euler (binibigkas na 'Oil-er', tandaan ito para hindi ka mawalan ng mukha sa hinaharap) ay isa sa aking mga paboritong website Kapag gumawa ka ng account, maaari kang lumahok at malutas ang humigit-kumulang 400 mga hamon sa website na ito 50 porsiyentong matematika, 50 porsiyentong programming, sa palagay ko, ang pinakatamang diskarte sa pag-aaral ng bawat asignaturang ito.

Ang mga gawain ay nagsisimula sa mga simpleng gawain upang subukan ang iyong antas ng kaalaman sa wika, pagkatapos nito ay tataas ang pagiging kumplikado, at sa huli ay magkakaroon ng mga problema na kahit na ang isang bihasang programmer ay hindi malulutas. Sa huli, kakailanganin mong hanapin ang pinaka mahusay na algorithm - kung sakaling wala kang oras, maghintay ng ilang oras upang makalkula ang tamang sagot.

Walang gagawing mas mahusay kang programmer nang mas mabilis kaysa sa paghahanap ng pinakamabisang solusyon sa mga problema sa Project Euler.

Kapag nakakuha ka ng solusyon sa isa pang problema, magbubukas ang isang pahina ng forum para sa iyo, kung saan pinag-uusapan ng mga tao ang mga solusyon at ideya sa isa't isa tungkol sa problemang ito. Karamihan sa mga solusyong ito ay nasa Python. Ito ang pinakasusi na makakatulong sa iyong makabuluhang mapabuti ang iyong mga kakayahan sa programming. Kung ang isang tao ay nakahanap ng mas mabilis na solusyon, huwag matakot na maglaan ng oras upang pag-aralan ito, upang maunawaan mo kung anong mga punto ang kailangang muling gawin. Sa paglipas ng panahon, magsisimula kang maunawaan ang lahat ng mga trick at ang iyong mga kasanayan sa wikang Python ay mapapabuti, ang resulta ay hindi magtatagal.

Bilang karagdagan dito, mayroong ilang mga blog na nagbibigay-kaalaman kung saan makakahanap ka ng mga solusyon sa mga problema sa Python sa Project Euler. Kung naipit ka sa isang problema, okay lang kung titingnan mo ang solusyon ng ibang developer, ang pinakamahalaga ay matuto ng bago sa kanila. Narito ang dalawa sa aking mga paboritong blog:

Gawain 6: Gumawa ng laro

Bukod sa paggawa ng sarili mong laro, may iilan lang na maaaring maging masaya.

Bukod sa paggawa ng sarili mong laro, may iilan lang na maaaring maging masaya. Maaari itong maging isang matarik na curve sa pag-aaral, ngunit talagang sulit ito. Ang PyGame ay ang pinakasikat na library para sa pagbuo ng mga laro sa Python, at hindi ka mahihirapang maghanap ng mga libreng tutorial tungkol dito. Nasa ibaba ang pinakamahusay sa kanila.

Opisyal na dokumentasyon ng PyGame

Tulad ng mga tutorial sa Python, ang mga developer ng PyGame ay nagbigay ng dokumentasyon - isang panimula. Ang materyal ay puno ng teknikal na terminolohiya, kung sakaling gusto mong simulan kaagad ang pagbuo ng mga laro. Gayunpaman, gaya ng dati, ang dokumentasyon ng developer ay ang pinakamahusay na mapagkukunan ng impormasyon; kaya naman inirerekomenda ko ang site na ito.

Mag-imbento Gamit ang Python (Gamit ang PyGame)

Isang libreng e-book mula sa AI Sweigart ang nagpapakilala sa mambabasa sa PyGame library, kahit na wala kang alam tungkol sa library na ito, pagkatapos basahin ito ay makakagawa ka ng isa o dalawa. Ang mga simpleng laro ay magiging isang mahusay na pundasyon para sa paglikha ng iyong sariling proyekto, kung mayroon kang pagnanais. Nagbibigay si Sweigart ng mga detalyadong komento sa kanyang code upang makatulong sa proseso ng pag-aaral.

Ito ay isa pang playlist mula sa TheNewBoston. Isang mahusay na panimula sa PyGame. Muli, maaaring hindi ka pamilyar sa library na ito sa pamamagitan ng pagbabasa ng aklat ay magsisimula kang maunawaan ang PyGame, ngunit hindi tulad ng InventWithPython hindi ka gagawa ng ganap na laro.

Gawain 7: Galugarin ang Mga Popular na Aklatan at Tool

Ang Python ay isang pangkalahatang layunin na wika kung saan maaari mong gawin ang halos anumang bagay; Mayroon kaming walang katapusang hanay ng mga aklatan at tool na aming magagamit. Nasa ibaba ang isang listahan ng pinakasikat.

PyPy

Kung gusto mong mangolekta ng impormasyon mula sa mga HTML na pahina... Gagawin ng BeautifulSoup ang lahat ng kailangan mo at makatipid ng malaking oras.

Kapag gumagawa ng mga bagay na nangangailangan ng maraming mapagkukunan ng CPU at pakiramdam mo ay ginagamit ng Python ang mga mapagkukunang iyon, sasagipin si PyPy. Ang PyPy ay isang alternatibong compiler para sa Python na maaaring mapabilis ang pagkalkula.

NumPy + SciPy

Ang mga aklatang ito ay karaniwang ginagamit nang magkasama (depende ang SciPy sa NumPy). Kung kailangan mong gumawa ng mga gawaing nauugnay sa mga kalkulasyon sa matematika o siyentipikong pananaliksik, ang mga aklatang ito ay magsisilbing isang mahusay na katulong. Pinapalawak ng NumPy at SciPy ang mga mathematical function at kakayahan ng Python, bilang isang resulta kung saan sila ay makabuluhang mapabilis ang solusyon ng mga gawain.

BeautifulSoup

Napakaganda ng BeautifulSoup. Ang pag-parse ng impormasyon mula sa mga pahina ng HTML ay maaaring medyo nakakapagod at nakakadismaya. Gagawin ng BeautifulSoup ang lahat para sa iyo at makakatipid ka ng napakalaking oras. Lubos kong inirerekumenda ang library na ito, nakakatuwang magtrabaho kasama.

Python Image Library

Ang Image Library (PIL) ay perpekto para sa anumang gawain sa pagproseso ng imahe. Kung may pangangailangan na makipag-ugnayan sa larawan sa anumang paraan, malamang na makakatulong ang PIL na maisakatuparan ang gawaing ito.

Django

Tulad ng nabanggit ko sa artikulong ito, kung interesado ka sa pagbuo ng web, ang iyong pinili ay ang balangkas ng Django. Ito ang pinakasikat na balangkas ng Python at mayroong isang malaking bilang ng mga mapagkukunan ng pagsasanay dito.

Hamon 8: Mag-ambag sa mga open source na proyekto

Sa isang disenteng pag-unawa sa wika, ang kakayahang magbasa at mag-navigate sa code ng ibang tao ay isang mahalagang kasanayan at mapapatunayan din na isang mahusay na paraan upang matuto.

Ito ang dahilan kung bakit napakapopular ang mga open source na proyekto. Ang mga website ng Github at Bitbucket ay kung saan ka dapat magsimula. Huwag mag-alala, kung pinupuna ng mga tao ang iyong code, hindi ka dapat mag-ambag kaagad sa mga proyektong iyon. Maaari kang palaging magtrabaho sa isang hiwalay na sangay ng proyektong ito, alamin kung paano ito gumagana at gawin ang anumang gusto mo dito. Kung bigla kang makakita ng mga bagay na kailangang pagbutihin, mahusay! Gawin ito at isumite ang iyong mga pagpapabuti. Iyan ang para sa mga open source na proyekto.

Konklusyon

Sana nakapagbigay ako ng matibay na pundasyon para sa pag-aaral ng Python para sa iyo. Kung sakaling nakalimutan kong banggitin ang anumang mga mapagkukunan, mangyaring ipaalam sa akin sa mga komento sa ibaba upang matulungan ang ibang mga gumagamit!

Pana-panahong tinatanong ako tungkol sa mga gawain sa pagsubok sa mga paksa ng Python. Nagpasya akong ibuod ang mga tanong at isulat ang mga ito sa isang lugar. Hindi ko ginagamit ang mga tanong at gawaing ito sa mga panayam, ngunit ginagamit ko ang mga ito sa pagsasanay.

Mga uri ng data, mga pangunahing konstruksyon

  1. Paano makakuha ng isang listahan ng lahat ng mga katangian ng isang bagay
  2. Paano makakuha ng isang listahan ng lahat ng mga pampublikong katangian ng isang bagay
  3. Paano makakuha ng isang listahan ng mga pamamaraan sa isang bagay
  4. Anong "magic" na variable ang nag-iimbak ng mga nilalaman ng tulong?
  5. Mayroong dalawang tuple, kunin ang pangatlo bilang pagsasama-sama ng unang dalawa
  6. Mayroong dalawang tuple, kunin ang pangatlo bilang unyon ng mga natatanging elemento ng unang dalawang tuple
  7. Bakit kung ang isang listahan ay binago sa isang loop, pagkatapos ay para sa x sa lst[:] ay ginagamit, na nangangahulugang [:] ?
  8. Mayroong dalawang listahan ng parehong haba, ang isa ay naglalaman ng mga susi, ang isa ay naglalaman ng mga halaga. Gumawa ng diksyunaryo.
  9. Mayroong dalawang listahan ng magkakaibang haba, ang isa ay naglalaman ng mga susi, ang isa ay naglalaman ng mga halaga. Gumawa ng diksyunaryo. Para sa mga key na walang value, gamitin ang None bilang value. Huwag pansinin ang mga halaga kung saan walang mga susi.
  10. May diksyunaryo. Baliktarin ito. Yung. pares key: value swap - value: key.
  11. May string sa Unicode, kumuha ng 8-bit string sa utf-8 at cp1251 encoding
  12. May string sa cp1251 encoding, kunin ang Unicode string

Mga pag-andar

    Sumulat ng isang function na maaaring ipasa ang mga argumento alinman sa isang listahan/tuple o isa-isa. Binubuo ng function ang lahat ng argumento.

    >>> f(1, 2, 3) 6 >>> f() 6 >>> f((3, 5, 6)) 14 >>> f(3, (5, 6)) 14

    Sumulat ng factory function na magbabalik ng karagdagan function na may argumento.

    >>> add5 = karagdagan(5) # ibinabalik ng addition function ang addition function na may 5 >>> add5(3) # will return 3 + 5 = 8 8 >>> add5(8) # will return 8 + 5 = 13 13 >>> add8 = addition(8) >>> add8(2) # will return 2 + 8 = 10 10 >>> add8(4) # will return 4 + 8 = 12 12

    Sumulat ng mga opsyon gamit ang karaniwang "internal" at anonymous na mga function ng lambda.

    Sumulat ng factory na katulad ng hakbang 2, ngunit nagbabalik ng listahan ng mga naturang function

    >>> mga karagdagang = karagdagan_range(0, 5) # listahan ng mga function ng karagdagan mula 0 hanggang 5 kasama

    mga. katulad

    Sumulat ng analogue ng mapa:

    • ang unang argumento ay alinman sa isang function o isang listahan ng mga function
    • ang pangalawang argumento ay isang listahan ng mga argumento na ipapasa sa mga function
    • ipinapalagay na ang mga function na ito ay mga function ng isang argumento
    >>> mymap(, ) [(1, 2, 3), (2, 3, 4), (3, 4, 5)]

    sa kasong ito, ang "pinalawak" na entry ay magiging: [(add0(1), add0(2), add0(3)), (add1(1), add1(2), add1(3)), (add2( 1), add2(2), add2(3))]

Mga iterator

    Sumulat ng generator function cycle na magbabalik ng cyclic iterator.

    >>> i = iter() >>> c = cycle(i) >>> c.next() 1 >>> c.next() 2 >>> c.next() 3 >>> c.next () 1

    Sumulat ng isang function ng chain generator na sunud-sunod na inuulit ang mga naipasa na bagay (isang arbitrary na numero)

    >>> i1 = iter() >>> i2 = iter() >>> c = chain(i1, i2) >>> c.next() 1 >>> c.next() 2 >>> c. next() 3 >>> c.next() 4 >>> c.next() 5 >>> c.next() Traceback (huling huling tawag): ... StopIteration

Sumulat ng mga doctest para sa mga function at iterator

Mga module

  1. Mayroon kaming na-import na module foo, paano namin malalaman ang pisikal na landas ng file mula sa kung saan ito na-import?
  2. Mula sa foo module ini-import mo ang feedparser module. Ang Bersyon X ng feedparser ay nasa system-wide site-packages directory, ang bersyon Y ay nasa tabi ng foo module ay tinukoy ang PYTHONPATH environment variable, at nandoon din ang feedparser, bersyon Z. Aling bersyon ang gagamitin?
  3. Paano ko makikita ang listahan ng mga direktoryo kung saan naghahanap ang Python ng mga module?
  4. Mayroon kang module foo, sa loob nito ay na-import ang module bar. Sa tabi ng foo module ay may mga file na bar.py at bar/__init__.py Aling module ang gagamitin.
  5. Ano ang ibig sabihin ng construction __name__ == "__main__" at para saan ito ginagamit?

Mga klase

    Sumulat ng isang batayang Observable na klase na magpapahintulot sa mga inapo na:

    1. kapag pumasa sa **kwargs, ipasok ang kaukulang mga halaga bilang mga katangian
    2. siguraduhin na kapag nagpi-print ang lahat ng mga pampublikong katangian ay ipinapakita
    >>> class X(Mapapansin): ... pass >>> x = X(foo=1, bar=5, _bazz=12, name="Amok", props=("Isa", "dalawa")) >>> print x X(bar=5, foo=1, name="Amok", props=("Isa", "dalawa")) >>> x.foo 1 >>> x.name "Amok" > >> x._bazz 12
  1. Sumulat ng isang klase na, sa lahat ng hitsura, ay magiging isang diksyunaryo, ngunit magpapahintulot sa mga susi na ma-access bilang mga katangian.

    >>> x = DictAttr([("isa", 1), ("dalawa", 2), ("tatlo", 3)]) >>> x ( "isa": 1, "tatlo": 3, "dalawa": 2) >>> x["tatlo"] 3 >>> x.get("isa") 1 >>> x.get("lima", "nawawala") "nawawala" >>> x .one 1 >>> x.five Traceback (huling tawag sa pinakahuling): ... AttributeError

    Point 2 na may komplikasyon: isulat ang parent class na XDictAttr upang ang susi ng kahalili ay dynamic na tinutukoy ng pagkakaroon ng get_ method .

    >>> class X(XDictAttr): ... def get_foo(self): ... return 5 ... def get_bar(self): ... return 12 >>> x = X(("one": 1 , "dalawa": 2, "tatlo": 3)) >>> x X: ( "isa": 1, "tatlo": 3, "dalawa": 2) >>> x["isa"] 1 > >> x.three 3 >>> x.bar 12 >>> x["foo"] 5 >>> x.get("foo", "missing") 5 >>> x.get("bzz", "nawawala") "nawawala"

    Sumulat ng isang klase na nagrerehistro ng mga pagkakataon nito at nagbibigay ng interface ng iterator sa ibabaw nila

    >>> x = Reg() >>> x >>> y = Reg() >>> y >>> z = Reg() >>> para sa i sa Reg: ... print i

Sumulat ng mga unit test, batay sa mga pagsubok sa itaas, ngunit hindi limitado sa kanila.

Mga metaclass at descriptor

  1. Ano ang ginagamit nila, anong mga argumento ang natatanggap nila, ano ang dapat nilang ibalik: mga pamamaraan __new__ at __init__ na mga klase
  2. Anong mga argumento ang natatanggap ng __new__ at __init__ para sa isang metaclass?

    Magpatupad ng mga deskriptor na kumukuha ng uri ng katangian

    >>> class Image(object): ... height = Property(0) ... width = Property(0) ... path = Property("/tmp/") ... size = Property(0) > >> img = Imahe() >>> img.height = 340 >>> img.height 340 >>> img.path = "/tmp/x00.jpeg" >>> img.path "/tmp/x00.jpeg " >>>

    Magpatupad ng base class (gamit ang metaclass) na kumukuha ng uri ng attribute

    >>> class Image(Object): ... height = 0 ... width = 0 ... path = "/tmp" ... size = 0 >>> img = Image() >>> img.height = 340 >>> img.height 340 >>> img.path = "/tmp/x00.jpeg" >>> img.path "/tmp/x00.jpeg" >>> img.path = 320 Traceback (pinakabagong huling tawag): ... TypeError

    Magpatupad ng base class (gamit ang metaclass) at mga descriptor na gagawa ng SQL schema (ANSI SQL) para sa modelong batay sa klase:

    >>> klase Imahe(Talahanayan): ... taas = Integer() ... lapad = Integer() ... landas = Str(128) >>> i-print ang Image.sql() GUMAWA NG TABLE na imahe (height integer, width integer, path varchar(128))

    Hindi na kailangang ipatupad ang NULL, PRIMARY KEY, FOREIGN KEY, CONSTRAINTS. Ito ay sapat na upang ipatupad ang dalawang uri: Integer at Str.

  • Layunin 1- tulong sa mga link, materyales, para sa mga nagpaplanong mag-aral ng programming at kunin ang Python bilang kanilang unang wika. Ipakita na hindi ito kasing hirap gaya ng tila.
  • Layunin 2- mangolekta ng mga link sa kapaki-pakinabang at kawili-wiling mga materyales sa paksang ito sa mga komento.

0. Magtatagumpay ba ako?

Sa simula pa lang ay nag-alinlangan ako na may magagawa pa akong higit pa sa Hello World. Tila sa akin na ang programming ay napakahirap at lubhang mahiwaga. Bilang karagdagan, mayroong trabaho, libangan, pamilya, na makagambala sa buong pag-aaral.

Hindi ako dapat natakot at hindi ko ito inirerekomenda sa iyo. Ang programming ay malamang na hindi kailanman magiging aking pangunahing propesyon, ngunit ito ay isang mahusay na paraan upang maging malikhain. Ito ay chess at Civilization sa isang bote.

Ang lahat ay mas simple kaysa sa tila at mas kawili-wili.

1. Panitikan

Mark Lutz "Python Programming"- inirerekumenda na basahin ito sa maraming mga forum at kurso. Tila ito sa akin ay masyadong detalyado at load para sa isang baguhan. Magbasa ng marami, magprogram ng kaunti. Ito ay mas kapaki-pakinabang na basahin ito pagkatapos ng mastering Python kahit man lang.

Mark Summerfield "Python 3 Programming"- pabago-bago, na may mahusay na mga halimbawa at gawain. Nang walang hindi kinakailangang malalim, na nagpapalubha lamang sa lahat sa simula. Inirerekomenda ko na magsimula sa aklat na ito; makakatulong ito sa iyo na mabilis na maunawaan nang hindi natatakot sa mga komplikasyon.

Ang lahat ng iba pang mga libro ay naging hindi gaanong kapaki-pakinabang at nagbibigay-kaalaman. Sa pangkalahatan, mahirap kunin at bumili lamang ng magagandang literatura sa paksang ito sa isang tindahan o sa digital na bersyon.

2. Ano ang mababasa sa Internet

http://pythonworld.ru/ - pinag-uusapan ang mga pangunahing kaalaman ng wika sa simple at naiintindihan na wika, kadalasang ginagamit bilang cheat sheet.

Pagkalipas ng isa pang dalawang buwan, nagawa kong gawin ang aking unang Django application. Ngunit ang pangunahing bagay ay mayroon na akong sapat na kaalaman para sa malayang pag-unlad at pag-aaral. Ang pinakamahirap na bagay ay makarating sa puntong ito.

Pagkalipas ng isa pang buwan, sumali ako sa dalawang proyekto sa GitHub at nakikilahok ako sa mga ito. Siyempre, nalulutas ko pa rin ang mga simpleng problema, ngunit bilang kapalit ay tumatanggap ako ng payo at pagsasanay.

Tags: pagsasanay sa sawa, pagsasanay sa programming

Ang bawat mag-aaral ng Python ay kailangang magsulat ng malagkit na code. Ipinakita namin sa iyong pansin ang ilang mga gawain upang ipatupad (hindi masyadong simple (maliban sa una) at hindi masyadong kumplikado).

Mayroon ding isang imbakan para sa mga gawaing ito na may mga pagsubok at aking mga solusyon (upang subukan ang iyong sarili).

Upang magpatakbo ng mga pagsubok para sa iyong function, ang pinakamadaling paraan ay ang pagdaragdag ng code mula sa folder ng mga pagsubok hanggang sa dulo ng file ng function.

At ngayon, sa totoo lang, ang mga gawain:

Mga simpleng aritmetika na operasyon (1)

Sumulat ng isang function na arithmetic na tumatagal ng 3 argumento: ang unang 2 ay mga numero, ang pangatlo ay ang operasyon na dapat gawin sa kanila. Kung ang pangatlong argumento ay + , idagdag ang mga ito; kung - , pagkatapos ay ibawas; * - paramihin; / - hatiin (una sa pamamagitan ng segundo). Kung hindi, ibalik ang string na "Hindi kilalang operasyon".

Leap year (2)

Sumulat ng function na is_year_leap na tumatagal ng 1 argumento - ang taon, at nagbabalik ng True kung ang taon ay isang leap year, at False kung hindi.

Square (3)

Sumulat ng isang function na parisukat na tumatagal ng 1 argumento - ang gilid ng parisukat, at nagbabalik ng 3 mga halaga (gamit ang ): ang perimeter ng parisukat, ang lugar ng parisukat at ang dayagonal ng parisukat.

Seasons (4)

Sumulat ng season ng function na tumatagal ng 1 argument - ang numero ng buwan (mula 1 hanggang 12), at ibinabalik ang season kung saan kabilang ang buwang ito (taglamig, tagsibol, tag-araw o taglagas).

deposito sa bangko (5)

Ang gumagamit ay nagdeposito ng isang ruble sa loob ng isang panahon ng mga taon sa 10% bawat taon (bawat taon ang laki ng kanyang deposito ay tumataas ng 10%. Ang perang ito ay idinaragdag sa halaga ng deposito, at magkakaroon din ng interes dito sa susunod na taon. ).

Sumulat ng isang function bank na tumatagal ng mga argumento a at taon at ibinabalik ang halaga na nasa account ng user.

Mga pangunahing numero (6)

Sumulat ng isang function na is_prime na tumatagal ng 1 argument - isang numero mula 0 hanggang 1000, at nagbabalik ng True kung ito ay prime, at False kung hindi.

Tamang petsa (7)

Sumulat ng function ng petsa na tumatagal ng 3 argumento - araw, buwan at taon. Ibalik ang Tama kung ang naturang petsa ay nasa aming kalendaryo, at Mali kung hindi.

XOR encryption (8)

Sumulat ng isang function na XOR_cipher na tumatagal ng 2 argumento: ang string na ie-encrypt at ang encryption key, na ibinabalik ang string na naka-encrypt sa pamamagitan ng XORing ang mga character ng naka-key na string. Sumulat din ng isang function na XOR_uncipher, na, gamit ang isang naka-encrypt na string at isang susi, ibinabalik ang orihinal na string.

Paghahanda para sa isang panayam para sa posisyon ng developer ng Python

Mga materyales na ginamit sa paghahanda: Ang Mahalagang Gabay sa Pakikipagpanayam sa Python, Dapat Magkaroon ng Mga Tanong sa Panayam sa Python, 15 Mahahalagang Tanong sa Panayam sa Python, Mga Tanong at Sagot sa Panayam sa Python

Ngayon, ang bilang ng mga programmer ng Python ay patuloy na lumalaki, ngunit ang bilang ng mga trabaho para sa kanila ay hindi mabilis na lumalaki. Ang isang modernong developer ay kailangang maging mapagkumpitensya upang makapasok sa nais na posisyon. Naghanda kami ng isang artikulo na may mga paksa at tanong na maaaring itanong ng isang tagapag-empleyo sa panahon ng isang pakikipanayam, at dinagdagan ang mga ito ng maliliit na paliwanag - mahalagang, ito ay mga problema sa programming ng Python na may mga solusyon. Ang materyal ay magiging kapaki-pakinabang para sa mga patuloy na nagre-review, at makakatulong sa mga nagsisimula na mag-navigate kung saan gagawin ang kanilang mga unang hakbang at kung ano ang dapat bigyang pansin. Isipin ito bilang isang uri ng parola.

Nagtatrabaho sa Mga Listahan

Lambda Expressions, List Generators, at Generator Expressions

Mga expression ng Lambda- isang paraan ng shortcut para sa paglikha ng mga single-line na anonymous na function. Ang kanilang pagiging simple madalas (ngunit hindi palaging) ay ginagawang mas malinis at mas nababasa ang code kaysa sa mga klasikong deklarasyon ng function. Sa kabilang banda, nililimitahan ng parehong pagiging simple ang mga posibilidad at mga lugar ng aplikasyon ng mga expression ng lambda.

Listahan ng mga generator magbigay ng isang maigsi na syntax para sa paggawa ng mga listahan. Ginagamit ang mga ito upang bumuo ng mga listahan kung saan ang bawat elemento ay resulta ng ilang (mga) operasyon sa mga elemento ng isa pang sequence o iterator. Ang mga generator ng listahan ay maaaring gamitin upang lumikha ng isang kasunod ng mga elementong iyon na ang mga miyembro ay nakakatugon sa isang tiyak na kundisyon. Ang mga generator ng listahan sa Python ay isang natatanging alternatibo sa mga built-in na mapa() at filter() function.

Ang mga expression ng Lambda na may mga function ng map() at filter() at mga generator ng listahan ay magkatulad, kaya ang pagpili ng isa sa mga tool na ito ay subjective at case-by-case. Ngunit dapat tandaan na ang mga generator ng listahan ay bahagyang mas mabilis - ang pagtawag sa isang function ng lambda ay lumilikha ng isang bagong stack frame.

Mga Ekspresyon ng Generator ay syntactically at functionally katulad ng list generators, ngunit may mga mahahalagang pagkakaiba sa pagitan ng kanilang mga mekanismo at mga lugar ng aplikasyon. Ang pag-ulit sa isang generator expression o list generator ay gagawin ang lahat ng pareho, ngunit ang list generator ay unang gagawa ng buong listahan sa memorya, habang ang generator expression ay lilikha ng mga elemento sa mabilisang kung kinakailangan. Ang mga expression ng generator ay maaaring gamitin sa isang malaki o kahit na walang katapusang bilang ng mga sequence. At ang pagbuo ng mga halaga sa demand ay nagpapabuti sa pagganap at binabawasan ang paggamit ng memorya. Gayunpaman, dapat tandaan na ang mga karaniwang pamamaraan ng listahan ng Python ay maaaring gamitin sa output ng isang generator, ngunit hindi sa generator mismo.

Ano ang pagkakaiba sa pagitan ng isang listahan at isang tuple?

Ang pangunahing pagkakaiba: ang isang listahan ay maaaring magbago, ngunit ang isang tuple ay hindi maaaring. Ang pagtatrabaho sa mga tuple ay mas mabilis kaysa sa mga listahan. Kung kailangan mong tukuyin ang isang pare-parehong hanay ng mga halaga, at ang kailangan mo lang gawin dito ay umulit sa mga elemento nito, mas makatuwirang gumamit ng tuple sa halip na isang listahan. Ang isang tuple ay maaari ding kumilos bilang isang susi para sa mga diksyunaryo, hindi tulad ng isang listahan.

Ang pinaka-advanced na mga kandidato ay magsasabi na ang mga tuple ay magkakaiba at ang kanilang paggamit ay katulad ng paggamit ng struct sa C programming language ay katulad ng mga karaniwang array.

Pag-debug at pagsubok ng code

Anong diskarte ang ginagamit mo para sa pagsubok ng yunit sa Python?

Ang pangunahing sagot sa tanong na ito ay nauugnay sa paggamit ng Python framework - unittest.

Sinusuportahan ng Unittest ang pag-automate ng pagsubok, pagbabahagi ng code para i-set up at kumpletuhin ang mga pagsubok, pagpapangkat ng mga pagsubok, at pagpapahintulot sa mga pagsubok na ihiwalay mula sa balangkas ng pag-uulat. Ang unittest module ay nagbibigay ng mga klase na nagpapadali sa pagsuporta sa mga katangiang ito para sa isang test suite.

Maaaring hilingin sa iyo na ilarawan ang mga pangunahing elemento ng istruktura ng unittest, katulad ng:

  • test bench (test fixture);
  • kaso ng pagsubok;
  • test suite;
  • test runner.

Mga iterator

Ano ang isang iterator?

Ang Iterator ay isang interface na nagbibigay ng access at pag-navigate sa pamamagitan ng mga elemento ng isang koleksyon (array o container). Maaaring may iba't ibang karaniwang pangalan ang mga iterator sa iba't ibang system. Sa mga termino ng sistema ng pamamahala ng database, ang mga iterator ay tinatawag na mga cursor. Sa pinakasimpleng kaso, ang isang iterator sa mababang antas ng mga wika ay isang pointer.

Ano ang pagkakaiba sa pagitan ng isang iterator at isang generator?

Ang mga terminong ito ay malapit na nauugnay (anumang generator ay isang iterator), madalas silang nalilito, na kung minsan ay humahantong sa hindi pagkakaunawaan. Ang iterator ay isang mas pangkalahatang konsepto. Ito ay isang bagay na may dalawang pamamaraan na tinukoy: __next__ at __iter__ . Sa kabilang banda, ang generator ay isang iterator. Ngunit hindi ang kabaligtaran. Maaaring makuha ang generator gamit ang yield keyword sa katawan ng function.

Def squares(start, stop): para sa i in range(start, stop): yield i * i generator = squares(a, b)

GIL

Ang konsepto ng GIL ay isang thread lamang ang maaaring isagawa ng processor sa isang pagkakataon. Ginagawa ito upang walang kompetisyon sa pagitan ng mga thread para sa mga indibidwal na variable. Ang executing thread ay may access sa buong environment. Ang tampok na ito ng pagpapatupad ng mga thread sa Python ay lubos na pinapasimple ang pagtatrabaho sa mga thread at nagbibigay ng isang tiyak na kaligtasan ng thread.

Pagpapasa ng mga Argumento

Paano naipapasa ang mga hindi nababagong bagay?

Ang mga hindi nababagong bagay ay ipinapasa sa halaga. Ang mga bagay tulad ng mga integer at string ay ipinapasa bilang mga sanggunian sa bagay sa halip na bilang mga kopya ng mga bagay.

Paano naipapasa ang mga nababagong bagay?

Ang mga nababagong bagay ay ipinapasa "sa pamamagitan ng pointer". Ang mga bagay tulad ng mga listahan at diksyunaryo ay ipinapasa din bilang mga sanggunian sa bagay, na halos kapareho sa kung paano ipinapasa ang mga pointer sa mga array sa C - ang mga nababagong bagay ay maaaring direktang mabago sa loob ng isang function, tulad ng mga array sa C.

>>> def f(a): # Ang pangalan a ay itinalaga sa ipinasang bagay... a = 99 # Ang lokal na variable lamang ang binago... >>> b = 88 >>> f(b)# Sa una ang mga pangalan a at b ay tumutukoy sa parehong numero 88 >>> print(b) # Variable b ay hindi nagbago 88

Sa snippet na ito, kapag tinawag ang function na f(b), ang variable a ay nakatalaga ng object 88 , ngunit ang variable a ay umiiral lamang sa loob ng tinatawag na function. Ang pagpapalit ng variable a sa loob ng isang function ay hindi makakaapekto sa kapaligiran kung saan tinawag ang function - ito ay lumilikha lamang ng isang ganap na bagong object a sa oras ng tawag.

Ano ang magiging output pagkatapos ng pangalawang tawag sa append() sa code sa ibaba?

>>> def append(list=): ... # idagdag ang haba ng listahan sa listahan... list.append(len(list)) ... return list ... >>> append([" a"," b"]) ["a", "b", 2] >>> >>> append() # calling without an argument ay gumagamit ng default na value ng list >>> >>> append() # Ngunit ano ang mangyayari kapag tinawag muli ang append nang walang argumento?

Kapag ang default na halaga para sa isang argument ng function ay isang expression, sinusuri ito nang isang beses lamang, sa halip na palaging kapag tinawag ang function. Kaya, pagkatapos masimulan ang argumento ng listahan sa isang walang laman na array, ang mga susunod na tawag sa function na walang argumento ay patuloy na gagamit ng parehong array na orihinal na nasimulan.

>>> append() # ang unang tawag na walang argumento ay gumagamit ng default na value >>> append() # ngunit pagkatapos... >>> append() # sunud-sunod na tawag ay nagpapalawak sa default na listahan >>> append() # at tuloy tuloy...

Paano ko mababago ang aplikasyon ng paraan ng append sa nakaraang tanong upang maiwasan ang hindi gustong pag-uugali na inilarawan doon?

Mayroong alternatibong pagpapatupad ng paraan ng append na lulutasin ang problema:

>>> def append(list=None): ... if list is None: list = # Pinapataas ang haba ng listahan... list.append(len(list)) return list ... >>> append( ) >> >idagdag()

Mga tanong sa labas ng ilang partikular na kategorya

Paano mo mapapalitan ang mga halaga ng dalawang variable sa loob ng isang string sa Python?

Tingnan natin ang isang simpleng halimbawa:

>>> x = "X" >>> y = "Y"

Maraming iba pang mga programming language ang nangangailangan sa iyo na gawin ang isang bagay na tulad nito kapag pinapalitan ang mga halaga ng X at Y:

>>> tmp = x >>> x = y >>> y = tmp >>> x, y ("Y", "X")

Ngunit sa Python mayroong isang pagpipilian upang gawin ito sa isang linya ng code na tulad nito:

>>> x,y = y,x >>> x,y ("Y", "X")

Ano ang ilalabas ng huling pahayag sa ibaba?

>>> flist = >>> para sa i in range(3): ... flist.append(lambda: i) ... >>> # ano ang magiging output?

Sa anumang pagsasara sa Python, ang mga variable ay nauugnay sa pamamagitan ng pangalan. Kaya ang linya ng code sa itaas ay maglalabas ng sumusunod:

>>> flist = >>> para sa i sa range(3): ... flist.append(lambda i = i: i) ... >>>

Ano ang layunin ng keyword na "sarili"?

Ang keyword na sarili ay isang variable na tumutukoy sa isang halimbawa ng isang bagay. Kapag nilikha ang isang klase, walang tahasang pagtukoy sa isang bagay na may parehong uri ng klase. Samakatuwid, upang sumangguni sa kasalukuyang klase o bagay, ginagamit ng Python ang sariling keyword.

Class User: def __init__(self): self.name = "Ivan Ivanov" self.age = 16 user_obj = User() user_obj.name # self.name ay naglalaman ng "Ivan Ivanov" bilang isang value

Ano ang layunin ng "yield" na keyword?

Maaaring gawing generator ng yield keyword ang anumang function. Gumagana ito katulad ng return statement, na may pagkakaiba na ang keyword ay magbabalik ng generator object. Ang isang function ay maaari ding gumawa ng maraming tawag sa yield na keyword.

Def testgen(index): weekdays = ["sun","mon","tue","wed","thu","fri","sat"] yield weekdays yield weekdays day = testgen(0) print next( araw), susunod(araw) #output: sun mon

Ano ang __init__.py? Paano mag-import ng isang klase mula sa isa pang direktoryo?

Ang Init__.py ay pangunahing ginagamit upang simulan ang mga pakete ng Python.

Ang __init__.py file sa lstm_m na direktoryo ay nagsasabi sa Python interpreter na ang direktoryo na ito ay dapat ituring bilang isang Python package.

Paano mag-import ng isang klase mula sa isa pang direktoryo?

Karaniwan ang __init__.py ay isang walang laman na file. At kung kailangan nating gumamit ng lstm.py sa run.py file, kailangan itong ma-import tulad ng sumusunod:

Mula sa lstm_m import lstm

Bilang karagdagan, sa loob ng folder ng module ay dapat mayroong isang file na tinatawag na __init__.py para sa pag-import.

Anong mga built-in na uri ang mayroon sa Python?

May mga nababago at hindi nababago na built-in na mga uri ng Python.

Nababago:

  • mga listahan;
  • maraming tao;
  • mga diksyunaryo.

hindi nababago:

  • mga string;
  • tuples;
  • mga numero.

Mangyaring tandaan na ang mga pangunahing uri lamang ang nakalista sa itaas. Sa katunayan, mayroong higit sa anim sa kanila.

Ano ang docstring sa Python?

Ang Python documentation string (docstring) ay isang paraan upang idokumento ang mga function, module at mga klase. Ang mga pamantayan sa disenyo ay nasa opisyal na website.

Paano ko maiko-convert ang isang numero sa isang string?

Upang i-convert ang isang numero sa isang string, karaniwan mong ginagamit ang built-in na str() function, bagama't may iba pang mga paraan, gaya ng "(0:d).format(number) at "%d"%number. Kung gusto mong i-convert ang isang decimal na numero sa octal (oct - octal) o hexadecimal (hex - hexadecimal), gamitin ang built-in na function na oct() o hex() ayon sa pagkakabanggit.

Ano ang pagkakaiba sa pagitan ng Xrange at range?

Ang xrange() function ay nagbabalik ng isang xrange object, habang range() ay nagbabalik ng isang listahan at gumagamit ng parehong dami ng memory, anuman ang laki ng function.

Paano ko makikita ang mga pamamaraan o katangian ng isang bagay?

Ang utos ng dir(x) ay nagbabalik ng isang pinagsunod-sunod na listahan ng mga pangalan ng katangian para sa anumang bagay na ipinasa dito. Kung walang mga bagay na tinukoy, ibinabalik ng dir() ang mga pangalan sa kasalukuyang saklaw.

Bukod pa rito

Kung nagsasalita ka ng Ingles, inirerekomenda namin ang pagkuha ng mga online na pagsusulit upang subukan ang iyong kaalaman bago ang pakikipanayam.

Mga koleksyon ng mga materyales para sa pag-aaral ng Python mula sa amin: , . Maikli din. Huwag kalimutang lutasin ang mga problema: dito mo ito magagawa.

Konklusyon

Ang mga tanong at tip na ipinakita sa artikulong ito ay maaaring maging napakahalagang tulong sa paghahanda ng mga aplikante para sa mga panayam. Umaasa kami na magiging kapaki-pakinabang ang mga developer para sa pagsubok ng kanilang kaalaman nang mag-isa bago makipagkita sa isang employer. Ngunit hindi natin dapat kalimutan na ang lahat ng mga tanong na ipinakita sa itaas ay isa sa ilang mga tool para sa pagpili ng mga kandidato para sa isang posisyon bilang bahagi ng isang partikular na diskarte. Maghanda nang mabuti at maigi. Good luck!