Pomoc s Pythonerm

David Belohrad david na belohrad.ch
Pondělí Červen 13 15:56:55 CEST 2016


Jestli jsem to pochopil spravne, diskuse se vede na tema jak vypada funkcionalni programovani
a v cem je rozdilne od klasickeho pristupu. 


ZU1234 <zu1234 na seznam.cz> writes:

> Možná jsem úplně nepochopil zadání.
> A v souvislosti se zadáním jsem nepochopil řeči o syntaxi a rychlosti:
>
> import os
> for root, dirs, files in os.walk(r'c:\start_dir'):
>      for f in files:
>          ff = os.path.join(root, f)
>          d =  os.path.split(root)[1]
>          ffn = os.path.join(root, d + '-' + f)
>          os.rename(ff, ffn)
>
>
> Dne 13.6.2016 v 15:01 David Belohrad napsal(a):
>> Vas skript by mohl vypadat napr takto:
>>
>> --------------------------------------------------------------------------------
>> import os
>> import shutil
>>
>> # directory to look for:
>> dirl = "fook"
>> # get list of all files in the directory fook
>> dirlist = os.listdir(dirl)
>> # create list of tuples of type (old-filename, newfilename)
>> # these are raw filenames without path (hence tuple e.g ("test3", "fook-test3")
>> oldtonew = zip(dirlist, map(lambda fle: "%s-%s" % (dirl, fle), dirlist))
>> # append to all paths the correct directory
>> correct = map(lambda (src,dst): (os.path.join(dirl, src), os.path.join(dirl, dst)), oldtonew)
>> # now move all files
>> map(lambda (src, dst): shutil.move(src, dst), correct)
>> --------------------------------------------------------------------------------
>>
>> pripadne pokud z nej vysekame vsechny poznamky, ktere jsem tam napsal:
>> --------------------------------------------------------------------------------
>> import os
>> import shutil
>>
>> dirl = "fook"
>> dirlist = os.listdir(dirl)
>> oldtonew = zip(dirlist, map(lambda fle: "%s-%s" % (dirl, fle), dirlist))
>> correct = map(lambda (src,dst): (os.path.join(dirl, src), os.path.join(dirl, dst)), oldtonew)
>> map(lambda (src, dst): shutil.move(src, dst), correct)
>> --------------------------------------------------------------------------------
>>
>> tedy 4 radky srozumitelneho kodu. Samozrejme to neni o poctu radku kodu, ale o tom, jak dlouho
>> to trva vykonat. Troufam si tvdit, ze skript kolegy Mraze je podstatne pomalejsi, nez to co jsem
>> tady vyrobil (a co se da jeste zjednodusit, kdybych zapremyslel jeste trochu). Pokud ty dva skripty
>> pustite na 100000 souborech, uvidite ten rozdil :) Samozrejme v tomto pripade je to trochu overkill,
>> ale pokud delate napr. simulaci FIR filtru, nebo FFT z mnoha vzorku, asi bych se rozhodne vyvaroval
>> for smycce. Python totiz umi byt neskutecne pomaly.
>>
>>
>> Dalsi priklad mohu uvest jednoduchou ulohu. Mate 32megabajtu 8bitovych slov, a potrebujete udelat bit swap.
>> Ceckari udelaji FOR loop v pythonu, vysledkem je, ze tech 32megabajtu trva asi 15 minut. Pouzijete-li 'lepsi'
>> algoritmus, vysledek je podstatne rychlejsi, v tomto pripade pod sekundu:
>>
>> --------------------------------------------------------------------------------
>> #!/usr/bin/env python
>> import numpy as np
>> import random
>>
>> print "Random array"
>> size = 8
>> a = np.random.randint(0,pow(2,size)-1,size=32768*1024)
>> #a = np.array(xrange(256))
>>
>> print "Swapping"
>>
>> def bitswap(vect, size):
>>      bitmask = tuple([pow(2,number) for number in xrange(size)])
>>      revmask = tuple(reversed(bitmask))
>>
>>      def mapper(val):
>> 	if val == 0:
>> 	    return 0
>> 	triggered = map(lambda whichbit: (val & whichbit) != 0, bitmask)
>> 	target = [swap[0] for swap in filter(lambda item: item[1], zip(revmask,
>> 							      triggered))]
>> 	return reduce(lambda x,y: x+y, target)
>>
>>      return map(mapper,vect)
>>
>> # indexer
>> print "Input array length: ", len(a)
>> print a
>> index = np.array(bitswap(range(256), 8))
>> # lut-through output
>> out = index[a]
>> print "Output array length: ", len(out)
>> print out
>>
>> print "Done"
>> ----------------------------------------------------------------------
>>
>>
>> Problem je v tom, ze ti co pisi pro python musi mit neco v hlave. V cecku se spousta
>> algoritmickych veci promine, protoze je dabelsky rychle. Pokud chcete mit neco
>> rychle (bez toho dabelsky) v Pythonu, musite se zamyslet nad tim, jak to inteligentne
>> zakodovat, coz si myslim, ze vetsina ceckaru ... ma az na poslednim miste. Vyhodou
>> pythonu je to, ze v nem (dabelsky) rychle nakodujete velmi funkcni aplikace bez toho,
>> aby se clovek snizoval k nizsi urovni programovani (ne nadarmo se nove C++ zacina podobat pythonu :).
>> K tomu navic jako bonus dostanete plne dynamicky jazyk s myriadou knihoven.
>>
>> V CERNu bezi na pythonu pomerne hodne sluzeb. Ja sam jej vyuzivam na ovladani svych zarizeni.
>> V zadnem pripade nejsem python guru, spis elektronik, ktery zjistil, co vsechno se v tom da
>> delat.
>>
>>
>> tolik muj jeden svycarsky centim do diskuze (a prosim zadne flame, jen jsem
>> chtel ukazat, v cem se ty dva pristupy lisi. samozrejme kazdy ma sve vyhody/nevyhody)
>>
>>
>>
>> .d.
>>
>>
>>
>>
>> Miroslav Mraz <mrazik na volny.cz> writes:
>>
>>> Ano, já vím, že jsme se na tohle téma už bavili. Zkoumat výhody
>>> funkcionálního programování budu až mi někdo představí alespoň jediný
>>> prakticky použitelný algoritmus, u kterého bude patrné, že funkcionální
>>> přístup k jeho naprogramování má nějakou (alespoň jednu) výhodu.
>>>
>>> Mrazík
>>>
>>> Dne 13.6.2016 v 12:38 Milan B. napsal(a):
>>>> Ako povedal klasik: fortranovsky program sa da napisat v akomkolvek
>>>> jazyku (http://web.mit.edu/humor/Computers/real.programmers).
>>>>
>>>> Python obsahuje mnoho prvkov prevzatych z funkcionalnych jazykov:
>>>> zoznamy, funkcie vyssieho radu, lambda kalkulus... a z toho vyplyva iny
>>>> styl programovania pre tych, ktori tieto vlastnosti vedia a chcu vyuzit.
>>>>
>>>> Keby ste si pozreli ten FP101 kurz o funkcionalnom programovani, ako som
>>>> odporucal, tak by ste to v tom Pythone videli.
>>>>
>>>> -m-
>>> _______________________________________________
>>> HW-list mailing list  -  sponsored by www.HW.cz
>>> Hw-list na list.hw.cz
>>> http://list.hw.cz/mailman/listinfo/hw-list
>> _______________________________________________
>> HW-list mailing list  -  sponsored by www.HW.cz
>> Hw-list na list.hw.cz
>> http://list.hw.cz/mailman/listinfo/hw-list
>
>
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list


Další informace o konferenci Hw-list