Article View: pl.comp.lang.python
Article #27275Re: odwolywanie sie w funckji do tej samej funkcji
From: Łukasz Rekucki
Date: Thu, 28 Jan 2010 16:06
Date: Thu, 28 Jan 2010 16:06
70 lines
4555 bytes
4555 bytes
On Jan 28, 1:07 pm, Slawomir Piasecki <piase...@gmail.com> wrote:
> czesc wszystkim
>
> mam problem z pythonem
>
> w skrocie mam wlasna funkcje w ktorej mam petle i w tejze petli
> odwoluje sie do tej samej funkcji, i mam problem z zmienna nr
<snip>
Kod wrzuciłem sobie na http://gist.github.com/288844 żeby łatwiej było
go przeczytać.
> nie wiem jak to porzadnie wytlumaczyc, wiec sprobuje to wytlumaczyc na
> tym przykladzie
>
> wiec zalozmy po pierwszym wywolaniu zmienna perLoop ma dwie zmienne,
Zakładam, że chodzi ci o listę, która ma dwa elementy (wyrażenie
"zmienna ma dwie zmienne" nie opisuję dobrze sytuacji).
> wiec petla sie wykona dwukrotnie, pierwsze wykonanie oznaczmy A a
> drugie B, teraz wykonujac A znajdujemy ze zmienna nr ma postac, {0:
> 1}, i nowe perLoop ma 3 zmienne ktore wykonujemy i tam zmienna ma
> postac {0:1, 1:x}
Nigdzie pomiędzy liniami 23-34 nie widzę, żeby perLoop się jakkolwiek
zmieniało, więc nie wiem skąd miało by mieć nagle 3 elementy.
> i tu spelniaja sie warunki ktore uniemozliwiaja mi kolejne wywolanie
> funkcji bRun wiec wracam do elementu B
> ale niestety tutaj napotykam problem, gdyz wg. mnie zmienna nr powinna
> miec teraz postac {0:2} natomiast to co otrzymuje to jest {0:2, 1:x}
> jesce zanim znajde czy nowy perLoop ma jakies elementy,
Jeśli przekazałeś słownik, który jest pod zmienną nr, do jakieś
funkcji, to ta funkcja może zmienić ten słownik. Nie może zmienić
twojej zmiennej - nr nadal będzie wskazywać na ten sam słownik, ale to
nie znaczy, że ten słownik się nie zmieni. Mówiąc bardziej fachowo: w
Pythonie zmienne są tylko nazwami wskazującymi na obiekty, a
przekazywanie argumentów odbywa się przez przekazanie kopii wskaźnika,
a nie kopii całego obiektu.
Drugi aspekt, to taki, że argumenty domyślne są tworzone tylko raz.
Łatwo prowadzi to do pułapki, jeśli się tam poda obiekt, który może
zmienić stan. Na przykład:
def dodaj_5(lista=[]):
lista.append(5)
return lista
print dodaj_5() # [5]
print dodaj_5() # [5,5]
> z tego wnioskuje ze zmienna nr nie jest zmienna lokalna, czego
> zupelnie nie rozumiem, gdyz myslalem
> ze zmienne w funkcji sa lokalne, a tu widze na swoim przykladzie ze
> tak nie jest, bo gdyby tak bylo to zmienna nr po wykonaniu A i
> kolejnych wywolaniach bRun powinna miec postac {0:1,1:x,....} ale w
> momencie jak startuje z B powinna miec postac {0:2}
>
> mam nadzieje ze mnie ktos zrozumie i wytlumaczy mi gdzie zle mysle,
> lub gdzie popelnilem blad
> dzieki za wyrozumialosc, pewnie cos tu bedzie nie zrozumiale wiec
> pytajcie moze
> uda mi sie jakos inaczej rozjasnic o co mi chodzi
Twój kod ogólnie jest bardzo chaotyczny, a nazwy zmiennych i funkcji
bardzo mało informujące. Funkcja, która przymuję 8 argumentów, to nie
funkcja tylko zgroza - nie wierze, że pamiętasz ich kolejność bez
patrzenia na definicję. Znalazło by się też kilka innych uwag, jak
np. lst = nr.keys()[-1] <- to wygląda jakbyś zakładał, że da ci to
ostatnio wstawiony klucz albo coś w tym stylu, podczas gdy kolejność
kluczy w słowniku jest *nieustalona*.
Technical Details
Message-ID:
<b7b192b5-0bbd-49a8-8c26-072e830f07c4@k41g2000yqm.googlegroups.com>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news2.icm.edu.pl!news.prz.edu.pl!lublin.pl!uw.edu.pl!newsgate.cistron.nl!newsgate.news.xs4all.nl!194.109.133.84.MISMATCH!newsfeed.xs4all.nl!newsfeed5.news.xs4all.nl!xs4all!feeder.news-service.com!postnews.google.com!k41g2000yqm.googlegroups.com!not-for-mailReferences:
<546bbaa8-dce5-4be1-a4ef-26cd9be394d3@p24g2000yqm.googlegroups.com>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news2.icm.edu.pl!news.prz.edu.pl!lublin.pl!uw.edu.pl!newsgate.cistron.nl!newsgate.news.xs4all.nl!194.109.133.84.MISMATCH!newsfeed.xs4all.nl!newsfeed5.news.xs4all.nl!xs4all!feeder.news-service.com!postnews.google.com!k41g2000yqm.googlegroups.com!not-for-mail From: Łukasz Rekucki <lrekucki@gmail.com> Newsgroups: pl.comp.lang.python Subject: Re: odwolywanie sie w funckji do tej samej funkcji Date: Thu, 28 Jan 2010 08:06:31 -0800 (PST) Organization: http://groups.google.com Lines: 79 Message-ID: <b7b192b5-0bbd-49a8-8c26-072e830f07c4@k41g2000yqm.googlegroups.com> References: <546bbaa8-dce5-4be1-a4ef-26cd9be394d3@p24g2000yqm.googlegroups.com> NNTP-Posting-Host: 212.76.62.207 Mime-Version: 1.0 X-Trace: posting.google.com 1264694791 16471 127.0.0.1 (28 Jan 2010 16:06:31 GMT) X-Complaints-To: groups-abuse@google.com NNTP-Posting-Date: Thu, 28 Jan 2010 16:06:31 +0000 (UTC) Complaints-To: groups-abuse@google.com Injection-Info: k41g2000yqm.googlegroups.com; posting-host=212.76.62.207; posting-account=5fpXZwoAAADF-CUdCuJ-FpYxG8__-wRx User-Agent: G2/1.0 X-HTTP-UserAgent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.0.249.78 Safari/532.5,gzip(gfe),gzip(gfe) Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit