今天在学习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()函数源码,才发现这个函数接收的参数是这样的。
里面的几个参数,正好都在字典bert_vocab_args里面有定义。因此,函数传参的时候,可以用<**+字典>的方法把字典里面的每一个元素分别传入。