documentation for the tf.Dataset.data.shuffle function声明如下:
- reshuffle_each_iteration :(可选。)布尔值,如果为true,则表示每次迭代时都应对数据集进行伪随机重组。 (默认为True。)
但是,该函数中的默认值为None,如同一页和the actual code中所述:
def shuffle(self, buffer_size, seed=None, reshuffle_each_iteration=None):
该函数调用ShuffleDataset类,其__init__
函数也sets the same argument to None by default和uses the following logic将参数的默认值设置为True:
if reshuffle_each_iteration is None:
self._reshuffle_each_iteration = True
else:
self._reshuffle_each_iteration = reshuffle_each_iteration
为什么函数和类中的参数默认设置为True?这将使上面的代码块变得多余,并允许仅用self._reshuffle_each_iteration = reshuffle_each_iteration
替换它。
谢谢!
答案 0 :(得分:1)
@mrry here回答:
- 一般来说,我更喜欢None作为默认参数,因为它可以更容易地围绕API编写包装器。如果默认参数设置为True,则包装器很难使用包装函数的默认值,而不会在每个包装层上复制默认值。使用None并在最里层实现默认值更容易维护。
- 当默认参数可以是可变类型(如列表)时,使用None也与必要的样式一致,并且将默认值放在参数列表中是不安全的。