迭代的更多pythonic方式

fma*_*ark 3 python refactoring iterator

我正在使用属于商业软件API的模块.好消息是有一个python模块 - 坏消息是它非常unpythonic.

要迭代行,使用以下语法:

cursor = gp.getcursor(table)
row =  cursor.next()
while row:
    #do something with row
    row = cursor.next()
Run Code Online (Sandbox Code Playgroud)

处理这种情况的最pythonic方法是什么?我考虑过创建一个第一类函数/生成器并将调用包装到for循环中:

def cursor_iterator(cursor):
    row =  cursor.next()
    while row:
        yield row
        row = cursor.next()

[...]

cursor = gp.getcursor(table)
for row in cursor_iterator(cursor):
    # do something with row
Run Code Online (Sandbox Code Playgroud)

这是一种改进,但感觉有点笨拙.有更多的pythonic方法吗?我应该在table类型周围创建一个包装类吗?

小智 11

假设Next和next中的一个是拼写错误并且它们都是相同的,那么您可以使用内置iter函数的不太知名的变体:

for row in iter(cursor.next, None):
    <do something>
Run Code Online (Sandbox Code Playgroud)