Keresés

Új hozzászólás Aktív témák

  • cousin333

    addikt

    válasz oszi666 #421 üzenetére

    Ez egy kicsit pongyola lesz, de talán segít...

    Python:
    - Python futtatókörnyezet
    - része az IDLE nevezetű parancssoros Python interpeter
    - ez A hivatalos Python telepítés, lásd itt
    - vannak benne továbbá gyári modulok különböző feladatokra
    - Linuxos analógiával élve ez a kernel

    Spyder IDE:
    - egy népszerű, nyilt forráskódú fejlesztői környezet
    - ez önmagában kevés, csak kód szerkesztésre van, magát a kódot a Python futtatókörnyezet hajtja végre
    - külsős emberkék fejlesztik
    - sokkal összetettebb és komolyabb, mint a "gyári" IDLE
    - kódszerkesztő, súgó, aktuális változók listája
    - párhuzamosan futtatható, független interpreter környezetek külön füleken (mint sok IDLE egymás mellett)
    - más példák 3rd party IDE-re: PyCharm vagy Ninja IDE

    Anaconda:
    - egy Python fejlesztői csomag
    - ez konkrétan kereskedelmi, aminek ingyenes változata is van
    - benne van a Python "alapcsomag", a Spyder IDE (a fejlesztéshez) és egyéb, külsősök által fejlesztett hasznos modulok (pl. Numpy)
    - más példák: WinPython (ingyenes) vagy Canopy (kereskedelmi)
    - Linuxos analógiával ezek a disztribúciók (Ubuntu, Mint, Debian...)

    A Codeskulptor tulajdonképpen olyan, mint pl. a Spyder, csak a kódot, amit a webes felületen beírsz egy szerveren lévő Python interpreter futtatja le, nem a saját géped.

    Könyvből jó sok féle van, különösen, ha beszélni angol:
    Byte of Python
    Think Python
    Dive Into Python
    ...

    [ Szerkesztve ]

    "We spared no expense"

  • cousin333

    addikt

    válasz oszi666 #423 üzenetére

    Igen, valahogy úgy.

    Ami a GUI-t illeti: Pythonban több út is vezet az igazsághoz. Egyszerű modul elvileg a tkinter ami tulajdonképen része az alap Python telepítésnek. Segíteni nem tudok benne, sose használtam... :)

    Másik, komolyabb opció a Qt keretrendszer, amit a pyqt és társai tesznek használhatóvá. A korábban említett WinPython disztribúcióban pl. benne van minden, ami ehhez kell, például a Qt designer nevű program, amivel kézzel gyárthatsz (drag'n'drop módszerrel) égy ui kiterjesztésű GUI leíró fájt, amit pár sor kóddal Pythonban is használatba vehetsz. Szerintem nem triviális, de sokat ki lehet hozni belőle. video

    Az általad említett feladathoz ugyanakkor szerintem remekül passzolna az IPython, újabb nevén Jupyter, ami egy továbbfejlesztett parancssori környezet, Az IPython Notebook ugyanakkor a böngészőben futtatja a Pythont! Egy vagy több soros cellákba írhatsz kódot (vagy szöveget), amit cellánként lehet végrehajtani, akár tetszőleges sorrendben. Nagyon jó adatok feldolgozásához, kísérletezgetéshez. A cella kimenete lehet szöveg (pl. mint a print), grafikon (pl. matplotlib), de már használhatsz widgeteket (lásd gomb és csúszka, meg ilyenek). Ezek elmenthetők HTML-ként is és megoszthatók. Az IPython egy külön csomag, de alapból benne van az Anaconda és Winpython disztribúciókban.

    Ha statisztikai szoftvert szeretnél írni, akkor nagyon tudom ajánlani a pandas modult (bemutató, bemutató2). Sok hasznos, praktikus funkció, bőséges dokumentáció. Ez a csomag is része az Anaconda és a Winpython disztribúcióknak.

    [ Szerkesztve ]

    "We spared no expense"

  • cousin333

    addikt

    válasz oszi666 #2659 üzenetére

    A lambda alapvetően egyszerű függvények helyett van, ami így nem foglal nevet, és kompaktabbul használható, mert nem kell előtte definiálni és elég egy sort írni. Nyilván nem kell mindig ezt használni, de néha jól jöhet.

    Egy példa a pandas modul használatával:

    import pandas as pd
    data = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})

    Az eredmény egy indexelt "táblázat", oszlop fejlécekkel:
    A B
    0 1 4
    1 2 5
    2 3 6

    Tegyük fel, hogy egy számításhoz minden sorban össze akarom adni az A oszlop köbét és a B oszlop felét. Hogyan lehet ezt megcsinálni? Létezik az apply() metódus, ami soronként, vagy oszloponként végigmegy a táblázaton, és az első argumentumban megadott függvényt futtatja. Az első megoldás, hogy készítünk egy függvényt, majd ezt használjuk:

    def process(sor):
        return sor.A**3 + sor.B / 2

    data.apply(process, axis=1)

    Az eredmény:
    0 3.0
    1 10.5
    2 30.0
    dtype: float64

    A megoldás tehát működik, viszont a process mostantól egy foglalt név (vagy felülír egy korábbit) olyasvalamire, amit talán soha többé nem használunk. Ráadásul írtunk 2 extra sort. Ugyanez lambda függvénnyel jóval egyszerűbb:

    data.apply(lambda x: x.A**3 + x.B/2, axis=1)

    A helyzet hasonló a list comprehension-hoz. Azt is meg tudod oldani for ciklussal, de miért írnád azt, hogy

    a = [1, 2, 3, 4, 5, 6, 7, 8]
    b = []
    for elem in a:
        if elem % 2 == 0:
            b.append(elem**2)

    ha írhatod jóval egyszerűbben (és gyorsabban) is:

    a = [1, 2, 3, 4, 5, 6, 7, 8]
    b = [elem**2 for elem in a if a % 2 == 0]

    Sőt, utóbbi esetben, ha mondjuk alapvetően csak ezen négyzetszámoknak az összegére vagyunk kíváncsiak, akkor azt is írhatjuk, hogy:

    szumma = sum(elem**2 for elem in a if a % 2 == 0)

    és akkor nem számoltunk ki és tároltunk el feleslegesen egy egész listát.

    [ Szerkesztve ]

    "We spared no expense"

  • Siriusb

    veterán

    válasz oszi666 #2659 üzenetére

    És itt egy másik (elegáns) példa is ebből a topikból:
    Kérdés: (#2040)
    Válasz: (#2042)

    Azt se felejtsd el, egy dolog az, hogy másképpen is meg tudod oldani, azonban lehetséges, ezen a módon, mármint a lambda segítségével olvashatóbb, jobban átláthatóbb lesz a kódod.

Új hozzászólás Aktív témák