函数的基本定义
#coding:utf-8 #定义函数 def mail(): print("hello world") #调用,两种都可以 mail() f = mail f()
#函数执行顺序(遇到return关键字,则中断函数,不在继续执行函数内容了) def show(): print("a") return [11,22] print("b") ret = show() print(ret) #不再输出"b" # a # [11, 22]
#函数返回值 def mail(): import smtplib from email.mime.text import MIMEText from email.header import Header # 第三方 SMTP 服务 mail_host = "smtp.qiye.163.com" # 设置服务器 mail_user = "sdf234@sdfn.com" # 用户名 mail_pass = "sdfoo2349" # 口令 sender = 'sdf234@sdfn.com' # 发送 receivers = ['23497124@qq.com'] # 接收 # 三个参数:第一个为文本内容,第二个 plain 设置文本格式,第三个 utf-8 设置编码 message = MIMEText('Python 邮件发送测试...', 'plain', 'utf-8') message['From'] = Header("测试接收", 'utf-8') message['To'] = Header("测试发送", 'utf-8') subject = 'Python SMTP 邮件测试' message['Subject'] = Header(subject, 'utf-8') try: smtpObj = smtplib.SMTP() smtpObj.connect(mail_host,25) smtpObj.login(mail_user, mail_pass) smtpObj.sendmail(sender, receivers, message.as_string()) return "邮件发送成功" #函数返回值 except smtplib.SMTPException: return "Error:无法发送邮件" #函数返回值 #执行函数(并获取返回值,如果函数没有定义返回值则返回"None") ret = mail() print(ret)
#函数的普通参数,形参 def mail(user): #给多个用户发送邮件 import smtplib from email.mime.text import MIMEText from email.header import Header # 第三方 SMTP 服务 mail_host = "smtp.qiye.163.com" # 设置服务器 mail_user = "qyyx_luo77256" # 用户名 mail_pass = "Passwd123456..." # 口令 sender = 'qyyx_luo77256@weasman.com' # 发送 receivers = [user,] #user为传递进来的参数(收件人) # 三个参数:第一个为文本内容,第二个 plain 设置文本格式,第三个 utf-8 设置编码 message = MIMEText('Python 邮件发送测试...', 'plain', 'utf-8') message['From'] = Header("测试接收", 'utf-8') message['To'] = Header("测试发送", 'utf-8') subject = 'Python SMTP 邮件测试' message['Subject'] = Header(subject, 'utf-8') try: smtpObj = smtplib.SMTP() smtpObj.connect(mail_host,25) smtpObj.login(mail_user, mail_pass) smtpObj.sendmail(sender, receivers, message.as_string()) return "邮件发送成功" except smtplib.SMTPException: return "Error:无法发送邮件" #接收邮件列表 user_list = ['7292498754@qq.com','12359843@qq.com'] #循环发送 for n in user_list: ret = mail(n) # 调用函数时给函数定义的形参(user)传递一个值 print(ret)
#函数的默认参数 #无参数: #show(): -->show() #一个参数:def show(arg): print(arg)show("ssss") #两个参数:def show(arg,bbb): print(arg)show("ssss","dfs") #默认参数(形参加个"="号就是默认参数。默认参数一定要放在参数的后面)def show(a1,a2=999): print(a1,a2)#show(111) #调用时只传递了一个参数show(111,888) #调用时给默认参数传参,会把默认参数覆盖 #指定参数 def show(a1,a2): print(a1,a2) show(a2=111,a1=888) #调用时候,直接指定参数给形参传递值
#函数的动态参数 def show(*arg): #*arg表示传入一个元组 print(arg) print(type(arg)) show(1,2,3,"age") def show(**arg): #**arg表示传入一个字典(格式为:key=value) print(arg) print(type(arg)) show(n1=78,n2="name") def show(*args,**kwargs): #同时传入元组和字典数据,(*args表示元组,**kwargs表示字典) print(args,kwargs) print(type(args),type(kwargs)) show(1,2,3,"你好",n1=78,n2="name") #它自动会把元组和字典数据分离传入:(1, 2, 3, '你好') {'n2': 'name', 'n1': 78} def show(*args,**kwargs): #同时传入元组和字典变量 print(args,kwargs) print(type(args),type(kwargs)) tuple_data = (1,2,3,4,"你好") dict_data = {"n1":"name","n2":"age"} #show(tuple_data,dict_data) #如果以上这样直接传入元组和字典的变量,则结果为传入了一个元组类型:((1, 2, 3, 4, '你好'), {'n1': 'name', 'n2': 'age'}) show(*tuple_data,**dict_data) #给传入的元组变量加*,然后给传入的字典变量加**就能分别传入对应的数据了
#使用动态参数实现字符串的格式化 s1 = "{0} is {1}" li = ['you','sb'] #result = s1.format('you','sb') result = s1.format(*li) #传入列表内容,对应格式化的字符串 print(result) s1 = "{name} is {show}" result = s1.format(name="you",show="sb") #传入列表内容,对应格式化的字符串 print(result)
#lambda 表达式(lambda会自动加返回值) #一般函数的写法 def func(a): b = a + 1 return b result = func(4) print(result)
#lambda表达的写法 func = lambda a:a+1 #创建形参a。函数内容a+1,并把a的结果return result = func(4) print(result)