大部分功能很容易名称。一般来说,函数名是基于它做什么或结果的类型它产生。

在发电机功能的情况下,然而,其结果可能是一个迭代过一些其它类型的。

def sometype( iterable ):
    for x in iterable:
        yield some_transformation( x )

sometype名感觉误导,因为该函数不返回指定类型的对象。这真是一个迭代过sometype

iter_sometypegen_sometype甲名感觉有点太像匈牙利表示法。然而,它也似乎澄清意图的功能。

进一步说,也有一些特殊情况时,其中一个前缀可能会有所帮助。 这些是典型的例子,其中有些是在可用的 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_前缀有助于澄清发电机功能的名称?还是仅仅是视觉上的混乱?

如果一个前缀是有用的,什么前缀建议你有吗?

另外,如果一个后缀是有帮助的,什么后缀的建议,你呢?

有帮助吗?

解决方案

的Python dicts具有iter*方法。和LXML树木也有iter方法。 读

for node in doc.iter():

似乎熟悉,所以 下面的这个模式,我会考虑命名sometypes sometypes_iter的发电机 这样我可以analgously写,

for item in sometypes_iter():

Python提供一个sorted功能。 下面这个模式,我可能会做动词功能的过去时态:

sometypes_reduced
sometypes_mapped
sometypes_filtered

如果你有足够的这些功能,它可能是有意义做出SomeTypes类,这样的方法名可以缩短为reducemapfilter

如果该功能可以概括为接受或比sometype其它返回类型,那么当然这将是有意义的,从函数名删除sometype,而是选择一个名称,强调它的作用,而不是类型。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top