Python函数和列表,它们需要在哪里?

2024-03-28 14:42:10 发布

您现在位置:Python中文网/ 问答频道 /正文

对Python来说相当陌生,所以这可能是基本的,但是非常感谢您的帮助。我正在使用Python调用我的Tableau服务器API,并尝试遍历组中的每个用户,构建一个电子邮件地址列表,目标是通过电子邮件向每个组发送他们视图的pdf。我已经在所有函数之外定义了我所需要的列表(我想这是指全局的吗?)。在下面的代码示例中,我将“testuser”附加到列表中,因为我不希望前面的循环最初起作用。我只是想确定数据将附加到全局定义的列表中。它没有。当我在main函数中打印列表时,它是空的。你知道吗

xmlns = {'t': 'http://tableau.com/api'}    
groupnames = ['Data Source Publisher']
workbooks = []
usernames = []

def get_email_address(groupname):
    groups = server_response.findall('.//t:group', namespaces=xmlns)
    for group in groups:
        if group.get('name') == groupname:
            usernames.append(group.get('id'))

    usernames.append('2002327')
    return usernames;

def main():
    print(usernames)

if __name__ == '__main__':
    main()

我的主要故障是什么?你知道吗


Tags: 函数name列表getif定义main电子邮件
1条回答
网友
1楼 · 发布于 2024-03-28 14:42:10

问题不是你没有更新一个全局变量。问题是在代码中的任何时候都不调用get_email_address。你知道吗

  1. 我不能运行groups = server_response.findall('.//t:group', namespaces=xmlns),所以我必须猜测它返回的结构
  2. 我用一个参数调用了get_email_address,我知道该参数无法在if group.get('name') == groupname:中找到匹配项,因此在该检查之后,默认的append仍然会触发。你知道吗

这正是您所期望的:

xmlns = {'t': 'http://tableau.com/api'}    
groupnames = ['Data Source Publisher']
workbooks = []
usernames = []

def get_email_address(groupname):
    groups = [{'name': 'abc', 'id': '789'}, {'name': '123', 'id': '678'}] # I assume this is representative
    for group in groups:
        if group.get('name') == groupname:
            usernames.append(group.get('id'))

    usernames.append('2002327')
    return usernames

def main():
    get_email_address('something') # Call the function
    print(usernames)

if __name__ == '__main__':
    main()

如果将get_email_address('something')更改为get_email_address('abc'),则会注意到打印的全局列表包含两个项(因为它将在groups中找到匹配项)。你知道吗

相关问题 更多 >