Jakie wady ma Python 3?

Jakie wady ma Python 3?
IK
  • Rejestracja:ponad 7 lat
  • Ostatnio:prawie 2 lata
0

Zainspirowany tematem Jakie wady ma C# i .NET? chciałbym usłyszeć wasze opinie na temat wad Pythona :) Skupmy się na Pythonie 3.
Zaczynam:

Powszechne używanie metaklas (np. modele, formularze w Django) i dynamicznej modyfikacji obiektów (boto3) uniemożliwiają/bardzo utrudniają skuteczne otypowanie niektórych bibliotek.

Dict driven development. Widziałem wiele projektów w których budowanie dicta jest rozstrzelone w 10 różnych plikach, a potem interesująca nas funkcja jest wywoływana z parametrami **params, co strasznie utrudnia debugowanie - nie wiadomo skąd co się bierze. Dodajmy do tego wywoływanie metody na podstawie jej nazwy przekazanej gdzieś jako string i ni cholery bez przechodzenia krok po kroku w debuggerze nie dowiemy się co tam się dzieje.

Global Interpreter Lock w CPythonie.

JA
  • Rejestracja:prawie 15 lat
  • Ostatnio:23 dni
0

Python 3 jest wolniejszy od najnowszego PHP 7 ;( wiele źródeł, benchmarków na które się natknąłem wieszczy tę informację

Wibowit
A różnica się pewnie jeszcze powiększy bo PHP 8 ma dostać JITa: https://www.phoronix.com/scan.php?page=news_item&px=PHP-8-JIT-Approved
JA
@Wibowit: to nie jest dobra wiadomość, z całym szacunkiem dla PHP :P Bo lubuję się w wężach
TurkucPodjadek
TurkucPodjadek
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 4 lata
  • Postów:607
4

Jedną z wad Pythona jest jego popularność. Później dużo programersów takich pisze o jego wadach i nie wiadomo, czy nagle programy w nim pisane przestaną działać, czy coś, no w każdym razie, stres jest. Później ciężko pisać, mając przed oczami te wszystkie wymienione wady i znowu stres jest. A później, by się usprawiedliwić, to już człowiek sam zakłada wątki na forach i pyta o wady, co by się utwierdził w przekonaniu.

Haskell
:D
cerrato
Moderator Kariera
  • Rejestracja:około 7 lat
  • Ostatnio:około 24 godziny
  • Lokalizacja:Poznań
  • Postów:8802
2

Dla mnie dyskwalifikacją Pajtona jest Funkcje w Pythonie nie posiadają sprecyzowanych początków i końców oraz żadnych nawiasów służących do zaznaczania, gdzie funkcja się zaczyna, a gdzie kończy. Jedynym separatorem jest dwukropek[...]Bloki kodu definiujemy poprzez wcięcia - https://pl.wikibooks.org/wiki/Zanurkuj_w_Pythonie/Wci%C4%99cia_kodu


Zobacz pozostałe 21 komentarzy
cerrato
No właśnie - wciecia są elementem estetyki, mają zwiększać czytelność kodu DLA CZŁOWIEKA, a nie stanowić element skladni. Dla mnie to jest jakieś pomieszanie pojęć
Cr0w
to piszesz nieczytelny kod z bez tych wciec w innych jezykach?
PerlMonk
Tak, cerrato to uczestnik IOCCC :D
DR
@cerrato: a czym są dla ciebie klamry czy słowa kluczowe end? One też są dla człowieka i mają zwiększyć czytelność xd jak masz problem z wcięciami to polecam jakieś darmowe ide a nie notatnik do programowania. I od razu przestaniesz pieprzyć farmazony. Jakby powiedziała moja żona "W dupie ci się poprzewracała" :p
cerrato
@Dregorio: to są zupełnie inne tematy. Klamerki (czy jak kto woli - begin i end) informują kompilator o tym, gdzie bloki się zaczynają i kończą. Równie dobrze możesz wszystko dać w jednej linii i jedynie oddzielić średnikami - skompiluje się dokładnie tak samo. Wcięcia są jedynie kosmetyką dla człowieka, który kod czyta. A Twojej żony (póki co :P) nie poznałem
Spearhead
  • Rejestracja:prawie 6 lat
  • Ostatnio:około 11 godzin
  • Postów:1002
2
  • Parcie na programowanie asynchroniczne, async def, await i tym podobne, nieco podzieliło to społeczność języka, nie wszyscy to lubią.
  • Stosunkowo wolny
  • Niektóre elementy języka są mało intuicyjne (np. for-else).
  • 10 lat po premierze Pythona 3, a ciągle mnóstwo kodu jest w 2.x. Złamanie wstecznej kompatybilności między wersjami okazało się bolesne i do dziś boli.
Cr0w
wiekszosc nie potrzebuje wyrzkorzystac; bardziej podzililo := okropny
  • Rejestracja:około 6 lat
  • Ostatnio:ponad rok
3
  1. Python jest za duży. Lekko podpity Hettinger powiedział, że na świecie jest tylko dwóch ludzi, którzy w całości ogarniają, co dzieje się pod maską i on nie jest jednym z nich. Nie był zadowolony z kierunku, w którym zmierza język i społeczność. Nagranie zostało niestety usunięte. https://twitter.com/raymondh/status/959358630377091072

  2. Przeciekające abstrakcje.

Kopiuj
>>> int.__add__
<slot wrapper '__add__' of 'int' objects>
>>> 
  1. Funkcja max zwraca pierwszy największy element. (Powinna zwracać ostatni największy.)

  2. Opcja -Wdefault nie ustawia domyślnych warningów.

winuser
ad.0 -> Pewnie dlatego, ze nigdy nie programowal w C++.
MarekR22
Ad 2. A niby czemu? max znane mi z innych języków robi dokładnie tak samo.
@MarekR22: Stepanov mówił wielokrotnie, że max to jego największy błąd. Do błędu przyznaje się również w rozdziale siódmym Notes on Programming.
Cr0w
ciekawe kiedy beda posty 'the zen of python is dead' bo ma troche racji :/
S9
  • Rejestracja:ponad 10 lat
  • Ostatnio:6 miesięcy
  • Lokalizacja:Warszawa
  • Postów:3573
1

Dynamiczne typowanie. Inferencja + statyczne typowanie > statyczne typowanie >> dynamiczne typowanie


"w haśle <młody dynamiczny zespół> nie chodzi o to ile masz lat tylko jak często zmienia się skład"
IK
Wszystkie popularne static type checkery (mypy, pyre, pytype) mają inferencję typów.
Wibowit
Abstrahując od tego co mają jakieś tam type checker to IntelliJ / PyCharm ma słabiutką inferencję.
Cr0w
@Wibowit update? serio @scibi92 to tak samo jak powiedziec ze static type sa wada javy; no jest lepiej, ale bez nich byla by jeszcze mniej rozwlekla
Haskell
  • Rejestracja:prawie 10 lat
  • Ostatnio:12 miesięcy
  • Postów:4700
1
scibi92 napisał(a):

Dynamiczne typowanie. Inferencja + statyczne typowanie > statyczne typowanie >> dynamiczne typowanie

Jesteś bardzo nie na bieżąco. Od 3.6 jest możliwość deklarowania typu, a mypy czy PyCharm ładnie łapie errory bez potrzeby wykonywania kodu.


Zaglądali do kufrów, zaglądali do waliz, nie zajrzeli do d**y - tam miałem socjalizm. Czesław Miłosz
Zobacz pozostałe 29 komentarzy
nullpt4
@Haskell: tzn w takim Pythonie czy JS'sie trzeba być dobrym programistą, żeby nie mieć problemów z np typami, a w językach statycznie typowanych jest po prostu kompilator :P Co myślisz?
Haskell
Myślę, że w każdym języku programista ze słabymi kompetencjami będzie miał ciągle jakieś problemy. Jak nie z typowaniem, to z czymś innym.
nullpt4
Jasne, że tak, ale raczej chodzi mi głównie o problemy, które istnieją, a nie muszą - np to nieszczęsne typowanie.
Haskell
@nullpt4 - tak jak już pisałem mam odmienne zdanie na ten temat.
nullpt4
@Haskell: w porządku
YA
  • Rejestracja:prawie 10 lat
  • Ostatnio:około godziny
  • Postów:2370
1
Mózg napisał(a):
  1. Przeciekające abstrakcje.
Kopiuj
>>> int.__add__
<slot wrapper '__add__' of 'int' objects>
>>> 

O co chodzi z tymi przeciekającymi abstrakcjami? To, że prywatność przez konwencję nazewniczą?

  1. Funkcja max zwraca pierwszy największy element. (Powinna zwracać ostatni największy.)

Dlaczego powinna ostatni największy?

lion137
  • Rejestracja:około 8 lat
  • Ostatnio:4 minuty
  • Postów:4936
1

Podstawową wadą Pythona jest wydajność, może w jakiejś aplikacji webowej, to nie ma znaczenia, ale, jak przyjdzie napisać wydajny kod (np. scientific computing), to korzystamy tylko z bibliotek, które są Pythonowymi nakładkami na C/C++. Jakikolwiek kawałek Pythona może zwolnić działanie programu i kilkusetkrotnie - chcąc coś zakodować trzeba wychodzić z Pythona do innych języków, innych środowisk, debugera, etc.. - niesłychanie uciążliwe.


J1
Co jest trudnego w wykorzystaniu numpy albo innych bibliotek opartych na c/c++ w Pythonie? Dostajesz niewielki overhead kosztem wygody. Z tego co kojarzę to jest jeszcze numba która kompiluje konkretne funkcję żeby był szybsze (ale kosztem dynamicznego typowania)
lion137
Jeżeli coś można zrobić w numpy czy tensorflow, to super, ale jak nie, to żeby coś zmienić Musisz już wyjść z Pythona.
Aventus
  • Rejestracja:około 9 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:UK
  • Postów:2235
0

Ja pozwolę sobie podpiąć się pod pytanie, bo chodziło mi to po głowie od jakiegoś czasu. Mianowicie czemu uważa się że Python jest dobry do prototypowania ale nie do większych, produkcyjnych aplikacji? Co np. przemawia za tym żeby nie stosować Pythona do napisania jakiegoś Web API (podkreślam że większego a nie jakiś prosty CRUD)?


Na każdy złożony problem istnieje rozwiązanie które jest proste, szybkie i błędne.
Zobacz pozostałe 2 komentarze
IK
Oczywiście, że można, ale po co się męczyć? Poza tym aplikacje w node.js też mogą być silnie i statycznie typowane.
OtoKamil
@Aventus: przy projektach o większej skali to jest konkretny powód. Spróbuj refaktorować kod w korpo 300k linii w Javie, a następnie to samo w 300k linii JSa
Aventus
No tak, ale to o Pythonie częściej słyszę "nie do dużych projektów". Podczas kiedy ten sam argument można użyć chociażby właśnie przeciwko JS. Dla tego też chyba są inne powody?
OtoKamil
To już zależy od tego kto to mówi. Można wyliczać dalej: zatrudnialność, opłacalność danej technologii, technologię używaną w firmie, preferencje, ilość dostępnych bibliotek, wparcie, próg wejścia, itd...
Cr0w
@Aventus przesady. instagram, reddit, robinhood, dropbox- wszystkie daja rade. moze potrzebuja wiecej serverow i nie jest super szybkie, ale z opcjonalnymi typami jesli caly team zna to czemu nie? tylko po co jak jest java :/
TurkucPodjadek
TurkucPodjadek
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 4 lata
  • Postów:607
4
Aventus napisał(a):

Ja pozwolę sobie podpiąć się pod pytanie, bo chodziło mi to po głowie od jakiegoś czasu. Mianowicie czemu uważa się że Python jest dobry do prototypowania ale nie do większych, produkcyjnych aplikacji? Co np. przemawia za tym żeby nie stosować Pythona do napisania jakiegoś Web API (podkreślam że większego a nie jakiś prosty CRUD)?

Tak zazwyczaj uważają programiści, którzy normalnego IDE nie widzieli i testów nigdy nie pisali. I w ogóle nie odróżniają pewnie problemów po stronie architektury, od problemów stricte z samym językiem. Oni od razu wiedzą, że będą walczyć w swoim crudzie o cenne nanosekundy i Python się nie nada.

Oni od razu wiedzą, że jest zbyt słabo typowalny (IDE+lintery+mypy właśnie), bo jak ich nie przypilnuje tak jak np. kompilator Rusta, to pewnie ich projekt na 100 linii w porywach, w którym piszą tylko oni sami, się posypie z nadmiaru błędów. I winny będzie wyłącznie Python, a nie architektura czy np. ich styl kodowania.

Wibowit
  • Rejestracja:około 20 lat
  • Ostatnio:około 16 godzin
2
TurkucPodjadek napisał(a):

Oni od razu wiedzą, że jest zbyt słabo typowalny (IDE+lintery+mypy właśnie), bo jak ich nie przypilnuje tak jak np. kompilator Rusta, to pewnie ich projekt na 100 linii w porywach, w którym piszą tylko oni sami, się posypie z nadmiaru błędów. I winny będzie wyłącznie Python, a nie architektura czy np. ich styl kodowania.

Myślę, że typowy projekt w korpo ma > 100k linii kodu łącznie (nie wliczając komentarzy i pustych linii). Jeśli to jest np monolit to jest to wszystko w jednym projekcie. Przy takiej skali statyczne typowanie jest bardzo pomocne. Projekty na 100 linii to raczej skrypty do automatyzacji pewnych prostych powtarzających się czynności i te są zwykle w bashu czy Pythonie.

Zresztą możemy zrobić jakieś proste wyliczenia. Dla przykładu mamy 5 letni projekt z 5 programistami. Programista pracuje 200 dni w roku i codziennie dodaje efektywnie 20 linijek kodu (czyli jest to wartość netto = ilość linii dodanych - ilość linii usuniętych). Ostatecznie mamy: 5 * 5 * 200 * 20 = 100k linii kodu.


"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 2x, ostatnio: Wibowit
Zobacz pozostałe 11 komentarzy
nullpt4
@TurkucPodjadek: czy Twoim zdaniem nie ma różnicy między językami statycznie/dynamicznie typowanymi, kompilowanymi/interpretowanymi?
TurkucPodjadek
TurkucPodjadek
@nullpt4: różnicy w czym dokładnie?
nullpt4
w np. łatwości użytkowania, popełniania mniej błędów itp.
TurkucPodjadek
TurkucPodjadek
@nullpt4: zatem odpowiadam: są różnice.
S9
  • Rejestracja:ponad 10 lat
  • Ostatnio:6 miesięcy
  • Lokalizacja:Warszawa
  • Postów:3573
1

@TurkucPodjadek: nie wiem po co ta złość, po prostu wyraziłem swoje zdanie że dynamiczne typowanie utrudnia pracę. Na pewno taki Python może być sensowny do pewnych zastosowań np. AI, skrypty jako alteratywa dla Bashu. Po prostu chodzi o to że napisanie List<Products> products, zamiast po prostu products nie spowoduje że strace 20 godzin. Ok, może są narzędzia do analizy kodu, ale fajnie jest jak kod już jest w miare zrozumiały bez nich, np. jak widzisz zmiany na githubie.
Ja ogólnie nie wierze że jest coś takiego jak doskonały język ogólnego przeznaczenia i np. lubię Grooviego który jest bardziej dynamicznym językiem niż Python ale nie użyłbym go do stworzenia projektu na 20k kodu, tylko do testów, jakiś prostych skryptów czy małych projekcików :)


"w haśle <młody dynamiczny zespół> nie chodzi o to ile masz lat tylko jak często zmienia się skład"
S9
Jeszcze nie, ale kiedys pewnie spróbuje :)
TurkucPodjadek
TurkucPodjadek
Ja się nie denerwuję (skąd ten wniosek, za mało emotek?), tylko wyrażam swoje zdanie. :P
OP
OP
  • Rejestracja:ponad 5 lat
  • Ostatnio:ponad 5 lat
  • Postów:3
1

Jak dla mnie wady Pythona 3 to powolność, dynamiczne typowanie, nie jest kompilowany. Gdyby Crystal nie miał takiej składni jak Ruby z tym end które mi się nie podoba. Byłby idealnym zamiennikiem Pythona. Ma wszystko to czego brakuje Pythonowi.
https://crystal-lang.org

Zobacz pozostałe 5 komentarzy
MA
Przeciez python od 3/4 lat to nakladka na C do obliczen numerycznych oraz milion bibliotek "ogólnego zastosowania" głownie do Data science i ML'a. Jak python mial byc alternatywą dla PHP'a skoro te dwa jezyki powstaly w zupelnie innym celu? Ile jezykow ma wielowatkowosc -> C, Rust, Julia, C#, Java, Erlang, Golang, Nim. Pewnie jeszcze pare przynajmniej się znajdzie ale to są te w których coś napisałem albo z czym pracowałem.
Cr0w
@superdurszlak podnosi sie. jest concurrency-go-like, teraz https://stackoverflow.com/a/55873335 (super) wolno idzie. z tego co wiem teraz przepychaja GIL'a na wyzszy poziom.
OP
openindiana
Ale Python w tamtych dziedzinach ma dobrą konkurencję jak Julia czy R. A w Polsce najwięcej pracy jest w Django jeżeli ktoś myśli o Pythonie. Do tego, żeby pracować w data science, sztucznej inteligencji, trzeba mieć łeb do matematyki i algorytmiki. Już widzę tych klepaczy kodu i tworzenia formatek, którzy przechodzą z webdev do takiej dziedziny tęgich umysłów. Pythona zazwyczaj wybierają ludzie ze słynnych bootcampów skuszeni łatwym zarobkiem 15k w reklamach tych kursów. Dlatego przeważnie wybierają najłatwiejszy język programowania do nauki, czyli prosty Python.
superdurszlak
@machineko: jak się mają ostatnie 3-4 lata do dobrych 25 lat historii języka nim nastała moda na używanie go w ML / data science?
MA
To już zależy od "sezonu" od nakładki na C po jezyk do nauczania oraz jakieś skrypty i QA przez jakies backendy kiedy na to był "hajp" (co do 5/6 lat temu to sporo tez bylo analizy danych nie czystego Data Science i od cholery skryptowania)
superdurszlak
  • Rejestracja:prawie 7 lat
  • Ostatnio:dzień
  • Lokalizacja:Kraków
  • Postów:2000
4

Ok, trochę będę s**ł do własnego gniazda bo choć już dawno nie babrałem zawodowo łapek w Pythonie to wciąż mam do niego sentyment:

  • dynamiczne typowanie - potrafi sprawić problemy, dlatego staram się je jako tako łatać type hintami i innymi takimi
  • wielowątkowość - żeby w 2019 domyślne interpretery dalej wycinały wykonanie równoległe... na szczęście Python ma całkiem znośne biblioteki do zrównoleglania na procesach. W każdym razie concurrent.futures są całkiem OK, bo multiprocessing to już tak sobie, w sumie nigdy nie wiesz (dosłownie) kiedy Ci umrze proces
  • wydajność - nie ma co się oszukiwać, jest powolny. Da się to podratować kompilując do binarki (tak, da się) czy używając JIT np. z numba albo hakując bibliotekami które pod spodem mają C / C++ / Fortran / Go / Ada (takie też chyba kiedyś znalazłem)...
  • ... ale im dalej w las i więcej kombinowania i hakowania w imię wydajności tym więcej problemów, bo np. mimo interpretowanego języka uzależniasz się nie dość od platformy, to jeszcze od kolejności dynamicznego importu N różnych skompilowanych libek, które pod spodem zaciągają wybiórczo Twoje dependencje. Mówię tu szczególnie o różnych geopandasach, shapely, fionach itp. które jak dobrze pamiętam narobiły mi z tym kiedyś rabanu.

Ragnar Lothbrok
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 4 lata
  • Postów:35
1

Python to mój ulubiony język, patrząc na estetykę i konsystencje kodu. Ale ma jedną kolosalną wadę tj szybkość, a raczej jej brak. Nie zawsze można to tolerować czy przeskoczyć, ostatnio np robiłem jakiś task w którym na końcu się okazało że konieczne jest sprawdzenie jednej listy i drugiej pod kątem wyłonienia permutacji, resztę kodu już miałem w pythonie no to już tylko wystarczyło dorzucić tam taki moduł, od razu sobie pomyślałem o itertools bo co może pójść źle, ale okazało się że zrobiłem taki interes że zyskałem ok godzinę przy pisaniu w pythonie zamiast w c++, a potem kod wykonania zamiast godziny wynosił jakoś ponad tydzień.

Tak więc jak jest szansa że będziesz musiał wykonywać w projekcie ciężkie komputacje to z samym pythonem możesz się przejechać. Niby spory jest za granicą hype na data science w pythonie i rubym ale oni o poważne dla komputera obliczenia tam się ocierają dosyć rzadko z tego co widziałem. Niestety do typowo webowych rzeczy Python to też nie jest optymalny język bo przeglądarki go nie używają, skutek taki że przy pisaniu botów gdzie miałem tysiące małych operacji typu document.query itp to python & selenium było też o dużo wolniejsze niż nodejs & puppeteer.

Moim zdaniem tragedia pythona jest taka że w niczym nie jest wyspecjalizowany i w niczym najlepszy i dlatego ludzie będą zawsze z niego przeskakiwać gdzieś dalej.

edytowany 1x, ostatnio: Ragnar Lothbrok
MA
Ooooof Ruby do data science co ty piłeś xD
Ragnar Lothbrok
Użyj Googla, jest na drugim miejscu po Pythonie w tej branży wg popularności. Nie mój to pomysł i nie moja brocha.
MA
Link or didnt happen serio pracuje w branzy "data science" od lat i jakoś nigdy nigdzie czegokoliwek w Rubym nie pisalem. A na 2 miejscu na 99% bedzie R pozniej Matlab/C/Julia zaleznie od niszy pozniej Swift
Ragnar Lothbrok
A to R nie jest jakimś supersetem do rubiego? Jeśli to nie ma nic wspólnego no to wybacz, nie używałem jednego ani drugiego tylko widziałem statystyki ostatnio.
MA
Nope R to calkowicie inny jezyk.
OP
openindiana
Była dyskusja na reddit, że Rust w takich dziedzinach przegrywa z R i Julia, bo nie ma odpowiednich bibliotek. W Ruby natomiast napisanych jest dużo narzędzi do hakingu, patrz metasploit czy inne programiki na Kali Linux.
MA
MA
  • Rejestracja:około 6 lat
  • Ostatnio:ponad 3 lata
  • Postów:30
1

Z mojej strony największe wady:3

  1. Performance szczególnie bolesne bardzo kosztowne pętle co automatycznie wyklucza pisanie czegoś sensownego w czystym pythonie i trzeba schodzic do Cythona. Ale największym problemem nie jest sam performance bo bez problemu można wykorzystać setki bibliotek które sprawiają że python staje się szybszy niż np. Java (w obliczeniach numerycznych) ale problemem jest okrutnie ujowa wielowątkowość i tutaj już nie ma za bardzo co zrobić.

Natomiast od jakiegoś czasu jest parę fajnych inicjatyw które się tym zajmują szczególnie numba i dask. numba

  1. Bardzo powolny rozwój samego języka od 3.5 praktycznie nie było żadnych przełomowych zmian w języku i przy 3.8 dalej nic "magicznego" nie wchodzi.

  2. Rozrośnięte zależności w bibliotekach coś w stylu noda tylko na mniejszą skalę ale dalej "toksyczne"

  3. Brak sensownego przywództwa w community, od jakiegoś czasu nastąpiła "demokratyzacja" języka i zajmowanie się sprawami typu master - slave i innym tego typu rakiem zamiast sprawami typu wydajność.

Od jakiegoś czasu mocno ograniczyłem pythona jako główny język na rzecz Juli oraz Rusta natomiast nie ma co ukrywać liczba genialnych bibliotek w Pythonie jest na tyle duża że język będzie rozwijał się przez najbliższe lata bo nie opłaca się pisać całego nowego środowiska w nowym jęzku o ile nie jesteś wielkim korpo.

edytowany 2x, ostatnio: machineko
Cr0w
  • Rejestracja:ponad 8 lat
  • Ostatnio:prawie 4 lata
  • Postów:120
0

wolny i strasznie dynamiczny (rzeczy typu monkey patching itp), ale mimo wszystko super jezyk.

edit. no i strasznie jezyk sie rozjezdza :( te cale the zen of python jest swietne, ale od 3.6 (?) powoli jezyk jest zasmiecany 'ladniejszymi' rozwiazaniami i puchnie w np 3 sposoby na printowanie stringa...

edytowany 1x, ostatnio: Cr0w
BraVolt
  • Rejestracja:prawie 6 lat
  • Ostatnio:prawie 4 lata
  • Lokalizacja:Warszawa
  • Postów:2918
0

OT, sorry

Czy Python nie stał się de facto standardem w nauczaniu programowania? Nie tylko na świecie ale i w Polsce?


"Kiedy wiedzieć czy zacząć nauke Springa? bo w czystej Javie to nic ciekawego nie zrobie chyba"
Ein Volk, ein Reich, ein Kwa-Kwa ***** ***
lion137
Może, staje się.
Ragnar Lothbrok
Gdzieś widziałem nowe rankingi popularności języków i Python był #1, przed JSem. Ale nie ma co się oszukiwać 90% tego hypu to ludzie którzy się nim pobawią i zostawią więc jest on mocno napompowany.
lion137
  • Rejestracja:około 8 lat
  • Ostatnio:4 minuty
  • Postów:4936
1

Widzę, że sporo piszących uważa za wadę dynamiczne typowanie; to chyba nie OK, język, który jest dynamiczny krytykować właśnie za to.


BraVolt
  • Rejestracja:prawie 6 lat
  • Ostatnio:prawie 4 lata
  • Lokalizacja:Warszawa
  • Postów:2918
1

Krytykują za dynamiczne typowanie jako takie. Fajnie i szybko tak kod (dynamic typing) się pisze - chyba każdy się zgodzi, ale IMO trudniej analizuje i utrzymuje.

Kopiuj
my_varaible = my_variable + 1 // WTF?!?!? ;)

Dla mnie łatwiej, kiedy IDE da mi znać, że się chyba wygłupiam z tą "varaible", niż gdyby miał siedzieć cicho, bo w końcu koder jego pan i my_varaible równie dobre jak my_variable.

Po stronie maszyny wirtualnej kod statycznie typowany da się prościej (efektywniej) optymalizować ale nie znam się, może się okazać, że to teraz już nie jest problemem dla wydajności.

Nie znam Pythona, nie wiem czy varaible pójdzie do window, do global, czy nie wiem gdzie (myślę o JS & Node).


"Kiedy wiedzieć czy zacząć nauke Springa? bo w czystej Javie to nic ciekawego nie zrobie chyba"
Ein Volk, ein Reich, ein Kwa-Kwa ***** ***
edytowany 4x, ostatnio: BraVolt
Ragnar Lothbrok
W tym przykładzie to chyba za wiele by typowanie statyczne nie zmieniło.
BraVolt
Zmieniłoby. Tu kod spokojnie i po cichu pójdzie dalej.
TurkucPodjadek
TurkucPodjadek
Przecież ten case obstawia IDE i to podkreśla, no ale przywoływania chochołów ciąg dalszy :-) Tak, wiem, tylko słabeusze korzystają z IDE
cmd
  • Rejestracja:około 10 lat
  • Ostatnio:6 dni
  • Lokalizacja:Warszawa
  • Postów:443
2

okazało że konieczne jest sprawdzenie jednej listy i drugiej pod kątem wyłonienia permutacji, resztę kodu już miałem w pythonie no to już tylko wystarczyło dorzucić tam taki moduł, od razu sobie pomyślałem o itertools bo co może pójść źle, ale okazało się że zrobiłem taki interes że zyskałem ok godzinę przy pisaniu w pythonie zamiast w c++, a potem kod wykonania zamiast godziny wynosił jakoś ponad tydzień.

Mała uwaga do dyskutujących, to nie wina języka, że czesto jesteście niekompetentni w danej technologii i nie potraficie poprawnie rozwiązać zadania. To że komuś coś działa "za wolno" itp. często wynika tylko z braku wiedzy i doświadczenia i nie zwalałbym od razu wszystkiego na ograniczenia języka. :)

edytowany 4x, ostatnio: cmd
TurkucPodjadek
TurkucPodjadek
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 4 lata
  • Postów:607
4
cmd napisał(a):

okazało że konieczne jest sprawdzenie jednej listy i drugiej pod kątem wyłonienia permutacji, resztę kodu już miałem w pythonie no to już tylko wystarczyło dorzucić tam taki moduł, od razu sobie pomyślałem o itertools bo co może pójść źle, ale okazało się że zrobiłem taki interes że zyskałem ok godzinę przy pisaniu w pythonie zamiast w c++, a potem kod wykonania zamiast godziny wynosił jakoś ponad tydzień.

Mała uwaga do dyskutujących, to nie wina języka, że czesto jesteście niekompetentni w danej technologii i nie potraficie poprawnie rozwiązać zadania. To że komuś coś działa "za wolno" itp. często wynika tylko z braku wiedzy i doświadczenia i nie zwalałbym od razu wszystkiego na ograniczenia języka. :)

Przecież wiadomo, że większość krytykujących pythona pisze kod doskonały, więc jedynie ograniczenia samego języka ich blokują przed pisaniem świetnego softu. Więc jak śmiesz zarzucać komuś niekompetencje? :-)

Haskell
  • Rejestracja:prawie 10 lat
  • Ostatnio:12 miesięcy
  • Postów:4700
6
Aventus napisał(a):

Ja pozwolę sobie podpiąć się pod pytanie, bo chodziło mi to po głowie od jakiegoś czasu. Mianowicie czemu uważa się że Python jest dobry do prototypowania ale nie do większych, produkcyjnych aplikacji? Co np. przemawia za tym żeby nie stosować Pythona do napisania jakiegoś Web API (podkreślam że większego a nie jakiś prosty CRUD)?

To, że Python nie nadaje się do dużych rzeczy to bajka wymyślona przez wojowników klawiatury, którzy na co dzień klepią nudne crudy w Javie (nie będę przytaczał po nickach, wszyscy wiedzą o kogo chodzi :P :P :P). W rzeczywistości reddit został napisany w Pythonie. W tym języku powstał również Youtube, gra Eve Online czy Dropbox. Osobiście byłem w zespole rozwijającym serwis transakcyjny największego polskiego banku w tym języku.


Zaglądali do kufrów, zaglądali do waliz, nie zajrzeli do d**y - tam miałem socjalizm. Czesław Miłosz
edytowany 1x, ostatnio: Haskell
Zobacz pozostałe 4 komentarze
Haskell
Na githubie jest kod reddita.
NO
@Haskell chyba pierwszy raz tak mocno się z Tobą zgadzam.
Haskell
@nohtyp: chyba pierwszy raz w ogóle :P
NO
pierwszy w dziale technicznym, a tak ogólnie to drugi
MA
Uber jest napisany w wiekszosci w pythonie
NO
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad 5 lat
  • Postów:165
6

Oczywiście w Pythonie można przyjąć postawę defensywną (mypy+adnotacje, rzucanie własnych wyjątków, kontrakty pre/post, układanie kodu w pierwszej kolejności pod testy, no i głównie kodowanie logiki za pomocą klas) i zapewne czasem jest to jedyne wyjście jeśli pracuje się jak małpa, wśród małp na polu minowym. Typowo obawa przed bugami oraz coraz trudniejszym utrzymaniem kodu sprawia, że przypadkowy programista widzi jedynie opcję w której pythona zatopia się w betonie, aby uzyskać twór chociaż trochę zbliżony do javy/c#.

Tego typu motyw ma ten plus, że w pracy można łatwo innym osobom pokazać jak wiele w ogóle umiemy, jak ciężko pracujemy itp. Ale nic poza tym! Wydaje mi się, że największą wadą Pythona jest to, że to nie jest język pod inżyniera stworzony. Tutaj nie ma oszałamiającej wydajności, no i też wspomniane próby betonu zbyt dobrze nie wypadają.

Ze swojej strony chciałbym tylko dodać, że to co jednym nie leży drugim jak najbardziej odpowiada, i tutaj kilka uwag z mojej strony:

Znam kilka osób, które piszą wyjątkowo dobry kod w pythonie i jednocześnie ciekawy zbieg okoliczności: żadna z tych osób nie kończyła studiów IT, natomiast każda z tych osób programowała kilka lat w innych językach + w dużym stopniu jest bardziej humanistą niż ścisłowcem.

Myślę, że w Pythonie bardziej zwraca się postawa, gdy piszesz projekt tak jakbyś chciał stworzyć intrygującą książkę. To jest dobry język, gdy ważysz słowa, gdy skupiasz uwagę na intencjach, gdy zwacasz uwagę na kontekst i odpowiednio kalkulujesz ryzyko związane z poziomem abstrakcji. No i najlepiej jest jak nie ściemniasz i nie traktujesz czytelnika swego kodu jak głupca :-)

Python powinien sprzedawać się nie tylko jako prosty język (w sensie łatwy na start), ale również jako język, który umożliwia pisanie prostego i przejrzystego oprogramowania. To jest ogromna różnica, i łatwo ją zobrazować. Dla przykładu w JavaScript początki są banalne, a im dalej w las to prawdziwa sztuka pisać dobry kod.

Pisanie kodu w pythonie ukształtowało styl mojego kodu. Na początku miałem głównie klasy, potem z czasem rozdrabniałem je na mniejsze, a potem z czasem okazywało się, że najlepsze klasy to takie, które mają jednoznaczną rolę, a ich interejs obejmuje nie więcej niż jedną czy dwie metody. Potem wychodziło, że 90% tych klas lepiej mogę zapisać jako funkcję, funkcję wyższego rzędu, domknięcie, dekorator, kontekst manager czy generator.

Myślę, że z punktu samego pisania kodu Python to udany mix uproszczonego lispa i javy w jednym. Dzięki pythonowi doceniłem programowanie w lisp :-)

Python to język super dla osób, ktore lubią uczyć się poprzez eksplorację. Python ma wiele bibliotek, z różnych obszarów więc poza typowym rzemiosłem można wynieść wiele wiedzy i nowych umiejętności z innych dziedzin.

Life is short, use python :-)

edytowany 2x, ostatnio: nohtyp
Haskell
Świetny post!
NO
Dzięki! Piątka 🖐️.
  • Rejestracja:około 6 lat
  • Ostatnio:ponad rok
1

@yarel

O co chodzi z tymi przeciekającymi abstrakcjami?

Slot wrapper to szczegół implementacyjny. Co więcej, nie powinieneś wiedzieć, że coś takiego jak slot wrapper w ogóle istnieje.

Dlaczego powinna ostatni największy?

Który element w posortowanej liście jest największy? Ostatni. min i max powinny być symetryczne.

Wtedy zamiast

Kopiuj
def clamp(x, lo, hi):
    return min(max(x, lo), hi)

mógłbym wyrazić problem naturalnie

Kopiuj
def clamp(x, lo, hi):
    return min(max(lo, x), hi)
WhiteLightning
  • Rejestracja:prawie 14 lat
  • Ostatnio:około 2 godziny
  • Postów:3183
0

Dla mnie z minusow (uzytykuje specyficznie, jedynie male skrypty narzedziowe). Ze trzeba sie troche wiecej napisac niz w 2.7 zwlaszcza jak chodzi o uzycie print :)

No i do tego pare rzeczy robi sie teraz troche inaczej a sila przyzwyczajenia zostaje :)

edytowany 1x, ostatnio: WhiteLightning
Haskell
  • Rejestracja:prawie 10 lat
  • Ostatnio:12 miesięcy
  • Postów:4700
1
WhiteLightning napisał(a):

Dla mnie z minusow (uzytykuje specyficznie, jedynie male skrypty narzedziowe). Ze trzeba sie troche wiecej napisac niz w 2.7 zwlaszcza jak chodzi o uzycie print :)

Oj tam panie, teraz idzie wszystko ku dobremu, śmigasz sobie f stringach:

Kopiuj
>>> name = "Guido"
>>> age = 63
>>> f"Hello, {name}. You are {age}."
'Hello, Guido. You are 63.'

Zaglądali do kufrów, zaglądali do waliz, nie zajrzeli do d**y - tam miałem socjalizm. Czesław Miłosz
edytowany 1x, ostatnio: Haskell
S5
  • Rejestracja:ponad 5 lat
  • Ostatnio:ponad 5 lat
  • Postów:10
0

Python jest dobry, ale mógłby mieć wydajność Rust lub Swift, a Numba to nakładka i do tego słaba.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.