Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python生成器函数名——前缀有用吗?_Python_Functional Programming_Generator_Hungarian Notation - Fatal编程技术网

Python生成器函数名——前缀有用吗?

Python生成器函数名——前缀有用吗?,python,functional-programming,generator,hungarian-notation,Python,Functional Programming,Generator,Hungarian Notation,大多数函数都很容易命名。通常,函数名基于它所做的事情或它产生的结果类型 然而,在生成函数的情况下,结果可能比其他类型的函数更合适 def sometype( iterable ): for x in iterable: yield some_transformation( x ) sometype名称感觉有误导性,因为函数不返回命名类型的对象。这确实是一个iterable oversometype 像iter\u sometype或gen\u sometype这样的名字

大多数函数都很容易命名。通常,函数名基于它所做的事情或它产生的结果类型

然而,在生成函数的情况下,结果可能比其他类型的函数更合适

def sometype( iterable ):
    for x in iterable:
        yield some_transformation( x )
sometype
名称感觉有误导性,因为函数不返回命名类型的对象。这确实是一个iterable over
sometype

iter\u sometype
gen\u sometype
这样的名字感觉有点太像了。然而,它似乎也澄清了功能的意图

更进一步说,还有一些更特殊的情况,其中前缀可能会有所帮助。 这些都是典型的例子,其中一些可以在中找到。然而,我们经常需要编写一个算法复杂的版本 类似于
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
have
iter*
方法。lxml树也有一个
iter
方法。 阅读

似乎很熟悉,所以 遵循这种模式,我会考虑命名某种类型的发生器<代码> 这样我就可以写分析了

for item in sometypes_iter():
Python提供了一个
sorted
函数。 按照这个模式,我可以让动词的功能变成过去时:

sometypes_reduced
sometypes_mapped
sometypes_filtered
如果您有足够的这些函数,那么创建一个
SomeTypes
类可能是有意义的,这样可以将方法名称缩短为
reduce
map
filter


如果函数可以泛化为接受或返回除
sometype
以外的类型,那么当然可以从函数名中删除
sometype
,而选择一个强调其功能的名称,而不是类型。

我认为您有点过于泛化了。。我的意思是,大多数人只需将第二个和第三个函数直接编写为生成器表达式ala
(一些映射(x)表示iterable中的x)
。第一个并没有真正减少任何东西,它更像是一个映射,因为每个
x
@THC4k都有一个新的
sometype
:请想象一下它们更复杂。太复杂,无法轻松放入
itertools
。没有那么复杂以至于它们违反了基本的函数式编程原则。例如,作为一种优化,它们可能涉及大量的初步设置工作。我认为值得注意的是,在Python3中,所有dictionary
iter*
方法都被删除了。例如,
iteriterms()
消失了,类'
items()
方法现在做了它所做的事情——可能表明核心语言开发人员不认为使用前缀是“Pythonic”的——或者可能是这样做是为了让现有代码在默认情况下以可移植的方式完成事情。
sometypes_reduced
sometypes_mapped
sometypes_filtered