day09-10
5.1 发送邮件
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr
msg = MIMEText('正文内容', 'plain', 'utf-8')
msg['From'] = formataddr(["发件人", '发件地址'])
msg['To'] = formataddr(["收件人", '收件地址'])
msg['Subject'] = "主题"
server = smtplib.SMTP("发件方服务器", 25)
server.login("发件邮箱", "密码")
server.sendmail('发件邮箱', ['收件邮箱', ], msg.as_string())
server.quit()
5.2 函数的基本结构
··· 本质:将N行代码拿到别处并给他起个名字,以后通过名字就可以找到这段代码并执行。
··· 场景:
-
代码重复执行。
-
代码量特别多超过一屏,可以选择通过函数进行代码的分割。
# 函数的定义
def 函数名():
# 函数内容
pass
# 函数的执行
函数名()
def func():
pass
func() # 注意:函数如果不被调用,则内部代码永远不会被执行。
5.3 函数的参数
··· 函数的参数 优先位置参数,再关键字参数,实际参数可以是任意类型。
··· 任意类型 任意个数
# 位置传参
def func(a,b): # a为形式参数
pass
func(c,d) # b为实际参数
# 关键字传参
def func(a1, a2):
print(a1, a2)
func(a2=99,a1=2)
# 关键字传参数和位置传参可以混合使用(位置传入的参数 > 关键字参数在后 = 总参数个数)
def func1(a1, a2, a3):
print(a1, a2, a3)
# func(1, 2, a3=9)
# func(1, a2=2, a3=9)
# func(a1=1, a2=2, a3=9)
# func(a1=1, 2,3) # 错误
# 默认参数
def func(a1,a2,a3=9,a4=10):
print(a1,a2,a3,a4)
func(11,22)
func(11,22,10)
func(11,22,10,100)
func(11,22,10,a4=100)
func(11,22,a3=10,a4=100)
func(11,a2=22,a3=10,a4=100)
func(a1=11,a2=22,a3=10,a4=100)
def send_email(to):
template = "要给%s发送邮件" % (to,)
print(template)
user_input = input('请输入角色:')
if user_input == '管理员':
send_email('xxxx@qq.com')
elif user_input == '业务员':
send_email('xxxxo@qq.com')
elif user_input == '老板':
send_email('xoxox@qq.com')
万能参数(打散)
*args
可以接受任意个数的位置参数,并将参数转换成元组。
调用函数无 *
def func(*args):
print(args)
func(1,2,3,4)
调用函数有 *
def func(*args):
print(args)
func(*(1,2,3,4))
func(*[1,2,3,4])
只能用位置传参
def func(*args):
print(args)
# func(1)
# func(1,2)
func(1,2) # args=(1, 2)
func((11,22,33,44,55)) # args=((11,22,33,44,55),)
func(*(11,22,33,44,55)) # args=(11,22,33,44,55)
**kwargs
可以接受任意个数的关键字参数,并将参数转换成字典。
调用函数无 **
def func(**kwargs):
print(kwargs)
func(k1=1,k2="alex")
调用函数有**
def func(**kwargs):
print(kwargs)
func(**{'k1':'v2','k2':'v2'}) # kwargs={'k1':'v2','k2':'v2'}
只能用关键字传参
综合应用:无敌 + 无敌 => 真无敌
def func(*args,**kwargs):
print(args,kwargs)
# func(1,2,3,4,5,k1=2,k5=9,k19=999)
func(*[1,2,3],k1=2,k5=9,k19=999)
func(*[1,2,3],**{'k1':1,'k2':3})
func(111,222,*[1,2,3],k11='alex',**{'k1':1,'k2':3})
# def func(a1,*args,a2): # args 代指所有位置参数 *args 可以代表一个整体的元组作为参数
# print(a1,args,a2)
# func(1,2,3,1,3,a2=5)
# def func(a1,*args,a2=9):
# print(a1,args,a2)
# func(1,2,3,1,3)