🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.python
Article #27275

Re: odwolywanie sie w funckji do tej samej funkcji

#27275
From: Łukasz Rekucki
Date: Thu, 28 Jan 2010 16:06
70 lines
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-mail
References: <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