Python:如何忽略函数中的参数?

时间:2017-04-11 19:38:41

标签: python function arguments ignore win32com

我想知道是否有一种方法可以使用参数定义函数,但如果它们不适用,则忽略函数中的一些参数。

例如,在这段代码中,我试图从参考表中的一个独特的伞下找到联系人以发送电子邮件,但该表可能有行,其中联系人可能仅限于一两个人对五。如果是这样,则应忽略第一个/第二个之后的所有其他联系人的参数。

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

3 个答案:

答案 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应用程序中的分隔符。因此,您只需传递包含多个电子邮件的条目,而无需将它们放入字典中的单独列表中,只需执行并打开引号,列出所有电子邮件,然后关闭该特定组的联系人条目中最后一封电子邮件的引号。此表中的大多数电子邮件都不会更改,因此也无需担心。