Hejto.pl
Dodaj post

Wpisz coś do wyszukania (minimum 2 znaki)

Python

Kategoria: Technologia

Dla programistów Python

  • 342 członków
  • 45 wpisów

Fanatyk

w Python

43piorunów

**Cython** sprawia, że pisanie rozszerzeń C dla Pythona jest tak proste, jak sam Python!

Język Cython jest nadzbiorem języka Python, który dodatkowo obsługuje wywoływanie funkcji C i deklarowanie typów C na zmiennych i atrybutach klas. Dzięki temu kompilator może wygenerować bardzo wydajny kod C z kodu Cythona. Wygenerowany kod C jest następnie kompilowany przy pomocy jednego z dostępnych kompilatorów C/C++ do zoptymalizowanego modułu, który może zostać zaimportowany i użyty przez program napisany w Pythonie.

W skrócie Cython to Python ale z typami danych C - co pozwala mu być jednym z najlepszych i najprostszych narzędzi do przyspieszania programów napisanych w Pythonie!

Przykładowo w Cythonie napisane są moduły Pythona znane ze swojej szybkości jak:

* uvloop
* asyncpg

Oficjalny poradnik jak zacząć z Cythonem można zaleźć pod adresem: https://cython.readthedocs.io/en/latest/src/tutorial/cython_tutorial.html

  

Pokaż więcej komentarzy (3)

Fanatyk

w Python

11piorunów

Kod na uruchamianie funkcji synchronicznych w Pythonie w asynchroniczny sposób:

># Oczywiście warto używać modułów natywnie asynchronicznych od razu jeśli jest to możliwe: https://github.com/timofurrer/awesome-asyncio
>
>import asyncio
>import urllib.request
>
>def get_page(url):
>‎ ‎ ‎ ‎ with urllib.request.urlopen(url) as f:
>‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ return f.read(100).decode('utf-8') # Zwraca jedynie 100 pierwszych znaków dla zobrazowania jako przykład
>
>async def main():
>‎ ‎ ‎ ‎ urls = ' [https://www.google.pl' for _ in range(10)] # Ta sama strona 10 razy jako przykład - ale tu należy podać swoją listę stron
>‎ ‎ ‎ ‎ tasks =[asyncio.to_thread(get_page, url) for url in urls]
>‎ ‎ ‎ ‎ return await asyncio.gather(*tasks)
>
>results = asyncio.run(main())
>[print(result) for result in results]

Kod działa jedynie z Pythonem 3.9 lub wyższym.
Dla starszych wersji Pythona można użyć staroszkolnego podejścia z ThreadPoolExecutor lub metody run_in_executor dla loop z modułu asyncio.

   

Wirtuoz0piorunów

Brakuje tutaj kolorowania składni :d

Fanatyk1piorunów

@hejto - @rayros mówi, że brakuje tutaj kolorowania składni :thinking_face:.
A brakuje przede wszystkim możliwość umieszczania bloków kodu.

Pokaż więcej komentarzy (2)

Twórca

w Python

2piorunów

Cześć,

potrzebuję pomocy z jedną rzeczą w  . Nie jestem programistą, a robię to właściwie w celach edukacyjnych i utknąłem.

Robię webscraping za pomocą biblioteki BeautifulSoup dla kilkuset stacji Infopasazer, ktore znajdują się na różnych adresach URL. Kwestia dotyczy tego, że czasami strony tych stacji działają, a czasami nie i w momencie, gdy skrypt napotka problem zatrzymuje się i nie robi webscrapingu kolejnych stron. Próbowałem dodać

try:

except (AttributeError, requests.exceptions.Timeout):

pass

natomiast to sprawia, że po prostu nie wywala mi błędów w konsoli, a nie kontynuuje pracę.

Czy ktoś ma pomysł jak można sobie z tym poradzić? Jak będzie trzeba więcej kodu to udostępnię.

Dzięki

Inspirator0piorunów

@kolorado mam nadzieję, że dostaniesz odpowiedź, ja natomiast mam pytanko. Korzystasz z jakiegoś vpna przy scrapowaniu czy yolo bomba na swoim ip? chciałbym zesrapować parę stron, ale boję się, że dostanę bana na ip xD

Twórca2piorunów

@wonsz doszedłem do tego, zamiast dla każdego URL dodać osobny try except zrobiłem jeden na cały kod. Dodałem na szybko brakujące dla każdej podstrony i działa.

@Bolec39 myślałem o tym, ale wydaje mi się, że 450 zapytań na godzinę to nie jest chyba jakaś tragedia, dodatkowo to są osobne mikroserwisy więc może się tam nie obrażą

Gruba ryba1piorunów

@kolorado no bo tak to mniej więcej z tego zdawkowego opisu wynikało że tu będzie problem.

Pokaż więcej komentarzy (4)

Wirtuoz

w Python

2piorunów

 o  i 

początkujący level. - PROŚBA O POMOC w wyjaśnieniu dziwnego działania programu...

Tworzę dla treningu grę tekstową typu MUD, ćwiczę sobie tworzenie klas, funkcji i innych takich.

https://github.com/yourij/MUD_GAME

Etap rozgrzebanego kodu więc prosze o zrozumienie. Chwilowo repozytorium jest publiczne na potrzeby tego posta.

W dużym skrócie (wprowadzenie).

Jesteśmy na planszy 3x3 pola (współrzędne pól x=0, 1 lub 2 i y=0, 1 lub 2). Zaczynamy na środku.

Możemy po planszy chodzić, gadać z NPCami, w karczmie zjeść obiad, uratować księżniczkę itp...

Żeby to zrobić, trzeba pójść do wiedźmy, rozwiązać zadanie, otrzymać od niej klucz i z kluczem udać się na pole, gdzie jest księżniczka, otworzyć kluczem bramkę i koniec...

______PROBLEM______:

Początkowo teksty postaci trzymałem w pliku talking.py ale chciałem zaznajomić się z JSONem i stąd modyfikacja, gdzie wiedźma swoje teksty (częściowo) bierze z pliku talking.json

Od czasu tej modyfikacji pseudo-gra zawiesza się po otrzymaniu poleceń od gracza. Tzn żeby przejść dalej trzeba wcisnąć ekstra enter.

Dla przykładowego karczmarza czy też księżniczki (gdzie teksty są jeszcze po staremu) problem nie występuje.

plik talking.py

przykładowy fragment kodu, który dziwnie działa:

if (u_inp=='T' or u_inp=='t'): # T = gadaj z wiedzmą

for phrase in my_json["phrases"]:

u_inp=input(phrase["witch_gives_apple"]) # przyjmij input drukując tekst mówiony przez wiedżmę

kod, który działa poprawnie:

elif (playerPos == innKeeperPos): # podobny fragment rozmowy z innym NPCem bez udziału JSONa

u_inp=input(inn_hello)

if (u_inp=='P' or u_inp=='p'):

print(inn_dish1)

(screen z gry... nie śmiać się, proszę)

Gruba ryba4piorunów

@yourij Trochę spekuluję, ale pewnie dzieje się tak dlatego, że używasz funkcji `input()` niezbyt zgodnie z przeznaczeniem: argumentem tej funkcji jest prompt czyli tekst, który jest wyświetlany zanim user wpisze z konsoli jakąś wartość. Dlatego potrzebujesz wciskać ENTER - bo zatwierdzasz pusty ciąg znaków.

https://docs.python.org/3/library/functions.html

Built-in FunctionsThe Python interpreter has a number of functions and types built into it that are always available. They are listed here in alphabetical order.,,,, Built-in Functions,,, A, abs(), aiter(), all(), a...Python documentation
Wirtuoz1piorunów

@vrkr ok ma to sens... input jest bo odczytuję czasem T/N i inne odpowiedzi gracza. Sprawdzę kod, czy się wiesza w tekstach bez oczekiwanej odpowiedzi ale fajny trop, dzięki...

Wirtuoz2piorunów

@vrkr dziękuję... działa.
Gdy zmieniałem kod po przeniesieniu dialogów wiedźmy do pliku json pierwszy fragment (gdzie jest input potrzebny) skopiowałem dalej i zapomniałem zamienić w niektórych miejscach u_inp=input(dialog) na print(dialog).

Pokaż więcej komentarzy (3)

Mocarz

w Python

0piorunów

Da się zaimplementować jakoś postinkrementacje w albo jest jakaś gotowa biblioteka z tym? Frustruje mnie pisanie x += 1 zamiast x++.

Zawodowiec0piorunów

Python ma być prosty i czytelny, dzięki takiemu zapisowi możesz użyj tej samej składni do inkrementacji o dowolną liczbę.

https://stackoverflow.com/questions/3654830/why-are-there-no-and-operators-in-python

Why are there no ++ and --​ operators in Python?Why are there no ++ and -- operators in Python?Stack Overflow
Mocarz0piorunów

@trojkat a co trudnego jest w uzyciu x++? Jest to i proste i czytelne i co najwazniejsze szybsze niz x += 1

Pokaż więcej komentarzy (2)

Koneser

w Python

1piorunów

Muszę to z siebie wyrzucić bo wkurwia mnie ten język czasami.

Cały Internet huczy od tego, że do funkcji przekazuje się tylko wartości a nie referencję. A ja po raz kolejny nadziewam się na to, że kiedy przekazuję do swojej metody nazwę innego obiektu to nic nie działa jak powinno i okazuje się, że w sumie zadziałało to jak wskaźnik.

No i to 'del' które nie usunie obiektu dopóki przechowuję go w innych miejscach, no nie wytrzymam.

( ͡° ͜ʖ ͡°)

Jak macie do polecenia jakieś książki które mi to wyjaśnią to poproszę.

Trochę  i trochę 

Debiutant3piorunów

@pansiano Tu masz fajnie opisane jak to działa - https://realpython.com/python-pass-by-reference/

Generalnie gorąco polecam Real Pythona, dużo ciekawych artykułów tam jest.

Co do samego zachowania argumentów funkcji to w JSie jest to tak samo zrobione zdaje się, także to nie czysto Pytonowe zjawisko

Pass by Reference in Python: Background and Best Practices – Real PythonIn this tutorial, you'll explore the concept of passing by reference and learn how it relates to Python's own system for handling function arguments. You'll look at several use cases for passing by reference and learn some best practices for implementing pass-by-reference constructs in Python.Realpython
Zawodowiec1piorunów

> Cały Internet huczy od tego, że do funkcji przekazuje się tylko wartości a nie referencję.

@pansiano A kto tak srogo Cię oszukał?

Pokaż więcej komentarzy (3)

Gwiazdor

w Python

0piorunów

Siema. Proszę podpowiedzcie mi co tutaj jest źle? już nie wiem sam

Debiutant1piorunów

@Jokohama W takim razie oprócz wywalenia 10 linii trzeba jeszcze podawanie najmniejszej liczby dać poza pętlę (tak jak masz w rozwiązaniu ćwiczenia nr 1). W zdjęciu rozwiązanie oparte na Twoim. Powodzenia w nauce :smiley:

Gwiazdor1piorunów

@saqala-bilaabayso Dzięki! Właśnie potem mnie olśniło, że podanie min i max liczby musi być na końcu. Ale uważam, że robienie błędów to forma nauki. Miłej soboty!

Pokaż więcej komentarzy (13)

Gwiazdor

w Python

1piorunów

Hej. Polećcie mi jakieś ćwiczenia do . Uczę się teraz z takiej jednej, ale ćwiczeń na rozdział kilka. A chciałbym sobie utrwalić wszystko tak jak trzeba. Najlepiej z podziałem na rozdziały

Pokaż więcej komentarzy (6)

Kompan

w Python

6piorunów

VS code jak oceniacie, dobra na początek? (wady/zalety, może polecacie coś innego dla początkującego kuca)

Skąd najczęściej czerpaliście wiedze jako samouki (doświadczonych  po studbazie też proszę o wypowiedź może ktoś posiada fajne materialy/linki/tytuły książek)?

Gruba ryba0piorunów

@q4py ja uzywam/uzywalem vima/emacsa, bo nie lubie przelaczac sie miedzy mysza i klawiatura, ale co kto woli.

Debiutant0piorunów

@q4py książka od zera do maszyn lernign python. raz po polsku, raz po angielsku. zależy jaki dzień miał koleś co ją ciągle piszę. jakiś Polak.
https://python.astrotech.io/

Pokaż więcej komentarzy (11)

Gwiazdor

w Python

5piorunów

Pytanie bardzo na poważnie. Jakiego języka programowania zacząć się uczyć, jeśli nie miałem zbyt wiele do czynienia z programowaniem? python czy java? A może co innego?

  

Kompan3piorunów

@Jokohama duże środowisko na początku nauki fajnie wygląda ale nie napisze za Ciebie kodu. Weź sobie ogarnij coś lekkiego typu VS Code czy Sublime Text do Pythona czy webdev wystarczy. Skup się na pisaniu, staraj się zrozumieć jak wszystko uruchomić z linii poleceń niż wszystko klikać w edytorze (bo to z łatwością będziesz mógł zautomatyzować w przyszłości) - niech system będzie twoim IDE :smiley:

Gwiazdor4piorunów

@ar4s_pl wybrałem pythona do nauki. Wydaje mi się bardzo intuicyjny i łatwy. Zobaczymy co z tego będzie;)

Pokaż więcej komentarzy (20)

Gwiazdor

w Python

9piorunów

Dwanaście niezbędnych składników aplikacji webowych

Tym razem nie tylko dla pythonowców.

Utrzymanie i rozwój aplikacji potrafi przysporzyć wielu problemów, zwłaszcza jeśli nie zadbamy o odpowiednią architekturę kodu oraz higienę pracy z kodem. Mnogość przeróżnych podejść do tworzenia aplikacji w dzisiejszych czasach też potrafi doprowadzić do bólu głowy: DDD, TDD, BDD, DRY, WET, KISS i masa innych akronimów prowadzi starcie w naszych głowach, kiedy jeszcze nie wiemy dokładnie w jaką stronę będzie zmierzał projekt.

Poniższy artykuł, a właściwie cała strona, opisuje dwanaście składników aplikacji webowych, które pozwolą nam uniknąć najbardziej fundamentalnych problemów w czasie wdrażania oraz utrzymania oprogramowania. W skrócie są to:

1. Codebase - jedno repozytorium w systemie kontroli wersji, wiele wdrożeń
2. Dependencies - jasno definiuj i izoluj zależności
3. Config - przechowuj konfigurację w środowisku zamiast w kodzie
4. Backing services - traktuj usługi zewnętrzne (np. bazy danych, storage, integracje) jako zasoby
5. Build, release, run - bezwzględnie rozdzielaj od siebie etapy budowania i uruchamiania aplikacji
6. Processes - uruchamiaj aplikację jako jeden lub więcej bezstanowych procesów
7. Port binding - udostępniaj usługi poprzez dowiązanie portów
8. Concurrency - skaluj aplikację w modelu procesowym
9. Disposability - maksymalizuj niezawodność zapewniając szybki start i łagodne zamykanie procesów
10. Dev/prod parity - środowiska lokalne, testowe oraz produkcyjne powinny być do siebie tak podobne, jak tylko możliwe
11. Logs - traktuj logi jako strumienie zdarzeń
12. Admin processes - uruchamiaj zadanie administracyjne jako jednorazowe procesy

Zdaję sobie sprawę, że te opisy są bardzo ogólne, ale jeśli chcecie, mogę przygotować serię, w której dokładniej omówię każdy z punktów. Tymczasem, po więcej szczegółów możecie sięgnąć na stronę The Twelve-Factor App .

Inspirator1piorunów

@sebkek poprosimy! na pewno ktoś skorzysta :slightly_smiling_face:

Gwiazdor

w Python

7piorunów

Jak skonfigurować logowanie zdarzeń w Pythonie?

Temat traktowany po macoszemu przez wielu programistów. Logowanie zdarzeń może jednak dostarczyć nieocenionej pomocy, kiedy zachodzi konieczność prześledzenia zdarzeń na środowiskach produkcyjnych, gdzie nie mamy możliwości debugowania aplikacji.

Autor omawia, wraz z przykładami, najważniejsze zagadnienia związane z modułem logging w Pythonie:

* dobre praktyki
* poziomy logowania
* konfigurację formaterów, handlerów i loggerów

a w międzyczasie opisuje jak to wszystko działa i jak się ze sobą łączy.

Lekturę polecam każdemu, niezależnie od tego, przy jak dużym projekcie pracujecie - logowanie zdarzeń jest przydatne w każdej skali, zwłaszcza jeśli je dobrze skonfigurujemy i używamy go z głową: Logging in Python like a PRO

Gwiazdor

w Python

52piorunów

Czy twój kod jest zbyt skomplikowany?

Poniższy artykuł omawia dwie metryki złożoności kodu, które mają bezpośredni wpływ na naszą zdolność zrozumienia, co dany kod właściwie robi:

Złożoność cyklomatyczna* - określana jest liczbą rozgałęzień i punktów decyzyjnych w funkcji
Złożoność poznawcza* - określana jest liczbą punktów decyzyjnych oraz ilością stopni zagnieżdżenia w funkcji

Pisząc kod, powinno nam zależeć na tym, aby obie te metryki były jak najniższe, dzieki czemu utrzymanie takiego kodu w przyszłości, a także zrozumienie go, będzie dużo prostsze.

Jeśli chcecie poznać te metryki lepiej, polecam krótką lekturę: Is your code too complicated?