Python的发电机功能的名称 - 是一个前缀有帮助吗? [关闭]
-
26-09-2019 - |
题
大部分功能很容易名称。一般来说,函数名是基于它做什么或结果的类型它产生。
在发电机功能的情况下,然而,其结果可能是一个迭代过一些其它类型的。
def sometype( iterable ):
for x in iterable:
yield some_transformation( x )
在sometype
名感觉误导,因为该函数不返回指定类型的对象。这真是一个迭代过sometype
。
像iter_sometype
或gen_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
类,这样的方法名可以缩短为reduce
,map
和filter
。
如果该功能可以概括为接受或比sometype
其它返回类型,那么当然这将是有意义的,从函数名删除sometype
,而是选择一个名称,强调它的作用,而不是类型。
不隶属于 StackOverflow