python3 *args: 複数の引数をリストやタプルとして受け取る **kwargs: 複数のキーワード引数を辞書として受け取る

  • *args: 複数の引数をタプルとして受け取る
  • **kwargs: 複数のキーワード引数を辞書として受け取る

ぱっと見違和感アリアリ、というか意味わからん。

func(args[],kwargs{})じゃあ駄目なんですかい?

しかし、よくよく見てみると、*や**はポインターで合ってなくもないのかな?

例えばdef func(*args,**kwargs)

*[]で引数リスト[]の中身を参照、

func(‘name’,’ property’)なら、実引数で渡すのはargsのアドレスなので、*で()の中身’name’と’ property’を取りだしゃ良いわけだ。

次に(**kwargs)

kwargs={‘a’:’kintarou’ ,’b’=’gaki’}

実引数はkwargsのアドレス

*でキー値adic[‘a’,’b’]、**で更にその参照先 {‘a’ : ‘kintarou’ ,’b’ : ‘kuma’} だから、最終的な引数は[‘kintarou’,’kuma’]というわけか。

つまり、辞書{}は**[[]]的な感じと捉えればいいということなのか?

だいぶ近くなってきた気がするが、違うかもしれない。だがなんとなく覚えた(≧∇≦)b

こういうのって全然恥ずかしいこと言っていて、焦ってこのページを消すといういつものパターンだろうwww


お取調べ中

python

main (*args, **kargs)  —-  リストのアドレス, 辞書(≒展開2次元リスト)のアドレス

C言語

int main(int argc, char **argv  —-  argc = 引数の個数、**argv = 文字列配列のアドレス

int main (int argc, char *argv[])↑と同じ *argv[] = 文字列リストのアドレス

文字列は文字のタプル。’str’=(”s,’t’,’r’)

全然同じではないが、文字列の配列へのアドレス渡しの部分は、メモリのアクセス的には同じでしょう。こじつけ過ぎか。

コメント

タイトルとURLをコピーしました