Article View: pl.comp.programming
Article #217405Re: Python i argumenty funkcji
From: Maciek Godek
Date: Wed, 17 Feb 2021 14:10
Date: Wed, 17 Feb 2021 14:10
59 lines
3570 bytes
3570 bytes
środa, 17 lutego 2021 o 14:51:13 UTC+1 Roman Tyczka napisał(a): > W dniu 17.02.2021 o 12:40, Maciek Godek pisze: > >> I teraz dlaczego w wywołaniu metody __init__ parametry są przekazane w > >> formie jak w definicji czyli *args, **kwargs? W przykładach jakie > >> widziałem, a także w wywołaniu _getParameter() są już podane zwyczajnie, > >> czyli: args, kwargs. > >> Skąd w tym pierwszym wywołaniu i dlaczego są użyte gwiazdki (czyli w > >> formie takiej jak w definicji metody/funkcji)? > > > > Ściśle rzecz biorąc, dlatego, że projektant funkcji _getParameter() tak sobie postanowił. > > > > Argumenty w Pythonie są pomyślane w taki sposób, że jak masz tę gwiazdkę, to ona przechwyci do listy dowolnie wiele argumentów. Na przykład: > > > > def list(*x): > > return x > > > > sprawi, że jak wywołamy > > > > list(1,2,3) > > > > to w wyniku dostaniemy listę > > > > (1,2,3) > > > > Tak to wygląda w kontekście definicji. Natomiast w kontekście użycia rola gwiazdki jest analogiczna, Załóżmy, że mamy taką funkcję: > > > > def f(x, y, z): > > return [x, y, z] > > > > i do tego mamy listę L=(1,2,3) > > > > Moglibyśmy sobie wywołać funkcję f w taki sposób: > > > > f(L[0], L[1], L[2]) > > > > ale jeśli zamiast tego napiszemy > > > > f(*L) > > > > to efekt będzie taki sam. > A czy nie możemy po prostu zawołać: > > f(L) > > ? > Jak napiszesz f(L), to wywołasz f z jednym argumentem, mianowicie z listą (1,2,3). (w powyższym przykładzie to będzie błąd, bo funkcja f spodziewa się trzech argumentów) Chodzi o to, że operator * przy wywołaniu funkcji rozwija listę argumentów w miejscu wywołania. Czyli jeżeli L ma 3 elementy, to f(*L) jest równoważne f(L[0], L[1], L[2]), jeżeli L ma 4 elementy, to f(*L) jest równoważne f(L[0], L[1], L[2], L[3]) i tak dalej. > ps. skąd się wzięła powszechnie używana nazwa kwargs? kv to bym jeszcze > jako key-value rozszyfrował, ale kw? od "keyword arguments"
Technical Details
Message-ID:
<e9903b6d-24a1-4a36-bcb1-d46ac41624d6n@googlegroups.com>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!3.eu.feeder.erje.net!feeder.erje.net!weretis.net!feeder8.news.weretis.net!newsreader4.netcologne.de!news.netcologne.de!peer01.ams1!peer.ams1.xlned.com!news.xlned.com!peer03.iad!feed-me.highwinds-media.com!news.highwinds-media.com!news-out.google.com!nntp.google.com!postnews.google.com!google-groups.googlegroups.com!not-for-mailReferences:
<602ce57f$0$523$65785112@news.neostrada.pl> <3044c97a-cd3b-4607-a630-5bfbc45d0e25n@googlegroups.com> <602d1f3e$0$537$65785112@news.neostrada.pl>Show Full Headers
Complete Article Headers
X-Received: by 2002:a37:4483:: with SMTP id r125mr25729002qka.387.1613571026192; Wed, 17 Feb 2021 06:10:26 -0800 (PST) X-Received: by 2002:a37:9183:: with SMTP id t125mr25031904qkd.262.1613571025607; Wed, 17 Feb 2021 06:10:25 -0800 (PST) Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!3.eu.feeder.erje.net!feeder.erje.net!weretis.net!feeder8.news.weretis.net!newsreader4.netcologne.de!news.netcologne.de!peer01.ams1!peer.ams1.xlned.com!news.xlned.com!peer03.iad!feed-me.highwinds-media.com!news.highwinds-media.com!news-out.google.com!nntp.google.com!postnews.google.com!google-groups.googlegroups.com!not-for-mail Newsgroups: pl.comp.programming Date: Wed, 17 Feb 2021 06:10:25 -0800 (PST) In-Reply-To: <602d1f3e$0$537$65785112@news.neostrada.pl> Complaints-To: groups-abuse@google.com Injection-Info: google-groups.googlegroups.com; posting-host=213.192.68.153; posting-account=f7iIKQoAAAAkDKpUafc-4IXhmRAzdB5r NNTP-Posting-Host: 213.192.68.153 References: <602ce57f$0$523$65785112@news.neostrada.pl> <3044c97a-cd3b-4607-a630-5bfbc45d0e25n@googlegroups.com> <602d1f3e$0$537$65785112@news.neostrada.pl> User-Agent: G2/1.0 MIME-Version: 1.0 Message-ID: <e9903b6d-24a1-4a36-bcb1-d46ac41624d6n@googlegroups.com> Subject: Re: Python i argumenty funkcji From: Maciek Godek <godek.maciek@gmail.com> Injection-Date: Wed, 17 Feb 2021 14:10:26 +0000 X-Received-Bytes: 3849 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit