Néhány kérdés a python-zadrota számára
Emlékszem, a közelmúltban arra kértek fel furcsa kérdést: milyen kérdéseket tehet a Python programozó, hogy értékelje ismereteit? Őszintén szólva nem szeretem ezeket a teszteket, mert mind a vákuumban szintetikus anyagokat, akár bizonyos dokumentumok dokumentációját és nyelvhibákat ismerik. Ők is imádják, hogy mindenféle interjúkat, ahol a legmagasabb mértékű idiocy a tilalom a Google és írni mindent egy darab papírt. Nos, van itt a "hogyan kell xor-t csinálni pythonban?". Nos, legalább emlékezzen a vicces témára az agyban a Senior PHP és a vicces válasz. Bár elkényeztetett, de véleményem szerint még mindig kaptam érte, -5 karmát a gonosz, szerencsétlen férfiaktól. Nos, ez még mindig jó, RNR'shniki a habrán - a leginkább rettegett a többi kasztra, és ritkán hajlamos az önirónia iránt, így általában a PHP-felsőknél sokkal többet vágnak. De az én irónia jelentése világos - a PHP három kérdésére, a nulla pont a PHP-re utal. És mivel mindenki, aki megérti a programozót, általában a sztringosztály minden módjának nevével szembesül, még akkor is gyakran keressem a nevüket a bpythonon keresztül, és semmi, életben nincs szüksége valamire. A legtöbbet, amit itt elviselhetek, olyan kérdések, mint "hogyan kell felsorolni az objektum összes mezőjét és módját". Minden pythonist válaszolni fog valamit a kategóriából: >>> [x for x in dir ("") ha x.startswith ("t")]
['title', 'translate']
Az én tapasztalataim azonban csekélyek, de sikerült megtalálni magamnak egy pár kedvenc kérdést, amelyeket szeretem a kezdő pityistáknak.
Kezdjük egy egyszerű kérdéssel, csak hogy meghatározzuk - mielőtt a C + + kapcsolóval vagy a fiúval legalább egyszer látta a kézikönyvet.
Hogyan rendezhet két listát a második elemeivel?
Ha gondolkodni vagy nem tudni - talán minden rossz, vagy talán csak elfelejtettem. Ha elkezdi írni a qsortját, akkor ez egy másodéves. A legtöbb python-módú válasz: >>> a = [1, 3, 2]
>>> b = [11, 33, 22]
>>> rendezve (zip (a, b), kulcs = lambda x: x [1])
[(1, 11), (2,22), (3,33)]
A kérdés csak a szintaxis ismerete, de a helyes tudás. Itt te és kedvenc rendezve (), lambda, és zip (). Egy úriember, senki sehol.
frissítés: a harmadik Python-ban a legfontosabb argumentumot eltávolították, így csak a cmp maradt. Így tehát és itt is lehetséges: sort (zip (a, b), cmp = lambda x, y: x [1] - y [1])
upd2: Hiba, a harmadik pythonban csak a cmp eltávolítva. Így: rendezve (iterálható, kulcs = nincs, fordított = hamis)
Írjon egy ciklust 1-től 100000000000000000000000-ig
Ez a kedvenc kérdésem, amit hallottam valahol a Yandexről, és azóta szerelmes lett. Még az első alkalom, hogy nem értettem, mi a baj, és a szokásos módon írta az i-t xrange-ban (.). A kérdés csak a Python "mély" lényege. Mert egyesek azt gondolják, hogy ha eltávolították az adattípusokat, mutatókat és más hrenoteneket, akkor mindent megteszhet. De nem. Do: >>> a sys import maximumtól
>>> maxint
9223372036854775807 És látni fogja, hogy a pythonban lévő int korlátozott. Wow. Csodák és végtelen szelek nem történnek meg. A tartomány és a xrange, amikor átadja nekik a paramétert, futtassa az int () függvényt. Így egy ilyen gyönyörű kihívással mindenki szar. Ez jó kérdés. Azonnal megmutatja, hogy a személy fél-e a generátoroktól, vagy sem, és van-e valami az adattípusokkal kapcsolatban. Röviden, a helyes válasz "írni a legegyszerűbb generátort." Ez elég. Ha szellem, írj valamit: >>> def gen (a):
. míg a> 0:
. a - = 1
. hozam a
.
>>> lista (gen (20))
[19., 18., 17., 16., 15., 14., 13., 12., 11., 10., 9., 8., 7., 6., 5.,
Mi fog történni.
ha végrehajtja a kódot: >>> a = [[]] * 3
>>> a [0] .append (42)
>>> nyomtassa ki a
és ami a legfontosabb - miért?
Ha nem tudja, mit jelent [3], akkor valószínűleg nem fog válaszolni a kérdésre (még akkor sem, ha három listát sorol fel), nos, nos, nem halálos, tudni kell, mit kell tanítani, de ha tudod, piszkos trükk. Három lista listáját hoztuk létre, az első pedig 42-et, úgy tűnik, minden rendben van. Erre a kőre ütköztem, amikor először írtam egy tankönyvet.
A helyes válasz: [[42], [42], [42]
Igen, igen, a benne létrehozott összes lista azonos objektumra mutat. Ez egy trükk. Helló, C / C ++.
Mi a különbség a () és a [] között a listázási kifejezések között?
Nos, ez az, ami [x for x in lst] különbözik (x az x az lst-ben). Meglepett, de nagyon sokan nem. A nyelv ismerete már igen, igen. Az első - azonnal visszaad egy listát, a második - a lista objektum-generálóját.
Hogyan kell írni egy singletont?
Véleményem szerint az összes pythonisták kedvenc kérdése. Amikor elkészítettem ezt a szöveget és megkérdeztem a barátait, 100% -uk javasolta ezt a kérdést. De nem tagadom, a kérdés nagyon jó, és a nyelv sajátosságairól van szó. Ismét itt több választási lehetőség: 1) "És Cho egy egyszemélyes?" Aztán azonnal minden világos, "négy bandája" a kezében és grimaszolja a gránit tudományt. 2) A get_instance () paranccsal elkezdi írni az osztályát, és megpróbálja az építtetőt saját magával vinni. Nos, ha meg akarsz gúnyolódni, még meg is nézheted. Azonban jobb, ha azonnal megállsz és tanítasz az utolsó pontot. 3) A metaklaszokon egy singletont ír. Ez ritka és tiszteletre méltó, mert bárki, aki képes legyőzni a python metaklaszokat, máris képes egy tetoválást csinálni egy kígyóval. De bármennyire volt hűvös, az a nukleáris robbanás, hogy megcsípje az anyákat. 4) A python modul máris egyedi. A modulot bárhonnan létrehoztuk, bár __init__.py deklaráljuk az összes funkciót, majd importáljuk a modult my_cool_single néven. Kész. Az új behozatal nem változtat semmit.
Mi fog történni és miért?
Itt van a kód: >>> a = [1, 2, 3, 4, 5]
>>> x esetén a:
. del x
Úgy tűnik, minden olvasható és hűvös. Annak ellenére, hogy 1, 2, 3. - ezek még mindig tárgyak, törölhetők. És semmi baj, csak itt. Semmi sem fog történni. A lista érintetlen marad. A legfontosabb dolog az, miért? Őszintén szólva nem olvastam el a hivatalos dokkolást, és mindent elfelejtettem, de ezt így vitatnám: - A lista tárgyakat mutat be tárgyakra. Az objektumokat máshol tárolják a memóriában. A lista listájának felsorolásakor egy másik mutatót hozunk létre a x elemre. Most két mutatónk van. A Python egy referenciaszámmal rendelkező szemétgyűjtőt használ (egyébként kérdezheti meg, hogy miért rossz ez). Amikor del x-t csinálunk, csak egy mutatót dereferálunk. A második marad. A szemétgyűjtés nem indul el, semmi sem fog történni. A guru korrigálni fog engem, ha tévedek?
Nos, ezért a kód még mindig a következőket teszi: >>> a = [1, 2, 3, 4]
>>> míg a:
. del a [0]
.
.
>>> a
[]
A válasz után még mindig kérdezheti, hogy "hogyan kell normálisan csinálni?" Nos, hogy lássuk-e, hogy egy személy ismeri-e a különbséget a del a és del a között [:].
Írj egy dekorátort, amely megjeleníti a funkció végrehajtási idejét
Nos, teljesen hiányoztuk a dekorátorok ismeretével kapcsolatos kérdéseket. Ezért itt ilyen szerény kérdést rájuk és a modul datetime. Nem, nincsenek buktatók. Csak emlékszel előtt és után. Adjon egy személyt a Google-nak és hajtson végre. Nem adom meg a kódot, a házi feladatot: 3
És milyen más kérdések vannak? Nos, a szeretett fazzbazz mellett, amely már megtanulta a Runet felét, és nem vettem be a posztba.