Pchełki Python: Fibonacci

Pchełka o ciągu Fibonacciego już była. Ale tam to było w SQL-u, czyli w języku tak przydatnym do obliczeń numerycznych, jak puzon do produkcji twarogu.

Tym razem spróbujemy użyć języka bardziej nadającego się do matematycznych wybryków, czyli Pythona.

Celem dzisiejszej Pchełki nie jest pokazanie, jak wyliczyć ciąg Fibonacciego ani nawet wyjaśnienie czymże ów ciąg jest. Celem dzisiejszej Pchełki jest pokazanie (po raz drugi, bo raz już pokazywałem) jak działa operator yield oraz jak pięknie można skrócić kod używając podstawienia do kilku zmiennych na raz.

Kod jest króciutki:

def fib_gen():
  a, b = 0, 1
  while True:
    yield a
    a, b = b, a + b

fib_gen w powyższym kodzie to jest generator (o generatorach już pisałem kiedyś), czyli taka jakby funkcja, która zamiast – jak to robią tradycyjne funkcje – zwracać wartość i kończyć pracę, za każdym razem, kiedy natrafi na operator yield, zapisuje swój stan i zwraca do procesu ją wywołującego wartość podaną operatorowi yield. Kolejne wywołanie operatora powoduje, że zaczyna on się wykonywać od instrukcji następującej po operatorze yield. Dzięki temu można taki generator wykorzystać w pętli. Tutaj, jak widać, generator jest nieskończony („while True…”), jednak nie oznacza to, że program, używający takiego generatora, się nigdy nie skończy. Oto przykład:

for n in fib_gen():
  if n > 1000:
    break
  print(n)

Powyższy kod wygeneruje na wyjściu wszystkie liczby ciągu Fibonacciego nie większe niż 1000.

Inna bardzo pożyteczna funkcja w Pythonie to możliwość podstawienia kilku wartości do kilku zmiennych za jednym zamachem. Też już o tym wspominałem, ale piszę o tym ponownie, bo jest to prosta a zachwycająca swą funkcjonalnością idea. Zamiana wartości dwóch zmiennych to po prostu x,y=y,x – nie trzeba deklarować tymczasowej zmiennej pomocniczej itd. Miód, malina.

Autor: xpil

Po czterdziestce. Żonaty. Dzieciaty. Komputerowiec. Krwiodawca. Emigrant. Rusofil. Lemofil. Sarkastyczny. Uparty. Mól książkowy. Ateista. Apolityczny. Nie oglądam TV. Uwielbiam matematykę. Walę prosto z mostu. Gram na paru instrumentach. Lubię planszówki. Słucham bluesa, poezji śpiewanej i kapel a’capella. || Kliknij tutaj po więcej szczegółów ||

Dodaj komentarz

Bądź pierwszy!

Powiadom o
avatar
wpDiscuz