🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.programming
Article #217405

Re: Python i argumenty funkcji

#217405
From: Maciek Godek
Date: Wed, 17 Feb 2021 14:10
59 lines
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-mail
References: <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