python函数的传参(bert_vocab_from_dataset),函数括号里面含有**是什么意思?

今天在学习tensorflow的时候,突然发现一个传参的妙用,惊掉了我的2米长的大下巴。

上代码

bert_vocab_args = dict(
    vocab_size = 8000,
    reserved_tokens = reserved_tokens,
    bert_tokenizer_params = bert_tokenizer_params,
    learn_params = {},
)

pt_vocab = bert_vocab.bert_vocab_from_dataset(
    train_pt.batch(1000).prefetch(2),
    **bert_vocab_args
)

首先定义了一个字典,名叫bert_vocab_args,然后里面有几个参数,分别是"vocab_size","reserved_tokens","bert_tokenizer_params,"learn_params",刚开始我就很疑惑,为什么起这么几个名字。

接下来定义pt_vocab的时候,在参数位置上面传了一个**bert_vocab_args,格式就是:**字典。

后来我点开了bert_vocab.bert_vocab_from_dataset()函数源码,才发现这个函数接收的参数是这样的。

python函数的传参(bert_vocab_from_dataset),函数括号里面含有**是什么意思?_第1张图片

 里面的几个参数,正好都在字典bert_vocab_args里面有定义。因此,函数传参的时候,可以用<**+字典>的方法把字典里面的每一个元素分别传入。

你可能感兴趣的:(python,bert,开发语言)