大多数功能都很容易命名。通常,函数名称取决于它的作用或产生的结果类型。
然而,在生成器函数的情况下,结果可能是对其他类型的可迭代。
def sometype( iterable ):
for x in iterable:
yield some_transformation( x )
这个sometype名字让人觉得有误导性,因为函数不返回指定类型的对象。这真的是一个可迭代的 over sometype。
一个名字喜欢iter_sometype或gen_sometype感觉有点像Hungarian Notation。但是,它似乎也阐明了该功能的意图。
更进一步,有许多更专业的情况,其中前缀可能会有所帮助。这些是典型的例子,其中一些在itertools中可用。但是,我们经常必须编写一个具有一些算法复杂性的版本,使其类似于itertools,但不是完美匹配。
def reduce_sometype( iterable ):
summary = sometype()
for x in iterable:
if some_rule(x):
yield summary
summary= sometype()
summary.update( x )
def map_sometype( iterable ):
for x in iterable:
yield some_complex_mapping( x )
def filter_sometype( iterable ):
for x in iterable:
if some_complex_rule(x):
yield x
iter_, map_, reduce_,前缀是否filter_有助于澄清生成器函数的名称?还是只是视觉上的混乱?
如果前缀有用,您有什么前缀建议?
或者,如果后缀有用,您有什么后缀建议?