繁体   English   中英

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

[英]Python: How can you ignore an argument in a function?

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

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

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

您可以使用可变数量的参数,但是它们必须是函数的最后一个参数。

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:])

您可以使用类似:

def myFunction(*arg):

这使您可以使用可变数量的参数。

我绝对是在想这个。 我最终要做的是:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM