Jump to content

Python3 literatūra


raivix95
 Share

Recommended Posts

Interesē grāmatas taustāmā formā par Python3 angļu valodā. Konkrēti par to, kā rakstāms 'truly pythonic' kods, par refaktoringu, par OOP. Respektīvi intermediate-advanced līmenis, bet var piedāvāt visu, kas ir.

Interesē ieteikumi par to, kas labs un derīgs, bet jo īpaši ceru, ka kādam ir kāda lieka grāmatiņa, ko uzdāvināt, nopārdot, iemainīt.

Nebaraties, ja vajadzēja tirgus sadaļā postot.

Labots - raivix95
Link to comment
Share on other sites

Mateushs
On 6/10/2022 at 9:17 AM, raivix95 said:

Interesē grāmatas taustāmā formā par Python3 angļu valodā. Konkrēti par to, kā rakstāms 'truly pythonic' kods, par refaktoringu, par OOP. Respektīvi intermediate-advanced līmenis, bet var piedāvāt visu, kas ir.

Interesē ieteikumi par to, kas labs un derīgs, bet jo īpaši ceru, ka kādam ir kāda lieka grāmatiņa, ko uzdāvināt, nopārdot, iemainīt.

Nebaraties, ja vajadzēja tirgus sadaļā postot.

 

Ja gribi sākt apgūt programmēšanu ar Python, tad tas nav labākais veids, kā to darīt. Vispār, cik redzu Linux pasaulē, nozīmīgas programmas Python valodā pamazām tiek pārrakstītas uz C/C++. Programmas Python valodā darbojas lēnāk nekā tajā pašā C valodā rakstītās, turklāt, lai izpildītos Python skripts, sistēmā ir nepieciešams interpretators.

 

Daudz jau Python tiek reklamēts kā valoda, kura palīdz viegli ieiet programmēšanā, taču ir redzēts, ka tiem, kuri sāka programmēšanas pamatus apgūt Python valodā, pēc tam ir nopietnas problēmas saprast citkārt elementāras lietas programmēšanā. Ne velti saka, ka pirmajai valodai, ar ko sāk apgūt programmēšanu, ir liela nozīme. Saka, ka Python sabojā domāšanu...

  • Slikti! 1
Link to comment
Share on other sites

AndrisBB

Pa lielam viss kaut cik resursu prasīgais Pitonā tāpat ir implementēts iekš C. Tik cik Pitons izsauc C funkcijas. Skaidrs ka ja sāks kārtot mega datu daudzumus tīri Pitonā, tad tas būs daudz lēnāk. Bet savādāk nekādas lielās starpības nebūs. 

Link to comment
Share on other sites

raivix95
(labots)
pirms 6 stundām , Mateushs teica:

 

Ja gribi sākt apgūt programmēšanu ar Python, tad tas nav labākais veids, kā to darīt. Vispār, cik redzu Linux pasaulē, nozīmīgas programmas Python valodā pamazām tiek pārrakstītas uz C/C++. Programmas Python valodā darbojas lēnāk nekā tajā pašā C valodā rakstītās, turklāt, lai izpildītos Python skripts, sistēmā ir nepieciešams interpretators.

 

Daudz jau Python tiek reklamēts kā valoda, kura palīdz viegli ieiet programmēšanā, taču ir redzēts, ka tiem, kuri sāka programmēšanas pamatus apgūt Python valodā, pēc tam ir nopietnas problēmas saprast citkārt elementāras lietas programmēšanā. Ne velti saka, ka pirmajai valodai, ar ko sāk apgūt programmēšanu, ir liela nozīme. Saka, ka Python sabojā domāšanu...

 

pirms 4 stundām , AndrisBB teica:

Pa lielam viss kaut cik resursu prasīgais Pitonā tāpat ir implementēts iekš C. Tik cik Pitons izsauc C funkcijas. Skaidrs ka ja sāks kārtot mega datu daudzumus tīri Pitonā, tad tas būs daudz lēnāk. Bet savādāk nekādas lielās starpības nebūs. 

Python māku un jau citiem mācu. Bet gribās tīri palasīties par dziļākām niansēm, mainīgo scopiem, lambda funkcijām, list comprehensioniem, refaktoringu, atmiņas menedžmentu un tādām lietām. Zinu labus resursus internetā, bet gribās kādu grāmatu krājumā, ko varētu pašam palasīties un kā uzskates materiālu izmantot apmācībā. Un, starp citu, Python 3.11 versijā ātrdarbība būs uzlabota par 10-60%.

Un arguments, ka Python nav laba 1. progr. valoda man nav saprotams. Pats kā pirmo ieraudzīju C++, bet tas ir ilgais ceļš kāpās. Tur pat ar elementāru uzdevumu noķēpājies līdz ausīm, sēdi un prāto, kāpēc kods nekompilējas, kādā brīdī viss aiziet, bet pats nesaproti, kāpēc. Python ir lieliska valoda. Viegli lasāma, iesācējam draudzīga, ar lielu community un bibliotēku bāzi.

Labots - raivix95
  • Patīk 1
  • Atbalstu 1
Link to comment
Share on other sites

Pirms 43 minūtēm , raivix95 teica:

 

Python māku un jau citiem mācu. Bet gribās tīri palasīties par dziļākām niansēm, mainīgo scopiem, lambda funkcijām, list comprehensioniem, refaktoringu, atmiņas menedžmentu un tādām lietām. Zinu labus resursus internetā, bet gribās kādu grāmatu krājumā, ko varētu pašam palasīties un kā uzskates materiālu izmantot apmācībā. Un, starp citu, Python 3.11 versijā ātrdarbība būs uzlabota par 10-60%.

Un arguments, ka Python nav laba 1. progr. valoda man nav saprotams. Pats kā pirmo ieraudzīju C++, bet tas ir ilgais ceļš kāpās. Tur pat ar elementāru uzdevumu noķēpājies līdz ausīm, sēdi un prāto, kāpēc kods nekompilējas, kādā brīdī viss aiziet, bet pats nesaproti, kāpēc. Python ir lieliska valoda. Viegli lasāma, iesācējam draudzīga, ar lielu community un bibliotēku bāzi.

Tādas vienas grāmatas īsti nav laikam.

Pats pašlaik lasu un varu rekomendēt "Data Structures & Algorithms in Python". Michael T.Goodrich , Roberto Tamassia, Michael H. Goldwasser.

No grāmatām ko izlasīt man ir ieteikuši citi "Real Python" un  "Automate Boring Stuff with Python".

 

  • Atbalstu 1
Link to comment
Share on other sites

raivix95
pirms 9 stundām , zeds teica:

Pats pašlaik lasu

Lasi digitālā formātā?

pirms 9 stundām , zeds teica:

"Automate Boring Stuff with Python".

Par šo esmu dzirdējis, ka esot laba

Link to comment
Share on other sites

pirms 23 stundām , raivix95 teica:

Python māku un jau citiem mācu.

Tiem, kam māci, neaizmirsti ielikt eksāmenā jautājumu, kāds te rezultāts būs (pats gan jau zini pareizo atbildi, ja jau Python māki :D):

result = False == False in [False]

 

Labots - binary
  • Patīk 1
  • Atbalstu 1
Link to comment
Share on other sites

raivix95
pirms 1 stundas , binary teica:

Tiem, kam māci, neaizmirsti ielikt eksāmenā jautājumu, kāds te rezultāts būs (pats gan jau zini pareizo atbildi, ja jau Python māki :D):

result = False == False in [False]

 

False in [False] ir True

False == True ir False

result = False

Pareizi?

Link to comment
Share on other sites

AndrisBB

Pareizi, nekā jau tur īpaši viltīga tanī piemērā nav.

Varbū vienīgi uz pārsteigumu var pārbaudīt programmētājus. Domās ka nevar būt tik vienkārši, tāpēc sāks šaubīties :D

 

Link to comment
Share on other sites

pirms 7 stundām , raivix95 teica:

Pareizi?

Nepareizi.

>>> result = False == False in [False]
>>> result
True

Tas tev nav C, kurā "jādomā" būtu apmēram tā, kā uzrakstīji.

 

pirms 7 stundām , AndrisBB teica:

Varbū vienīgi uz pārsteigumu var pārbaudīt programmētājus. Domās ka nevar būt tik vienkārši, tāpēc sāks šaubīties :D

Ja sāks šaubīties, tad pareizi vien būs.

Pārbaude te ir nevis "uz pārsteigumu", bet uz Python mācēšanu ;) 

Labots - binary
Link to comment
Share on other sites

Pirms 26 minūtēm , TOoMoOT teica:

Tādas nianses ir labi zināt, bet izmantot būtu slikta prakse, jo vēlāk lasot kodu tas jauks gaisu.

Jā un nē.

 

Slikta prakse - ja projektā var strādāt cilvēki, kas "neprot" python.

Laba prakse - ja projektā strādā cilvēki, kas pārāk tendēti uz "pythonic" koda rakstīšanu.

 

Es droši vien izvairītos no tādu konstrukciju rakstīšanas. Tas pats attiecas arī uz citām valodām (šobrīd - Perl) - valodas fīčas ir labi zināt, bet ja kaut ko var uzrakstīt "C stilā" vai "specifiskās valodas stilā", tad cenšamies pieturēties pie "C stila", ja vien "specifiskās valodas stils" nedod būtisku ieguvumu.

 

Pēc dokumentācijas spriežot, lai arī rezultāts "(x == y) and (y in [z])" un "x == y in [z]" izteiksmēm ir identisks, tehniski tomēr ir atšķirības - "except that y is evaluated only once", attiecīgi arī ātrdarbība varētu atšķirties:

>>> import dis
>>> def f1(a,b,c): return a == b in [c]
...
>>> def f2(a,b,c): return (a == b) and (b in [c])
...
>>> dis.dis(f1)
  1           0 LOAD_FAST                0 (a)
              2 LOAD_FAST                1 (b)
              4 DUP_TOP
              6 ROT_THREE
              8 COMPARE_OP               2 (==)
             10 JUMP_IF_FALSE_OR_POP    10 (to 20)
             12 LOAD_FAST                2 (c)
             14 BUILD_TUPLE              1
             16 CONTAINS_OP              0
             18 RETURN_VALUE
        >>   20 ROT_TWO
             22 POP_TOP
             24 RETURN_VALUE
>>> dis.dis(f2)
  1           0 LOAD_FAST                0 (a)
              2 LOAD_FAST                1 (b)
              4 COMPARE_OP               2 (==)
              6 JUMP_IF_FALSE_OR_POP     8 (to 16)
              8 LOAD_FAST                1 (b)
             10 LOAD_FAST                2 (c)
             12 BUILD_TUPLE              1
             14 CONTAINS_OP              0
        >>   16 RETURN_VALUE
>>>

 

Labots - binary
Link to comment
Share on other sites

AndrisBB

Realitāte jau ir tāda, ka tādu kodu neviens nerakstītu.

Uzrakstītu

result = False in [False]

 

Pirms 57 minūtēm , TOoMoOT teica:

Skaidrojums:

 

Stack overflow reizēm nav tā vieta kam ticēt skaidrojumiem.

 

Ja tā būtu taisnība

False == False in [False]
is evaluated as

(False == False) and (False in [False])

 

Tad pēc tās pašas loģikas
 

False in [False] == False

vajadzētu būt

(False in [False]) and (False == False)

 

Bet tur rezultāts ir pretējs

 

Link to comment
Share on other sites

Pirms 15 minūtēm , AndrisBB teica:

Tad pēc tās pašas loģikas
 

False in [False] == False

vajadzētu būt

(False in [False]) and (False == False)

Nē, pēc tās pašas loģikas sanāk:
(False in [False]) and ([False] == False)   
Tāpēc arī attiecīgi rezultāts cits

1 stundu atpakaļ, binary teica:

Slikta prakse - ja projektā var strādāt cilvēki, kas "neprot" python.

Laba prakse - ja projektā strādā cilvēki, kas pārāk tendēti uz "pythonic" koda rakstīšanu.

Kādā utopijā tu dzīvo?

Link to comment
Share on other sites

AndrisBB

Te jēdzīgāks izskaidrojums

https://www.geeksforgeeks.org/chaining-comparison-operators-python/

 

Pa lielam jau ja kāds tēlotu pārāk lielu 'gudro' un sāktu rakstīt kodu kā pieminētais, kur liela daļa vēlāko labotāju var iekrist, tad pirmajā piegājienā visdrīzāk es liktu viņam izlabot. Vai ja man slikts garastāvokis un tāds kods ir izraisījis kādas reālas problēmas, tad dabūtu brīdinājumu.

Parasti jau iesācējiem patīk tā dudroties un demonstrēt savas zināšanas nebūtiskos sīkumos.

 

 

  • Atbalstu 1
Link to comment
Share on other sites

1 stundu atpakaļ, AndrisBB teica:

Realitāte jau ir tāda, ka tādu kodu neviens nerakstītu.

Uzrakstītu

result = False in [False]

Nu neviens arī nerakstītu "False in [False]", vērtības ņemtu no mainīgajiem vai funkciju izsaukumiem. Tikpat labi tā izteiksme varēja būt "0 < func(a,b,c)<= 1", kurai ir pilnīgi normāli use cases. Sanāk arī daudz lasāmāk nekā piešķirt tā func(a,b,c) rezultātu mainīgajam, pēc tam rakstīt "(0 < smth) and (smth <= 1)".

 

Pirms 54 minūtēm , TOoMoOT teica:

Kādā utopijā tu dzīvo?

Kādā ziņā?

 

Pirms 14 minūtēm , AndrisBB teica:

Parasti jau iesācējiem patīk tā dudroties un demonstrēt savas zināšanas nebūtiskos sīkumos.

Tikpat labi varētu teikt, ka SQL nedrīkst izmantot "BETWEEN", obligāti jāraksta C stilā.

Labots - binary
Link to comment
Share on other sites

AndrisBB

Nav ne jausmas par SQL, bet ja tur sanāk tāda pati gudrošanās, tad neviens nebūtu priecīgs par tādu kodu.

 

Pirms 13 minūtēm , binary teica:

Nu neviens arī nerakstītu "False in [False]", vērtības ņemtu no mainīgajiem vai funkciju izsaukumiem.

Nu tā liste jau var būt aizpildīta, kur citur.

Link to comment
Share on other sites

Pirms 10 minūtēm , AndrisBB teica:

Nav ne jausmas par SQL, bet ja tur sanāk tāda pati gudrošanās, tad neviens nebūtu priecīgs par tādu kodu.

SQL - "x between a and b"

Python - "a <= x <= b"

C - "x >= a && x <= b"

 

Faktiski viens un tas pats, tikai dažādās valodās.

 

Ja neproti SQL, tad jā, sanāk "tāda pati gudrošanās". Bet tie, kas prot SQL, nebūtu priecīgi, ja kāds tur sāktu bāzt C "pieeju".

 

P.S. Autors interesējās par "truly pythonic". Ja atmiņa neviļ, tad "pythonic" pieeja nereti atšķiras no "klasikas".

Labots - binary
  • Patīk 1
Link to comment
Share on other sites

Pirms 4 minūtēm , binary teica:
Pirms 54 minūtēm , TOoMoOT teica:

Kādā utopijā tu dzīvo?

Kādā ziņā?

Tu principā uzrakstīji, ka labā prakse ir viszinoši developeri un sliktā prakse ir developeri, kas nezina visu :D Labās prakses parasti ir specifiskākas un uz konkrētiem keisiem.

100x esmu lasījis labajās praksēs, ka nevajag lietot saīsinātus pierakstus, ja tie prasa ilgāku lasīšanu nekā garāks pieraksts un palielina kļūdīšanās iespēju (arī citiem devloperiem).
1.) Cik bieži ir tā, ka projektā visi developeri ir tieši uz Python orientēti? Ja no pythonic sintakses nav ieguvums, tad labāk rakstīt tā, lai arī Javascript Seniors kodu var izlasīt bez pārpratumiem.
2.) Cik bieži realitātē, komandā visi ir tip-top developeri?

Atgādinu, ka runāju, konkrēti par "comparisson chaining". Manuprāt, tas bezjēdzīgs saīsinājums, kas var sagādāt galvassāpes komandai.
Esmu redzējis demo ar tiešām foršiem "pythonic way" piemēriem, kurus ir labi zināt. ComparisonChaining tur neredzēju :D 
 

Pirms 4 minūtēm , binary teica:

SQL - "x between a and b"

Ja neproti SQL, tad jā, sanāk "tāda pati gudrošanās". Bet tie, kas prot SQL, nebūtu priecīgi, ja kāds tur sāktu bāzt C "pieeju".

BETWEEN ir savādāk, jo to tāpat sapratīs visi, kas lasa to SQL. 

Link to comment
Share on other sites

Pirms 1 minūtes , TOoMoOT teica:

Tu principā uzrakstīji, ka labā prakse ir viszinoši developeri un sliktā prakse ir developeri, kas nezina visu :D Labās prakses parasti ir specifiskākas un uz konkrētiem keisiem.

Nē nē, tas, ko rakstīju - ja projektā strādā cilvēki, kam python nav "dzimtā valoda", tad tādu "pythonic" fīču izmantošana būtu slikta prakse. Nu kā piemērs - reiz strādāju uzņēmumā, kam visādi iekšējie rīki bija rakstīti pythonā (scons, visādas validācijas, procesu automatizācijas utt), bet python bija izvēlēts tīri kā ērta cross platform scripting valoda tādu lietu veikšanai. Tur jebkurš C, C++, C# developeris varēja kaut ko pielabot, kaut ko pievienot, īpaši neiespringstot python niansēs.

 

Savukārt ja projektā strādā python guru, produkts viscaur ir rakstīts pythonā, tad pythonic fīču izmantošana ir ļoti OK prakse.

 

Pirms 7 minūtēm , TOoMoOT teica:

1.) Cik bieži ir tā, ka projektā visi developeri ir tieši uz Python orientēti?

Atkarīgs no produkta. Laiku pa laikam gadās redzēt sludinājumus, kur Python ir nevis kā palīgvaloda, bet kā galvenā/vienīgā nepieciešamā valoda.

 

Pirms 6 minūtēm , TOoMoOT teica:

2.) Cik bieži realitātē, komandā visi ir tip-top developeri?

Diemžēl ļoti reti :(

Pirms 9 minūtēm , TOoMoOT teica:

BETWEEN ir savādāk, jo to tāpat sapratīs visi, kas lasa to SQL. 

Savādāk, un tomēr - tāpat. Visi nesapratīs. Šad tad sanāk rakstīt SQL, bet man pat tā komentāra rakstīšanas laikā vajadzēja googlēt, ko tad tas "between" nozīmē - a < b < c, a < b <= c vai a <= b <= c. Un nākas to darīt (t.i., googlēt) katru reizi, kad to "between" kaut kur jāpielieto.

  • Patīk 1
Link to comment
Share on other sites

AndrisBB

Nu es ikdienā lasu/rakstu vismaz 5 valodās. Sīkumos nezinu nevienu. Ja kādu arī izpētu līdz sīkumiem, tad tāpat pēc mēneša jau aizmirst.

Pa lielam jau sanāk fokusēties uz to ko vēlas panākt, nevis tur čakaratēs ar valodas sīkumiem. 

  • Patīk 1
Link to comment
Share on other sites

raivix95
1 stundu atpakaļ, TOoMoOT teica:

Tu principā uzrakstīji, ka labā prakse ir viszinoši developeri un sliktā prakse ir developeri, kas nezina visu :D Labās prakses parasti ir specifiskākas un uz konkrētiem keisiem.

100x esmu lasījis labajās praksēs, ka nevajag lietot saīsinātus pierakstus, ja tie prasa ilgāku lasīšanu nekā garāks pieraksts un palielina kļūdīšanās iespēju (arī citiem devloperiem).
1.) Cik bieži ir tā, ka projektā visi developeri ir tieši uz Python orientēti? Ja no pythonic sintakses nav ieguvums, tad labāk rakstīt tā, lai arī Javascript Seniors kodu var izlasīt bez pārpratumiem.
2.) Cik bieži realitātē, komandā visi ir tip-top developeri?

Atgādinu, ka runāju, konkrēti par "comparisson chaining". Manuprāt, tas bezjēdzīgs saīsinājums, kas var sagādāt galvassāpes komandai.
Esmu redzējis demo ar tiešām foršiem "pythonic way" piemēriem, kurus ir labi zināt. ComparisonChaining tur neredzēju :D 
 

BETWEEN ir savādāk, jo to tāpat sapratīs visi, kas lasa to SQL. 

Ilgāka lasīšana, bet ātrāka darbība. Tas pats īsais if strādā ātrāk par garo variantu. Protams, ne visur īso var pielietot.

Link to comment
Share on other sites

Starp citu, par to comparison chaining - pat ja to neizmanto, tāpat ir vērts zināt, lai nesanāk šādi:

>>> a = 3
>>> l = [3, 5]
>>> if a in l == True:
...   print("yeah")
... else:
...   print("nope")
...
nope

Nu… It kā tak pilnīgi normāla izteiksme (nēnu piekrītu, salīdzināt ar True ir tā mazliet jocīgi :D ), tikai rezultāts tāds, ka nezinātājs var trīs dienas notriekt, lai atrastu bugu, un pēc tam vēl pusi dienas, lai izdomātu, kāpēc tā.

Labots - binary
Link to comment
Share on other sites

raivix95
(labots)
Pirms 22 minūtēm , binary teica:

Starp citu, par to comparison chaining - pat ja to neizmanto, tāpat ir vērts zināt, lai nesanāk šādi:

>>> a = 3
>>> l = [3, 5]
>>> if a in l == True:
...   print("yeah")
... else:
...   print("nope")
...
nope

Nu… It kā tak pilnīgi normāla izteiksme (nēnu piekrītu, salīdzināt ar True ir tā mazliet jocīgi :D ), tikai rezultāts tāds, ka nezinātājs var trīs dienas notriekt, lai atrastu bugu, un pēc tam vēl pusi dienas, lai izdomātu, kāpēc tā.

(a in l) ieliekam iekavās un viss ir citādi

1 stundu atpakaļ, AndrisBB teica:

Nu es ikdienā lasu/rakstu vismaz 5 valodās. Sīkumos nezinu nevienu. Ja kādu arī izpētu līdz sīkumiem, tad tāpat pēc mēneša jau aizmirst.

Pa lielam jau sanāk fokusēties uz to ko vēlas panākt, nevis tur čakaratēs ar valodas sīkumiem. 

Mazo viltību zināšana ļauj labāk izprast, kā valoda strādā under-the-hood. Reālā darbā tam, protams, nav nozīmes, bet man ieslēdzies azarts izzināt pythonu. 

Labots - raivix95
Link to comment
Share on other sites

AndrisBB

Pitonā jau tāpat neko īpaši kritisku nerakstam. Vairāk kautkādus augstāka līmeņa skriptus utt, kur performance ir faktiski nebūtisks faktors. Tur sīkumu zināšana vai nezināšana nekādu lielo lomu nespēlē. 

Pārsvarā jau vecais labais C visur, šur tur C+, kur no tā jēga.

 

 

Link to comment
Share on other sites

Pirms 6 minūtēm , raivix95 teica:

Reālā darbā tam, protams, nav nozīmes, bet (..)

(..) bet esmu strādājies pie "nereālā projekta" kur tieši kaut kādas nebūt "under the hood" zināšanas ļāva pythonā rakstītu projektu pielāgot tam, lai developmenta laikā nebūtu pēc katrām izmaiņām visus procesus jārestartē, lai notestētu veiktās izmaiņas. Ieguvums developēšanas ērtībai un ātrumam - vismaz desmitkārtīgs.

Pirms 1 minūtes , AndrisBB teica:

Pitonā jau tāpat neko īpaši kritisku nerakstam. Vairāk kautkādus augstāka līmeņa skriptus utt, kur performance ir faktiski nebūtisks faktors.

Jūs nerakstāt, citi raksta.

Link to comment
Share on other sites

AndrisBB
Pirms 13 minūtēm , binary teica:

Jūs nerakstāt, citi raksta.

Nu tur jau tas āķis. Ja kāds raksta tādu kodu 'iekšējai' lietošanai, tad OK. Bet ja kods tiek rakstīts priekš klienta, tad tā jau ir problēma.

 

 

Link to comment
Share on other sites

raivix95

Grāmatā "Fluent Python" uzdūros piemēram, kas nedaudz mulsina

Screenshot_20220614-152756_Opera.thumb.jpg.0b846e685bd544691e653c891a243ff2.jpg

Klases 2. rindā tiek izmantota split() metode stringam. Vai saprotamāk un lasāmāk nebūtu definēt uzreiz sarakstu ar 4 elementiem? Vai tiešām šāds īpatnējs piegājiens ir pythonic stils? Varbūt @binary mācēs atbildēt.

Link to comment
Share on other sites

AndrisBB
Pirms 19 minūtēm , raivix95 teica:

pythonic stils?

Tas tapēc ka Pitonismā smukāks kods ir reizēm svarīgāks par ātrāku kodu.

Tāpat arī to 'Ranks' būtu effektīvāk uzrakstīt kā listi uzreiz, nevis tur ciklu taisīt

Link to comment
Share on other sites

AndrisBB

Var jau būt ka Pitons tos klases līmeņa mainīgos atrisina pirms palaiž kodu, kad reģistrē klasi un tad run-timā nav starpības.

Link to comment
Share on other sites

raivix: Varbūt autors vienkārši gribēja prikolīgu paņēmienu parādīt mācību nolūkiem. Tad jā. Citādi nepitoniski, neglīti un bezjēdzīgi.

 

 

Link to comment
Share on other sites

raivix95
pirms 1 stundas , AndrisBB teica:

Tas tapēc ka Pitonismā smukāks kods ir reizēm svarīgāks par ātrāku kodu.

Tanī pat laikā 'The Zen of Python' saka, ka Practicality beats purity

Link to comment
Share on other sites

pirms 2 stundām , raivix95 teica:

Vai tiešām šāds īpatnējs piegājiens ir pythonic stils? Varbūt @binary mācēs atbildēt.

@binary neprot pitonu un nemācēs atbildēt :D

 

stackoverflowā kā arguments split() lietošanai minēts, ka garāku stringu gadījumā variants ar split() būtu īsāks un lasāmāks. Varbūt grāmatas autors tā pieradis rakstīt.

 

Šķita, varbūt split() varētu būt ātrāks - tur tomēr sanāk veidot vienu python stringu, savukārt pats split() varētu būt implementēts kādā ātrākā valodā. Bet ar 4 vērtībām tomēr split() ir ~2x lēnāks, vismaz uz 3.10.

 

>>> import dis
>>> import timeit
>>> 
>>> def f1(): l = 'spades diamonds clubs hearts'.split()
... 
>>> def f2(): l = ['spades', 'diamonds', 'clubs', 'hearts']
... 
>>> print(timeit.timeit('f1()', setup='from __main__ import f1'))
0.11569541800417937
>>> print(timeit.timeit('f2()', setup='from __main__ import f2'))
0.06425718698301353
>>> 
>>> dis.dis(f1)
  1           0 LOAD_CONST               1 ('spades diamonds clubs hearts')
              2 LOAD_METHOD              0 (split)
              4 CALL_METHOD              0
              6 STORE_FAST               0 (l)
              8 LOAD_CONST               0 (None)
             10 RETURN_VALUE
>>> dis.dis(f2)
  1           0 BUILD_LIST               0
              2 LOAD_CONST               1 (('spades', 'diamonds', 'clubs', 'hearts'))
              4 LIST_EXTEND              1
              6 STORE_FAST               0 (l)
              8 LOAD_CONST               0 (None)
             10 RETURN_VALUE
>>> 

 

Tīri no praktiskā viedokļa, korektāk laikam būtu izmantot tupli:

>>> def f3(): l = ('spades', 'diamonds', 'clubs', 'hearts')
... 
>>> print(timeit.timeit('f3()', setup='from __main__ import f3'))
0.03993227900355123
>>> 
>>> dis.dis(f3)
  1           0 LOAD_CONST               1 (('spades', 'diamonds', 'clubs', 'hearts'))
              2 STORE_FAST               0 (l)
              4 LOAD_CONST               0 (None)
              6 RETURN_VALUE

 

Vēl variants - varbūt autors vienkārši gribēja pēc iespējas īsākā koda gabalā parādīt pēc iespējas vairāk veidu, kā pitonā var izveidot dažādas kolekcijas.

Link to comment
Share on other sites

  • raivix95 locked this tēmaa
Guest
Slēgta tēma, pievienot komentāru nav iespējams.
 Share

×
×
  • Izveidot jaunu...