返回生成器的函数名称
你怎么给一个返回生成器的函数命名呢?也就是说,这个函数用的是 yield foo
而不是 return foo
。
- 肯定不能叫
getFoo()
,因为它并不是返回一个具体的 Foo 值。 - 也不太适合叫
foos()
,因为我更希望有个容易区分的前缀。 - 也不太适合叫
listFoo()
,因为它并不是返回一个list
。 - 也不太适合叫
iterateFoo()
,因为这个前缀太长了。
你更喜欢怎么命名呢?
更新:
虽然 foos()
在某些情况下可能是个不错的选择,但要注意,方法的名字通常是以动词开头的。动词传达了这是一个方法,而不是一个数据字段,这样有助于提高可读性。如果可以的话,我更希望有个解决方案能让人容易区分方法和数据字段。
5 个回答
13
虽然给变量和函数起个能说明它们作用的名字是个好习惯,但我觉得没必要用匈牙利命名法来表示函数的返回类型。
返回类型最好在注释或者文档字符串里说明,不过我建议用像foos()
、getfoos()
或者get_foos()
这样的名字会更好。
如果你想让人一眼就看出这是个生成器,我建议用iterfoos()
,因为它和Python 2里的字典方法itervalues()
很相似。
要记住,很多以前返回列表的内置函数在Python 3中现在变成了生成器,比如map()
、dict.values()
等等。所以即使你没有把函数叫做generate_foos()
或其他变体,大家也不应该对返回序列的函数是生成器感到惊讶。
20
我觉得可以用 foo
或者 foos
这两个名字。或者,如果想模仿 Python2 中字典的 iteritems
,可以用 iterfoo
这个名字。
1
这里有一些简短的建议:
getFoos()
generateFoos()
yieldFoos()
allFoos()
因为你通常不需要一个生成器来获取所有的foos,所以生成器的具体功能可以让你给它起个更有趣的名字:
getActiveFoos()
getGreenFoos()
getFoosMatchingCriteria(someCriteria)
getFoosOverTheNetworkIfTheDatabaseIsntBeingAJerkface()