我在 Python 中使用 MailSnake,它是 MailChimp API 的包装器。
现在,对于我编写的用于提取我们拥有的订阅者列表的函数,我得到了一些奇怪的行为。这是我正在使用的代码:
from mailsnake import MailSnake
from mailsnake.exceptions import *
ms = MailSnake('key here')
def return_members (status, list_id, members = [], start = 0, limit = 15000, done = 0):
temp_list = ms.listMembers(status=status, id=list_id, start=page, limit=limit, since='2000-01-01 01:01:01')
for item in temp_list['data']: # Add latest pulled data to our list
members.append(item)
done = limit + done
if done < temp_list['total']: # Continue if we have yet to
start = start + 1
if limit > (temp_list['total'] - done): # Restrict how many more results we get out if are on the penultimate page
limit = temp_list['total'] - done
print 'Making another API call to get complete list'
return_members(status, list_id, members, page, limit, done)
return members
for id in lists:
unsubs = return_members('subscribed',id)
for person in unsubs:
print person['email']
print 'Finished getting information'
所以这个函数递归运行,直到我们从给定列表中拉出所有成员。
但我注意到的是,变量 unsubs 似乎变得越来越大。当使用不同的列表 ID 调用函数 return_members 时,我得到了迄今为止我调用的每个列表的电子邮件的合并(而不仅仅是一个特定的列表)。
如果我调用 return_members('subscribed', id, []) 明确地给它一个新的数组,那就没问题了。但我不明白为什么我需要这样做,就好像我用不同的列表 ID 调用函数一样,它没有递归运行,并且由于我没有指定成员变量,它默认为 []
我认为这可能是 python 的一个怪癖,或者我只是错过了一些东西!