I love Python :D

I love Python :D
S2
  • Rejestracja:około 4 lata
  • Ostatnio:około 4 lata
  • Postów:65
8

Trzeci dzien bawie sie Python'em :D.

Rewelacyjna dokumentacja na python.org :D
PyCharm darmowe z niezlymi pluginami :D.
Debugger nawet nie wiem skad mi sie wzial, dziala default'owo :D.
Pakiety same sie sciagaja :D.
Co napiszesz dziala tak jak oczekujesz :D.

I love Python :D

antekgort200
a ja też lubię pythona
KR
ale ten post to sarkazm czy tak na serio?
S2
jak najbardziej serio :D
lion137
  • Rejestracja:około 8 lat
  • Ostatnio:minuta
  • Postów:4885
5

A jeszcze jaki szybki, a parallel computing... :)


katakrowa
  • Rejestracja:około 10 lat
  • Ostatnio:około 2 lata
  • Lokalizacja:Chorzów
  • Postów:1670
1

Ech.. Szkoda, że się nie nauczyłem. Teraz się muszę męczyć w jakiś Delphi, Visual Studio gdzie żeby cokolwiek zrobić to trzeba coś w jakimś menu kliknąć :-)


Projektowanie i programowanie. Hobbystycznie elektronika i audio oszołom.
lion137
A w Pythonie sobie kopiujesz pseudokod z wikipedii i jazda:)
katakrowa
Czyli nawet kod się "sam pisze" nie to co w tych dziadostwach.
Spine
  • Rejestracja:prawie 22 lata
  • Ostatnio:2 minuty
  • Postów:6628
3

No ja dzięki Pythonowi zajarzyłem obiektowość, referencje itp.
Po topornym klepaniu w C i C++ czułem, że nauka programowania w Pythonie pozwoliła mi szybciej przejść przez "podstawy", które już dawno powinienem był mieć...

Jednak po okresie fascynacji przyszła pora wrócić do języków, w których utrzymanie kodu jest "centralnie sterowane" i po Javie, dobrze mi z C#...


🕹️⌨️🖥️🖱️🎮
edytowany 2x, ostatnio: Spine
ledi12
Jestem takiego samego zdania :) U mnie było podobnie.
kubatron
Dokładnie jak @Spine dzięki Python'owi zrozumiałęm wiele aspektów (nie wszystkie jeszcze) które w Javie np. na początku wydaja się bardzo złożone.
C6
W Pythonie można szybko zetknąć się z problemem złożoności obliczeniowej :D
KR
Oj można. Właśnie niedawno naprawiłem projekt, który mimo używania numpy mielił 1000 punktów danych przez kilka sekund. Nie, użycie numpy w projekcie nie powoduje, że automatycznie złożoność obliczeniowa zmniejszy się z O(n^3) do O(n) :D
kubatron
@Krolik: racja, dlatego warto by podkreślać ten fakt
S2
  • Rejestracja:około 4 lata
  • Ostatnio:około 4 lata
  • Postów:65
1

Wczoraj zrobilem sobie na probe prosciutki DI container. Zadanie okazalo sie rownie banalne jak w przypadku PHP, ale kod jakosik tak ladniej wyglada :D. W porownaniu do masakry w Java'ie - bajka :D.

ledi12
A webówka jaka przyjemna jest :)
WhiteLightning
  • Rejestracja:prawie 14 lat
  • Ostatnio:2 minuty
  • Postów:3169
6

W Pythonie zdecydowanie fajniej sie pisze niz pozniej debuguje/poprawia duzy projekt napisany dawno przez kogos innego :P

KamilAdam
Dlatego projekty starsze niż rok powinny być automatycznie transpilowane do Javy
CR
W każdym języku fajniej się pisze niż poprawia duży projekt napisany dawno przez kogoś innego :)
KamilAdam
Ale jak język jest statycznie typowany to łatwiej poprawia się stary projekt
siloam
@KamilAdam: To raczej nie kwestia typów. Python rozwijał się w ostatnich latach bardzo dynamicznie. Czasem nawet zbyt dynamicznie nie zachowując wstecznej kompatybilności. Na dłuższą metę to rzeczywiście rodzi problemy.
BraVolt
  • Rejestracja:prawie 6 lat
  • Ostatnio:prawie 4 lata
  • Lokalizacja:Warszawa
  • Postów:2918
1

Kiedyś napisałem, że na studiach (informatyka) w PL powinni w końcu zamienić obowiązkowy (od dziesięcioleci) na pierwszym roku C na Python.
Reakcja grupy "Obrażonych uczuć programistycznych tylko C" była porównywalna do reakcji na reklamę na 4P "Swetrów i Piwniczaków".

W USA nie mają problemów z tym, że zaczyna się naukę od Pythona.


"Kiedy wiedzieć czy zacząć nauke Springa? bo w czystej Javie to nic ciekawego nie zrobie chyba"
Ein Volk, ein Reich, ein Kwa-Kwa ***** ***
Zobacz pozostałe 6 komentarzy
AL
@KamilAdam: zgubiłeś kontekst. W asemblerze zniechęcałby tak samo. Ja nie każę nikomu pisać w C webu. Ale do pokazania podstaw imho C jest dobrą abstrakcją powyżej asma. "Czemu reference type i value type zachowuje się różnie" i tak doprowadzi do wskaźnika.
KamilAdam
@PerlMonk: A referencja? Miałem na myśli C, Jakbym miał ma myśli C++ to narzekałbym na wiele innych rzeczy :) @alagner zgubiłeś kontekst. Dla mnie kontekstem był wybór pierwszego języka programowania. C Jest złym wyborem. Asm jest oczywiście jeszcze gorszy. Python jest dobrym wyborem, ale IHMO Scheme był doskonałym wyborem. Szkoda że po 25 latach odeszli od tego na MIT :(
AL
@KamilAdam: zależy czego chcesz nauczyć. Do pokazania bebechów C się imho nadaje. To czy od tego należy zaczynać to jakby osobna sprawa ;) EDIT: przy czym ja jestem zdania, że startowania blisku sprzętu niesie pewną wartość i z tej perspektywy się wypowiadam. Jeśli przyjąć, że nie, to ok, jestem skłonny się z Tobą zgodzić.
ED
Ja miałem C# na wstępie do programowania.
C6
Za moich czasów, to na UW był Pascal :) ciekawe co teraz jest :)
AL
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 3 lata
  • Postów:1493
3

Choroba, ja nie jestem nawykły (na codzień piszę kod systemowy), ale dynamiczne typowanie bardziej mi przeszkadza niż pomaga a "better explicit than implicit" powoduje miejscami takie ilości wywołań konstruktorów że aż mnie to boli. Tzn. nie mówię, Python jest szybki w prototypowaniu, analizator logów Wiresharka prościej mi było na szybko "wypythonić" niż pisać dissector w C, ale w pewnych zastosowaniach zdecydowanie bardziej doceniam błąd kompilacji niż exception w rutime.

edytowany 1x, ostatnio: alagner
Silv
"dissector" – ?
AL
@Silv: tak dokumentacja kablorekina określa plugin do analizy protokołu. https://www.wireshark.org/docs/wsdg_html_chunked/ChDissectAdd.html
Spine
  • Rejestracja:prawie 22 lata
  • Ostatnio:2 minuty
  • Postów:6628
1

@BraVolt: ale kadra na studiach jeszcze musiałaby się czegoś douczyć...
Pojedyncze jednostki, jak mogą to wprowadzają coś innego niż C. Np. w Rzeszowie jeden prowadzący na wstępie do programowania dla "nie-informatyków" robił zajęcia w Ruby.
Ale mógł sobie na to pozwolić pewnie właśnie dlatego, że prowadzący z innych przedmiotów nie będą potem wymagać od studentów znajomości języka C, bo to nie kierunek Informatyczny.


🕹️⌨️🖥️🖱️🎮
99xmarcin
  • Rejestracja:prawie 5 lat
  • Ostatnio:4 miesiące
  • Postów:2420
2

Młody, naiwny...

  • Cały shit z 2.7 vs 3.x. Próba odpalenia jakiegoś starszego toola który korzysta z 2.7 to prawdziwa męczarnia na Linuxie na którym jest python 3.x.
  • Jeżeli projekt na github'ie nie ma requirements.txt to powodzenia w łapaniu zależności.
  • Zależność są często pobierane w formie kodu C++ który się kompiluje lokalnie, dla pewnych rozszerzeń np. do manipulacji plikami graficznymi robi się z tego niezła kupa.

Poza tym, tak Python jest spox


Holy sh*t, with every month serenityos.org gets better & better...
AL
Ad.1: pyenv ułatwia wiele. Ale fakt, migracja z 2 do 3 potrafi boleć.
PL
1. conda + python 2.7 zalatwia sprawe odpalenia python 2.7 2. nigdy mi sie nie zdarzylo, zeby wiekszy sensowniejszy projekt nie mial requirements.txt 3. conda zalatwia problem zaleznosci C++
KR
Moderator
  • Rejestracja:prawie 21 lat
  • Ostatnio:dzień
  • Postów:2964
4

Rewelacyjna dokumentacja na python.org :D

Dokumentacja w sumie spoko, ale z nią jest jeden podstawowy problem - jest bardzo obszerna i często trzeba wiedzieć, że coś istnieje, zanim się to znajdzie w dokumentacji. Dokumentacja po prostu opisuje wszystkie elementy języka po kolei, natomiast brakuje trochę wysokopoziomowego przeglądu różnych koncepcji - czyli jak się różne typowe problemy w Pythonie rozwiązuje. A że język jest bardziej skomplikowany niż Scala, to można dostać zawrotu głowy i kompletnie się pogubić w ficzerach języka i biblioteki - jedną rzecz można zrobić na kilka sposobów.

Do tego Python słabo wspomaga odkrywanie rzeczy w naturalny sposób w trakcie pisania (np. w innych językach daję "." po obiekcie i dostaję w IDE wszystko co mogę z obiektem zrobić). Wiele rzeczy jest w nieoczywistych miejscach. Dużo czasu upłynęło, zanim dowiedziałem się, że np. długości listy nie znajdę w dokumentacji listy, bo to tego służy funkcja top-level len() i że jest wiele takich ogólnych funkcji, których istnienie trzeba sobie wbić w pamięć :D Z drugiej strony dokumentacja inline działająca bezpośrednio w edytorze jest dość uboga - często jedno lakoniczne zdanie, brak udokumentowanej obsługi błędów i brak przykładów, a sygnatura metody niewiele mówi i wtedy często trzeba właśnie sięgać do tej na python.org a nieraz i do kodu źródłowego funkcji. Szczególnie jest to widoczne jak zaczynasz używać bibliotek third-party, które często w ogóle nie mają dokumentacji. Spowalnia to naukę i kodowanie. W jęykach ze statycznym systemem typów przynajmniej z sygnatury da się coś wyczytać.

Zdecydowanie brakuje mi czegoś takiego jak np. Rust book, co można przeczytać w kilka godzin i być względnie produktywnym, gdzie omówiono język przez pryzmat problemów i koncepcji a nie skupiając się wyłącznie na samym języku.

PyCharm darmowe z niezlymi pluginami :D.

To jest standard dla większości języków, więc to że darmowe, to niewielka zaleta.
Niestety wsparcie jakie daje plugin do Pythona to trzecia liga (pierwsza to Java/C#/C++/Kotlin/Scala, Rusta/Go bym umieścił jeszcze w drugiej, choć pretenduje do pierwszej).
Wczoraj zmieniłem nazwę jednego pliku. Importów automatycznie nie poprawił bo po co i potem grepowanie całego projektu żeby zrobić głupie replace :D

Debugger nawet nie wiem skad mi sie wzial, dziala default'owo :D.

Tak, debugger jest, a w Pythonie trzeba go używać bardzo często. Znacznie częściej niż w innych językach. Nie wiem czy to jest zaleta.

Pakiety same sie sciagaja :D.

Oj, pakiety to jest akurat masakra. Jedna wspólna przestrzeń dla wszystkich pakietów, niezależnie od projektu. Wystarczy dwie biblioteki potrzebujące innej wersji jakiejś zależności i się wszystko sypie.
Dla porównania w takim Rust możesz mieć dwie wersje tej samej biblioteki w jednym projekcie i się nie pogryzą tak długo jak nie są używane w jednym miejscu na raz.
W Pythonie aby to obejść ludzie powymyślali cuda na kiju jak środowiska wirtualne i masowo używają dockera aby zapakować aplikację. W żadnym innym języku nie spotkałem takiej ilości dodatkowej złożoności (accidental complexity) związanej z paczkowaniem.

Co napiszesz dziala tak jak oczekujesz :D.

Coooo?! W 9/10 przypadkach kod po napisaniu nie działa od razu jak oczekuję. A nawet jak działał wcześniej, wystarczy niewielki refactoring i zwykle już nie działa. Ten poziom "niedziałania" kodu miałem ostatnio w liceum, kiedy uczyłem się programować. Ten język jest tak frustrujący, że po prostu dawno nie spotkałem czegoś takiego.

Najbardziej wkurzające jest to, że nie działa zwykle przez jakąś pierdółkę, typu gdzieś tam wlazł None a miał być obiekt i zabrakło sprawdzenia, albo gdzieś coś zwraca np. dwa wyniki a nie jeden, bo nie doczytałem dokumentacji na stronie (a w IDE nie było). I w sumie to nie byłoby nic takiego, bo przecież są unit-testy, które to zawsze łapią, jednak: (1) nie wszystko daje się łatwo i szybko unit-testować, np. integracja z zewnętrznymi systemami może trochę więcej czasu potrwać jeśli chodzi o setup; (2) test jak się wywali to nie daje tak szczegółowej informacji o wystąpieniu błędu jak komunikat kompilatora w statycznym języku - czas naprawienia takiego błędu w Pythonie jest znacznie dłuższy; trzeba wyciągać debugger.

Podsumowując:
moja produktywność w Pythonie jest mniejsza po kilku miesiącach nauki i pisania w nim realnego firmowego projektu niż moja produktywność po miesiącu weekendowego pisania hobbystycznego projektu na boku w Rust, który ponoć jest potwornie trudny. Porównuję z Rust, bo mniej więcej w tym samym czasie zacząłem poznawać oba.

Zobacz pozostałe 2 komentarze
KR
No niby tak, ale po co niepotrzebnie obciążać sobie pamięć? W innych językach obiektowych nie muszę pamiętać, czy coś jest funkcją, czy metodą obiektu cy w ogóle może ma jakąś specjalną składnię. Generalnie wszystko co można zrobić z obiektem jest dokumentacji jego klasy. Tu składnia jest niespójna - masz len(list), list.remove(item) i żeby było ciekawiej nawet del list[item]. Ogólnie pierdzielnik składniowy.
KR
A żeby było mało, to jeszcze takich składniowych fikołków, to jeszcze ify się pisze w innej kolejności w zależności od tego czy są wyrażeniem czy instrukcją sterującą.
PerlMonk
@Krolik: Nikt nie każe ci pisać takich ifów.
KR
Czyli w takim razie zachodzi potrzeba "Python the good parts". A ify jako wyrażenia są bardzo użyteczne. Brzydkie, ale użyteczne. Więc nie, nie przestanę ich używać. Po prostu szkoda, że nie zrobili tego spójnie z resztą. Nawet ?: z C jest ładniejsze.
PerlMonk
OK
lion137
  • Rejestracja:około 8 lat
  • Ostatnio:minuta
  • Postów:4885
1

@Krolik: "Upvotowałem" Twój post, ale to nie znaczy, że się ze wszsystkim zgadzam :) Otóż nie, jak wpiszesz w Pythonie kropkę po obiekcie, to dostajesz podpowiedzi, nawet w konsoli, nie mówiąc o IDE. W dokumentacji listy, jak najbardziej jest informacja o len:

Kopiuj
 |  __le__(self, value, /)
 |      Return self<=value.
 |  
 |  __len__(self, /)
 |      Return len(self).
 |  
 |  __lt__(self, value, /)
 |      Return self<value.

Chyba też nie jest winą Pythona, że ktoś wypuszcza biblitekę bez dokumentacji. A dalej tak, w pakietach jest trochę burdel, ale z pip, virtualenv i requirements.txt da się sporo ogarnąć. To tyle, acha, z tym "Co napiszesz działa tak jak oczekujesz" to chodzi bardziej o to, że ideę algorytmu, tak jak go rozmumiemy i tak jak jest w pseudokodzie, można w Pythonie łatwo zapisać.


edytowany 1x, ostatnio: lion137
KR
No owszem, jest __len__, ale widzisz, teraz trzeba wiedzieć, że to jest magiczna metoda, która jest wołana przez ten główny len(). Te podkreślniki mnie początkowo przestraszyły i zignorowałem te metody. Przy okazji pomysł, żeby kontrolować prywatność metod / pól przez nazwę (_) a nie słowo kluczowe jak w innych językach jest obiektywnie bardzo słaby.
lion137
Tak, ale robiąc w Pythonie jakąkolwiek obiektówkę musisz się zapoznać z "dunder" methods.
KR
Moderator
  • Rejestracja:prawie 21 lat
  • Ostatnio:dzień
  • Postów:2964
2

acha, z tym "Co napiszesz działa tak jak oczekujesz" to chodzi bardziej o to, że ideę algorytmu, tak jak go rozmumiemy i tak jak jest w pseudokodzie, można w Pythonie łatwo zapisać.

Ok, to jest argument bardzo często podnoszony jako zaleta języków skryptowych (nie tylko Pythona). Że można szybko i prosto napisać, i że wygląda prawie jak pseudokod.

Zobaczmy jak to wyglądało w projekcie, w którym ostatnio jestem. Musiałem wywalić duplikaty z listy. Oczywiście nikt takich rzeczy nie pisze od zera. Np. w Scali zrobiłbym to tak:

Kopiuj
val list = List(1,5,2,1,2)
val newList = list.distinct  // List(1,5,2)

W "niskopoziomowym" Rust jest troszkę więcej ceregieli, bo trzeba przekształcić w iterator i z powrotem, bo tak jest uniwersalniej:

Kopiuj
use itertools::Itertools;
let list = vec![1,5,2,1,2];
let new_list: Vec<_> = list.into_iter().unique().collect();   // vec![1,5,2]

A jeśli lista byłaby posortowana, to można użyć specjalistycznego dedup() które działa bez alokacji na stercie i jest bardziej cache-friendly:

Kopiuj
let list = vec![1,1,2,2,5];
let new_list: Vec<_> = list.into_iter().dedup().collect();  // vec![1,2,5]

No i szczerze w Pythonie spodziewałem się czegoś podobnego.

Najpierw rzut okiem na listę metod dla listy:
dedup? nie ma
unique? nie ma
distinct? nie ma
remove_duplicates? nie ma
Mogę zrobić zbiór przez set(), ale stracę kolejność...
Skończyły mi się pomysły, rzut oka w dokumentację. Nie ma nic.

Chwilka, wiem, przecież w Pytonie jest jeszcze itertools - iteratory na sterydach! Dokumentacja itertools:
powtarzanie elementu, nie to nie to ...
grupowanie, no może jakoś by się dało, ale strasznie naokoło...
kombinacje, permutacje, nie to też nie to,
parzenie kawy i herbaty... no nie, to też nie teraz...
koniec listy

Dobra, poddaję się, idę na StackOverflow.
Tamże najwyżej punktowana odpowiedź (serio?!):

Kopiuj
for i in mylist:
  if i not in newlist:
    newlist.append(i)

No dobra, ale to jest O(n^2) myślę sobie, musi być coś lepszego. Kawałek niżej jest:

Kopiuj
seen = {}
new_list = [seen.setdefault(x, x) for x in my_list if x not in seen]

Ostatecznie można też przez bezpośrednią konwersję do zbioru o ile się weźmie OrderedDict:

Kopiuj
from collections import OrderedDict
list(OrderedDict.fromkeys(lseparatedOrbList))

To jest akceptowalne, ale nadal bardzo "nie-wprost", bo deduplikacja jest tylko efektem ubocznym działania zbioru. A ja zbioru w ogóle nie potrzebowałem.

To tyle w kwestii tej słynnej czytelności i ekspresywności. Polega ona chyba na pisaniu od zera oczywistych rzeczy, a "batteries-included" to jedynie mit.
Może względem C i Javy się broni, ale serio inne języki poszły do przodu.

BTW: Żeby nie było, że się przyczepiłem tylko przez przypadek jednej rzeczy. Kolejna rzecz, która wydaje się serio na maksa podstawowa a jej nie ma, to znalezienie pierwszego elementu na liście, który spełnia warunek. Czyli coś co w wielu językach jest pod postacią metody lub funkcji find(). A w Pythonie... nie ma. No, po prostu, musisz napisać sobie sam:

https://stackoverflow.com/questions/2361426/get-the-first-item-from-an-iterable-that-matches-a-condition

edytowany 4x, ostatnio: Krolik
Pyxis
unique_everseen i first_true z modułu more_itertools robią to, co chcesz.
dedicated
  • Rejestracja:około 6 lat
  • Ostatnio:4 minuty
  • Postów:160
1
Krolik napisał(a):

No i szczerze w Pythonie spodziewałem się czegoś podobnego.

Kopiuj
list1 = [1,5,2,1,2]
pd.Series(list1).drop_duplicates().to_list() # [1, 5, 2]
edytowany 2x, ostatnio: dedicated
Shalom
Ło panie, to juz takie rozwiązanie a'la javascript dorzuć pandas, potężny framework do machine learingu żeby zrobić uniq na liscie :D :D
lion137
  • Rejestracja:około 8 lat
  • Ostatnio:minuta
  • Postów:4885
0

@Krolik: Prawda, ale bym się z tego powodu z mostu nie rzucił :)
@dedicated: Nie zawsze ktoś chce dociągać pandas do projektu.


Zobacz pozostały 1 komentarz
KR
nikt nie mówi aby nie używać bibliotek w ogóle, ale serio nie czujesz niczego niewłaściwego w dodawaniu kombajnu zależności aby móc zrobić coś co jest zaimplementowane trzema linijkami kodu? Takie rzeczy powinny być w bibliotece standardowej lub ewentualnie w jakichś lekkich utilsach. A minusy też są: każda zależność to zwiększanie potencjału do wywalenia się czegoś (konflikty bibliotek, nagły brak kompatybilności wstecznej po niepozornej zmianie wersji itp), większy ciężar całości programu, dłuższy czas instalacji itp
dedicated
@Krolik: sęk w tym, że pandas to w praktyce biblioteka standardowa, a nie ma tam jej z pwodu leśnodziadkowatości twórców
KR
czyli to jest tak jak boost dla C++?
dedicated
@Krolik: za mało znam C++, by odpowiedzieć :/
Spearhead
W Pythonowe pakiety są porozpraszane i w zależności od tego, co kto robi, różne rzeczy uznaje się za "standardowe". w rodzaju tego, że requests jest de-facto standardem w wysyłaniu zapytań, numpy w obliczeniach matematycznych itd. pandas jest powszechnie używany w przetwarzaniu danych, ale too, żeby każdy projekt go potrzebował to raczej bzdura.
Spearhead
  • Rejestracja:prawie 6 lat
  • Ostatnio:około 8 godzin
  • Postów:1002
0

To już raczej more-itertools albo iteration_utilities...

Wibowit
  • Rejestracja:prawie 20 lat
  • Ostatnio:około 6 godzin
0

@PerlMonk:
Python 3.6.8:

Kopiuj
>>> set(iter([1,2,2,3,5,3,6,3,76,3,1,0,-2,-3]))
{0, 1, 2, 3, 5, 6, 76, -3, -2}

Kolejność stracona.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
edytowany 1x, ostatnio: Wibowit
PerlMonk
Fajnie, ale czemu mnie przywołałeś?
Wibowit
bo wstawiłeś komentarze z takim rozwiązaniem
PerlMonk
Już nawet zapomniałem. Gdzie ja tak pisałem?
Wibowit
w tym temacie widziałem
PerlMonk
Pewnie poleciał razem z postem. W każdym razie kod działa prawidłowo. Jeśli chciałeś posortować numerki to iter nie wystarczy.
LukeJL
  • Rejestracja:około 11 lat
  • Ostatnio:mniej niż minuta
  • Postów:8401
1

Python jest przereklamowany.
O ile mam sentyment dla Pythona, to jednak nie chcę w nim pisać.
Jakby jeszcze był szybki. Jakby był niskopoziomowy. Jakby się kompilował do kodu natywnego albo w łatwy sposób mógł odpalać w przeglądarce (teoretycznie można, ale czy to się opłaca? Kiedyś sprawdzałem na jakiejś stronie z REPLem do Pythona i z kilka MB ważył sam interpreter skompilowany do JS. Ciekawe, jak z Wasm to wychodzi).

Owszem, jest ekspresywny, ale inne języki nadrobiły braki, jak również powstały całkiem nowe języki, które też są w miarę ekspresywne. Poza tym w Pythona łatwo jest wejść, ale trudno go opanować (ja pisałem kiedyś w Pythonie, ale nigdy nie osiągnąłem masterki w tych wszystkich trickach, np. zagnieżdżonych list comprehension i innych dziwactwach).

Z drugiej strony Python ma biblioteki do machine learning i ma Django, więc ma on swoje zastosowanie widać i chyba to powoduje taki boom na niego.

Poza tym jest to elegancki język i z niskim progiem wejścia, więc np. lepiej, żeby ktoś się uczył Pythona jako pierwszy język niż jakiegoś JavaScriptu, gdzie na dzień dobry masz ileś WTFów.


edytowany 3x, ostatnio: LukeJL
dedicated
@LukeJL: Z drugiej strony Python ma biblioteki do machine learning i ma Django Django to największy rak w pythonie
LukeJL
@dedicated Dlaczego? Django używałem dawno temu, ale pamiętam, że to był fajny framework, który pozwalał na szybkie pisanie aplikacji webowych, bo miał dużo ułatwień.
Escanor16
właśnie to "dużo ułatwień" powoduje, że potem mamy mnóstwo wtfów gdy projekt sie rozrasta
Escanor16
  • Rejestracja:prawie 5 lat
  • Ostatnio:około 21 godzin
  • Postów:366
2

Ani się fajnie w Pythonie nie pisze ani się w Pythonie fajnie nie debugguje, Python powinien zostać w swoim obrębie Data Science i nie wychodzić poza ten obszar.
Nie wiem jak wy, ale ja pisząc coś w Pythonie nie widzę jakiegoś takiego funu z robienia tego, całkiem inaczej mi się pisze w Javie czy w TS niż w Pythonie


Nie chciałem być programistą jednak tego zechciał świat.
Spearhead
  • Rejestracja:prawie 6 lat
  • Ostatnio:około 8 godzin
  • Postów:1002
2

Tak w ramach eksperymentu proponuję żeby OP, @spartan24, pobawił się teraz 3 dni Rustem i dał nam znać jakie ma wrażenia.

KR
Ale dlaczego akurat Rustem? Rust do Pythona to się ma jak pięść do oka. Przykłady Rusta przywołałem dlatego, że mam podobny staż w nim, i nawet Rust potrafi być zadziwiająco ekspresywny.... Ale to jest nawet, bo ekspresywność nie jest nawet w pierwszej trójce priorytetów tego języka.
Spearhead
Bo sam piszesz: moja produktywność w Pythonie jest mniejsza po kilku miesiącach nauki i pisania w nim realnego firmowego projektu niż moja produktywność po miesiącu weekendowego pisania hobbystycznego projektu na boku w Rust, który ponoć jest potwornie trudny. Wobec tego proponuję empirycznie sprawdzić, czy inne osoby również podzielą ten pogląd i będą miały analogiczne doświadczenia, skoro Rust jest przywoływany jako przykład języka lepszego/bardziej ekspresywnego/najwyraźniej łatwiejszego w opanowaniu.
KR
Inne osoby chyba podzielają ten pogląd. Rust był chyba 5 albo 6 razy z rzędu uznany w głosowaniu za ulubiony język programistów na StackOverflow.
S2
  • Rejestracja:około 4 lata
  • Ostatnio:około 4 lata
  • Postów:65
0

@Spearhead: jestem juz sporo zaawansowany w przepisywaniu sporej aplikacji z javy do pythona (drugie do pierwszego to jak niebo a ziemia)
i po prostu mi sie nie chce. Poza tym musze jedynie dodac, ze zadnego dyskomfortu z powodow opisanych wczesniej w zadnym stopniu nie odczuwam (no moze poza implementacja interfejsow, a wlasciwie ich brak i koniecznosc kombinowania) no ale pewnie dlatego ze jestem zaj....tym programista :D

Zobacz pozostałe 8 komentarzy
KR
Eee, no w porównaniu z PHP to wszystko jest eleganckie i dobrze przemyślane. :D Dla mnie na razie Python to niestety też takie bardziej estetyczne PHP z fajnymi libkami do data science. Więc nawet się zgadzamy.
S2
@Krolik: a co robisz w data science jesli mozna spytac?
KR
Analizuję dane :P A dokładniej wykrywam podejrzane zmiany w wynikach testów wydajnościowych naszych produktów, uwzględniając szum, zmiany środowiska testowego itp.
S2
@Krolik: a cos na wlasna reke? bo mam wrazenie ze ci (wybacz) d...py nie urywa :D
KR
na własną rękę w pythonie i data-science nic obecnie nie robię
V6
  • Rejestracja:około 7 lat
  • Ostatnio:ponad rok
  • Lokalizacja:<a href="https://megatool.pl">sklep</a>
  • Postów:49
0

Python jest najlepszy na świecie. Dziękuje zamykam temat.

A tak serio, to patrząc po zapotrzebowaniu na prace w pythonie to bez szału. Troche zaczyanm załowac że w .net nie poszedłem, duzo łatwiej o prace dla juniorkow.


dedicated
@vitz666: Bo nie ma czegoś takiego jak programista Python. Jest umiejętność programowania w Pythonie.
PerlMonk
Pytanie: ile można juniorkować?
PL
  • Rejestracja:około 7 lat
  • Ostatnio:ponad 2 lata
  • Postów:104
0

PYTHON jest fajny ale 100x wolniejszy niż C. Pomyśleć tylko ile prądu marnowane jest przez te wszystkie serwery które, uruchamiają strony napisane w Pythonie...

Spine
  • Rejestracja:prawie 22 lata
  • Ostatnio:2 minuty
  • Postów:6628
2

@ple: jakoś nie żal mi tego prądu, kiedy sobie wyobrażam serwerownię YouTube i ilość śmieci jakie są uploadowane i przetwarzane tam każdego dnia...


🕹️⌨️🖥️🖱️🎮
lion137
  • Rejestracja:około 8 lat
  • Ostatnio:minuta
  • Postów:4885
2
ple napisał(a):

PYTHON jest fajny ale 100x wolniejszy niż C. Pomyśleć tylko ile prądu marnowane jest przez te wszystkie serwery które, uruchamiają strony napisane w Pythonie...

Wyobrażam sobie ile prądu byłoby marnowane na deweloperkę, gdyby te strony były robione w C...


Spine
Garstka developerów i ich komputerów vs tysiące ludzi, komputerów i serwery obsługujące ich przez długie lata. Jak dla mnie, tutaj C wygrywa :]
superdurszlak
  • Rejestracja:prawie 7 lat
  • Ostatnio:3 dni
  • Lokalizacja:Kraków
  • Postów:1999
5
ple napisał(a):

PYTHON jest fajny ale 100x wolniejszy niż C. Pomyśleć tylko ile prądu marnowane jest przez te wszystkie serwery które, uruchamiają strony napisane w Pythonie...

Transport morski jest znacznie bardziej ekonomiczny, niż kolejowy, a ten jest bardziej ekonomiczny niż drogowy. Pomyśleć, ile energii się marnuje bo ludzie jeżdżą na zakupy i do pracy samochodem zamiast popłynąć łódką :)

Język wybiera się pod kątem zadania, nie poboru energii. To raz.

Dwa, porównujesz Pythona z C, a powinieneś porównywać z innymi technologiami nadającymi się do jakiejkolwiek formy webdevu od strony backendowej:

  • Java / JVM ogółem
  • C# / .NET
  • PHP
  • Ruby
  • JS / Node.js
  • itd.

Tu porównanie nie będzie już aż tak drastyczne, każda z tych technologii na swój narzut przez interpretery, maszyny wirtualne, dodatkowe poziomy abstrakcji (choćby namiętne stosowanie refleksji przez narzędzia JVMowe) etc.

Trzy, C teoretycznie może jest szybsze (tj według prostych benchmarków) ale szczerze wątpię, że przeciętny backendowiec umiałby napisać drastycznie szybszą aplikację webową w C niż w swoim wiodącym języku.


edytowany 1x, ostatnio: superdurszlak
PerlMonk
Poza tym kod Pythona można skompilować do binarki i różnica będzie dużo mniejsza.
V6
  • Rejestracja:około 7 lat
  • Ostatnio:ponad rok
  • Lokalizacja:<a href="https://megatool.pl">sklep</a>
  • Postów:49
1

Po co się ograniczać do C, jak można zrobić web framework do asm i oszczędzić dużo prądu ;D

akurat apki w pythonie to moim zdaniem są oszczędne w porównaniu do np. javy


lion137
  • Rejestracja:około 8 lat
  • Ostatnio:minuta
  • Postów:4885
5

Nie no, ludzie, przecież w 99% głównym bottleneckiem w webie sa jakieś zewnetrzne zasoby, IO, DB, HTTP, czy inny web, i tu szybkość języka nie ma wiekszego znaczenia, bo to sa operacje nie raz i tysiące razy wolniejsze niż dowolny język.


Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)