大多数功能都很容易命名。通常,函数名称取决于它的作用或产生的结果类型。
然而,在生成器函数的情况下,结果可能是对其他类型的可迭代。
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_
有助于澄清生成器函数的名称?还是只是视觉上的混乱?
如果前缀有用,您有什么前缀建议?
或者,如果后缀有用,您有什么后缀建议?