*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’)
全然同じではないが、文字列の配列へのアドレス渡しの部分は、メモリのアクセス的には同じでしょう。こじつけ過ぎか。
コメント