2017-04-11 3 views
0

Je me demande s'il existe un moyen de définir une fonction avec des arguments, mais ignorez certains arguments dans la fonction s'ils ne sont pas applicables. Par exemple, dans ce code, j'essaie de trouver des contacts sous un parapluie unique à partir d'une table de référence pour envoyer un email, mais la table peut avoir des lignes où les contacts peuvent être limités à peut-être une ou deux personnes. cinq. Si c'est le cas, l'argument pour tous les autres contacts suivant le premier/deuxième doit être ignoré.Python: Comment pouvez-vous ignorer un argument dans une fonction?

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

n'utilisez simplement pas les paramètres. Il n'y a pas de loi contre ça ... –

+0

Juste ... l'ignorer? Vous n'avez rien de spécial à faire pour ignorer les choses. – user2357112

+0

J'ai l'impression d'assister à un salon de conseil financier, répondant à des questions sur la façon de ne pas acheter des choses. – user2357112

Répondre

1

Vous pouvez utiliser un nombre variable d'arguments, mais ils doivent être les derniers arguments à la fonction.

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

La notation * crée un tuple des arguments Ending cependant beaucoup que vous fournissez.

Dans votre cas, les données d'entrée sont simplement structurées d'une manière qui pose problème pour votre application. Vous devriez le rendre plus comme ceci:

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

J'ai ajouté la table de référence que j'utilise pour parcourir en utilisant une instruction de boucle. C'est un peu ce que j'ai en ce moment ... –

+0

@Korean_Yeezus votre question était un peu difficile à suivre, mais je pense que je l'ai maintenant. Jetez un oeil à la mise à jour. –

0

vous pouvez utiliser quelque chose comme:

def myFunction(*arg): 

cela vous permettra d'avoir un nombre variable d'arguments ....

0

J'étais certainement trop réfléchir. Ce que je finalement fait est ci-dessous:

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 

Les valeurs du dictionnaire juste besoin d'avoir des points-virgules et les guillemets enroulent autour du total de tous les e-mails.

L'appel,

newMail.To = 

a juste besoin de prendre une valeur de chaîne et Outlook prend un point-virgule comme séparateur dans l'application Outlook réelle. Par conséquent, vous pouvez simplement passer une entrée avec plusieurs emails sans les faire dans une liste séparée dans le dictionnaire en faisant simplement et citation ouverte, énumérant tous les e-mails, et fermant la citation sur le dernier email dans l'entrée de contact pour ce groupe particulier. La plupart des courriels dans cette table ne changeraient pas, donc il n'y a pas besoin de s'inquiéter à ce sujet non plus.