我想知道是否有一种方法可以使用参数定义函数,但如果它们不适用,则忽略函数中的一些参数。
例如,在这段代码中,我试图从参考表中的一个独特的伞下找到联系人以发送电子邮件,但该表可能有行,其中联系人可能仅限于一两个人对五。如果是这样,则应忽略第一个/第二个之后的所有其他联系人的参数。
reference = [
{'Code': '10', "Group": "There", "Contact": "Me@there.com",
"Contact2": him@there.com", Contact3": "you@there.com"},
{'Code': '11', "Group": "Here", "Contact": "she@here.com", "Contact2": "her@here.com"},
{'Code': '20', "Group": "Everywhere", "Contact": "them@everywhere.com"}
]
import win32com.client
def send_email(contact, contact2, contact3, contact4, contact5):
olMailItem = 0x0
obj = win32com.client.Dispatch("Outlook.Application")
newMail = obj.CreateItem(olMailItem)
newMail.Subject = "Email for %s" %group
newMail.Body = "Message"
newMail.To = contact
newMail.CC = contact2, contact3, contact 4, contact5
#newMail.BCC = "address"
attachment1 = file
newMail.Attachments.Add(attachment1)
#newMail.display()
newMail.Send()
count = 0
for Contact in reference:
send_email(reference['Contact'][count])
count = count + 1
答案 0 :(得分:2)
您可以使用可变数量的参数,但它们必须是函数的 last 参数。
def send_email(file, group, *contacts):
# ...
newMail.CC = ', '.join(contacts)
*
表示法从结尾参数创建一个元组,但是你提供的很多。
在您的情况下,输入数据的结构简单,对您的应用程序来说很尴尬。你应该让它看起来更像这样:
reference = [
{'Code': '10', "Group": "There", "Contacts": ["Me@there.com", "him@there.com", "you@there.com"]},
{'Code': '11', "Group": "Here", "Contacts": ["she@here.com", "her@here.com"]},
{'Code': '20', "Group": "Everywhere", "Contacts": ["them@everywhere.com"]}
]
def send_email(contacts):
# ...
newMail.To = contacts[0]
newMail.CC = ', '.join(contacts[1:])
答案 1 :(得分:0)
你可以使用类似的东西:
def myFunction(*arg):
这允许你有一个可变数量的参数......
答案 2 :(得分:0)
我当然是在想这个。我最终做的是在下面:
import win32com.client
table = [
{'Code': '10', "Group": "Turn", "Contact": "A@there.com; B@there.com"},
{'Code': '20', "Group": "A9", "Contact": "Z@here.com; Y@here.com; H@here.com"},
{'Code': '30', "Group": "AppNexus", "Contact": "N@OverThere.com"}
]
def send_email(group, file, contact):
olMailItem = 0x0
obj = win32com.client.Dispatch("Outlook.Application")
newMail = obj.CreateItem(olMailItem)
newMail.Subject = "Email for %s" %group
newMail.Body = "Message"
newMail.To = contact
#newMail.CC =
#newMail.BCC = "address"
attachment1 = file
newMail.Attachments.Add(attachment1)
#newMail.display()
newMail.Send()
count = 0
for Contact in table:
info = get_info(table['Code'][count])
file = make_file(table['Code'][count], info)
send_email(file, table['Code'][count], table['Group'], table['Contact'][count])
count = count + 1
字典值只需要分号,并使引号环绕所有电子邮件的总数。
电话,
newMail.To =
只需要获取一个字符串值,Outlook将分号作为实际Outlook应用程序中的分隔符。因此,您只需传递包含多个电子邮件的条目,而无需将它们放入字典中的单独列表中,只需执行并打开引号,列出所有电子邮件,然后关闭该特定组的联系人条目中最后一封电子邮件的引号。此表中的大多数电子邮件都不会更改,因此也无需担心。