eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingJaki język polecić początkującemu? - komentarz do artykułu w Programista 9/2018Re: Jaki język polecić początkującemu? - komentarz do artykułu w Programista 9/2018
  • Path: news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit
    0.net!news.mixmin.net!aioe.org!.POSTED!not-for-mail
    From: AK <n...@n...net>
    Newsgroups: pl.comp.programming
    Subject: Re: Jaki język polecić początkującemu? - komentarz do artykułu w
    Programista 9/2018
    Date: Thu, 10 Jan 2019 15:47:13 +0100
    Organization: Aioe.org NNTP Server
    Lines: 104
    Message-ID: <q17ltn$fmv$1@gioia.aioe.org>
    References: <c...@g...com>
    <2...@g...com>
    <5...@g...com>
    <9...@g...com>
    <1...@g...com>
    <8...@g...com>
    <d...@g...com>
    <a...@g...com>
    <c...@g...com>
    <6...@g...com>
    <3...@g...com>
    <a...@g...com>
    <a...@g...com>
    <5...@g...com>
    <q17bsf$1157$1@gioia.aioe.org>
    <c...@g...com>
    <q17fpf$1j06$1@gioia.aioe.org>
    <4...@g...com>
    NNTP-Posting-Host: MV2AClG/2c9bVI3d/hJi2Q.user.gioia.aioe.org
    Mime-Version: 1.0
    Content-Type: text/plain; charset=utf-8; format=flowed
    Content-Transfer-Encoding: 8bit
    X-Complaints-To: a...@a...org
    User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:60.0) Gecko/20100101
    Thunderbird/60.4.0
    Content-Language: en-GB
    X-Notice: Filtered by postfilter v. 0.8.3
    Xref: news-archive.icm.edu.pl pl.comp.programming:213237
    [ ukryj nagłówki ]

    On 2019-01-10 14:22, g...@g...com wrote:
    > W dniu czwartek, 10 stycznia 2019 14:02:42 UTC+1 użytkownik AK napisał:
    >
    >>> No, można i tak.
    >>
    >> Ano mozna.
    >> Zwlaszcza, ze jest to zgodne ze z podstawowa logika i
    >> specyfika Pythona (metkowanie).
    >
    > A jaka jest "podstawowa logika i specyfika Pythona",
    > z której by ta zgodność wynikała?

    Metkowanie.
    1. Obiekty w Pythonie sa wylacznie "metkowane".
    Kopiowane sa wylacznie prymitywy (int , float, bool i.. i chyba tyle).
    2. definicja funkcji to jest _statement_ wiec wszystko co podlega
    ewaluacji, jest _wlasnie wtedy_ ewaluowane.
    Stad wartosci domyslne sa ewaluowane w momencie wykonania
    _statementu_ def function().

    >> Kwestia czy zle (przylaczam sie do twierdzenia ze jest to mylace,
    >> - choc wylacznie dla poczatkujacych), czy dobrze (przy rekurencji
    >> przydatne czesto) jest dyskusyjna.
    >
    > To może podaj kilka argumentów na rzecz takiego rozwiązania
    > (bo ja serio nie widzę żadnego)

    W rekurencji latwo zapamietac jakas "sciezke" wlasnie w takim
    parametrze.

    No ale przyklad z tej dyskusji.

    pierwsze = [2]
    def jest_pierwsza(liczba, pierwsze=pierwsze):
    erasto = int(sqrt(liczba) + 0.5)
    czy_pierwsza = all(liczba % pierwsza for pierwsza in pierwsze
    if pierwsza <= erasto)
    if czy_pierwsza: pierwsze.append(liczba)
    return czy_pierwsza

    Mozna zapisac tak:

    def jest_pierwsza(liczba, pierwsze=[2]):
    erasto = int(sqrt(liczba) + 0.5)
    czy_pierwsza = all(liczba % pierwsza for pierwsza in pierwsze
    if pierwsza <= erasto)
    if czy_pierwsza: pierwsze.append(liczba)
    return czy_pierwsza

    Po co tworzyc niepotrzebnie globala/statica jesli jest on potrzebny
    tylko wewnetrznie?
    Jak wiadomo Python nie posiada takiej konstrukcji zmiennych/obiektow
    statycznych funkcji w takim sensie jak C

    int fun()
    {
    static int = 3;
    }

    wiec w ten sposob tworzy sie w Pythonie wlasnie zmienne statyczne
    nie zasmiecajac wyzszego namespace.

    >> PS: Innym podejsciam jest zastosowanie czegos w rodzaju:
    >>
    >> def f(x=on_the_call(None)):
    >> return x
    >
    > Czyli mamy co najmniej dwa złe idiomy zamiast jednego dobrego rozwiązania.

    Dlaczego zle ?
    Nie widze w nich nic zlego.
    Zwlaszcza w stosunku do expr w takim Lisp gdzie nawet priorytet
    opeatorow poszedl do kosza wiec trzeba go wymuszac odpowiednia
    kolejnoscia ewaluacji i/lub nawiasami (a nawet trzeba wymuszac/okreslac
    tymiz lewo-prawo-lacznosc operatorow).
    Np: (* A (* B (* C D))) to co innego niz (* (* (* C D) B) A)
    Przecie to nieskonczone zrodlo pomylek.
    PS: Tylko mi nie probuj mowic, ze jest inaczej bo drzewiej
    pisywalem (fakt ze rzadko, nie umialem sie przekonac:) w AutoLispie
    makra do AutoCADa "cus tam" liczace i... to dla numeryka byl
    istny koszmar :(
    W porzadnych jezykach programowania kolejnosc obliczania expr. byla
    zawsze od lewa do prawa, a priorytet operatorow jest scisle okreslony
    i dla arytmetycznych zgodny z normalna matematyka.
    Oczywiscie C/C++ to popsul bo w nim stwierdzono (z wydumanych wzgledow
    wydajnosciowych oczywscie:) ze kolejnosc ewaluacji czesci wyrazen jest
    .. dowolna co rowniez jest zrodlem niekiedy koszmarow (gdy
    funckcje maja efekty uboczne - a miewaja czesciej niz sie wydaje:).
    PS: Nawiasy nie pomoga. Nawiasy w C/C++ wymuszaja priorytety, ale nie
    kolejnosc ewaluacji wyrazen.
    Np takie cus w Algolu, Pascalu, Fortranie, PL/I, Javie, C# czy innym
    Pythonie:
    double y = 3;
    double fun(double x)
    {
    y += x;
    return y;
    }
    z = 2 * fun(3) + fun(7);
    byloby jednoznaczne (wynik 25), ale juz w C/C++ moze to byc
    albo 25 albo 36 (zaleznie od kierunku wiatru, kompilatora,
    gestosci Slonca, % w nalewce Szwagra itp).

    AK

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: