2017-04-11 36 views
0

我想知道是否有一种方法来定义一个函数的参数,但如果它们不适用,忽略函数内的一些参数。Python:如何忽略函数中的参数?

例如,在这段代码中,我试图从参考表中找到联系人下的一个独一无二的伞向发送电子邮件,但表中可能有行的联系人可能被限制为可能只有一两个人vs五。如果是这样,那么第一个/第二个联系人之后的所有其他联系人的参数应该被忽略。

reference = [ 
    {'Code': '10', "Group": "There", "Contact": "[email protected]", 
"Contact2": [email protected]", Contact3": "[email protected]"}, 
    {'Code': '11', "Group": "Here", "Contact": "[email protected]", "Contact2": "[email protected]"}, 
    {'Code': '20', "Group": "Everywhere", "Contact": "[email protected]"} 
] 

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

只是不使用参数。有没有法律... –

+0

只是...忽略它?你不必做任何特别的事情就可以忽略一些事情。 – user2357112

+0

我觉得自己正在参加金融咨询展,回答有关如何不买东西的问题。 – user2357112

回答

1

可以使用可变数量的参数,但它们必须最后函数的自变量。

def send_email(file, group, *contacts): 
    # ... 
    newMail.CC = ', '.join(contacts) 

*符号创建一个从结局参数然而,许多你提供一个元组。

就你而言,输入数据的结构很简单,对你的应用程序来说很尴尬。你应该让它看起来更像是这样的:

reference = [ 
    {'Code': '10', "Group": "There", "Contacts": ["[email protected]", "[email protected]", "[email protected]"]}, 
    {'Code': '11', "Group": "Here", "Contacts": ["[email protected]", "[email protected]"]}, 
    {'Code': '20', "Group": "Everywhere", "Contacts": ["[email protected]"]} 
] 

def send_email(contacts): 
    # ... 
    newMail.To = contacts[0] 
    newMail.CC = ', '.join(contacts[1:]) 
+0

我添加了使用循环语句进行迭代的参考表。这是我现在正在做的... –

+0

@Korean_Yeezus你的问题有点难以遵循,但我想我现在拥有它。看看更新。 –

0

您可以使用类似:

def myFunction(*arg): 

这让你有一个可变数量的说法....

0

我肯定超过这个。我最终做的是如下:

import win32com.client 

table = [ 
    {'Code': '10', "Group": "Turn", "Contact": "[email protected]; [email protected]"}, 
    {'Code': '20', "Group": "A9", "Contact": "[email protected]; [email protected]; [email protected]"}, 
    {'Code': '30', "Group": "AppNexus", "Contact": "[email protected]"} 
] 

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应用程序内的分隔符。因此,只需执行并打开报价单,列出所有电子邮件并在该特定组的联系人条目中的最后一封电子邮件上关闭报价,您就可以传递包含多封电子邮件的条目,而无需将其作为单词列表中的单独列表。此表中的大部分电子邮件都不会改变,因此无需担心这一点。