Názor k článku Perličky: úvod do referencí od MikRom - Ja som na tom skor opacne, napisal som...

  • Článek je starý, nové názory již nelze přidávat.
  • 24. 2. 2008 20:29

    MikRom (neregistrovaný)
    Ja som na tom skor opacne, napisal som len asi jednu netrivialnu aplikaciu v Perle a viac som napisal v Pythone. Tymto ale nechcem povedat, ze Perl je horsi ako Python, alebo naopak. Oba povazujem za velmi dobre. Keby tu nebol Perl ani Python by tu mozno nebol, lebo Python prebral vela od Perlu. Perl je starsi. Python sa mozno v mnohom snazil byt modernejsi. Niekomu sa to paci a niekomu nie. To je individualna zalezitost.

    1. Ziadne deklaracie ma nijako nerozculuju. Ani v Perle predsa netreba premenne deklarovat. Alebo ako to myslis?

    2. Pre pouzitie defaultnych hodnot si zvolil akurat priklad so zoznamom v ktorom to nefunguje. Python vzdy vytvara na zoznamy referencie a z toho plynie aj spravanie funkcie t(). Ak ju zavolas s argumentom prazdnym alebo neprazdnym zoznamom, bude fungovat, tak ako ocakavas, napr:
    print t([])
    print t([])
    print t(t([]))
    print t(['a','b'])
    print t(['x'])
    
    Toto ako zaobchadza Python s listami ma tiez netesi, lebo pri priradeni list2=list1 sa vytvori len nova referencia na ten isty list. Ak chce clovek vytvorit novy list ako kopiu stareho treba urobit list2=list1[:]
    Inac ale defaultne hodnoty vo funkciach prakticky funguju, napr:
    def halo(meno="Vaclav"):
      return "Halo %s" % meno
    
    print halo()
    print halo ('MikRom')
    
    3. Lambda funkcie neposkytuju taku funkcionalitu ako pomenovane funkcie - ano s tym suhlasim, ale Guido sam nema zrejme lambdy rad a chcel ich v Pythone 3000 povodne aj zrusit. Zrejme si mysli, ze sa moc nepouzivaju. 4. Ze referencie nechybaju, toho dokazom je tvoj priklad s funkciou t(). Na zoznamy sa vzdy pouzivaju referencie. Swap tiez funguje
    l1=['a','b']
    l2=['x','y']
    print "l1=%s, l2=%s" % (l1, l2)
    l1, l2 = l2, l1
    print "l1=%s, l2=%s" % (l1, l2)
    
    Ina vec je, ze netreba explicitne dereferencovat ako v Perle. Ale to pracu so zlozitejsimi strukturami podla mna skor zjednodusuje.

    5. __identifikatory__: Ano v Pythone si treba zapamatat co znamena
    if __name__ == "__main__":
      ...
    
    ale je to podobne ako vediet v Perle, co to je $_,@_,...

    6. self: Python prostrednictvom self pri premennej, resp. funkcii rozlisuje, ci sa jedna o atribut, resp. metodu aktualneho objektu, alebo o nejaky globalny identifikator (ak tam self nie je). Self je vlastne referencia na slovnik, ktory reprezentuje dany objekt. Identifikator self pochadza z Perlu. Python prebral z Perlu sposob, ze objekty su reprezentovane cez asociativne polia (t.j. slovniky). A v Perle sa tiez doporucuje odkaz na aktualny objekt oznacovat ako $self.