一.函数定义与基本应用#!/usr/bin/env python3
'''
#函数的定义、最基本的应用
def MyFirstFunction():
a = 1+2
print(a)
MyFirstFunction() #函数的执行
First = MyFirstFunction #函数可以指向一个对象
First()
'''
'''
#函数的返回值(return)、我们可以根据返回值来判断程序是否执行成功;如何函数中没有用retrun、返回值为None
#邮件发送实例
#函数中遇到retrun值后,后面的代码就不在执行了
#retrun的作用:1.返回值,2.终端程序
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr
def SendMails():
ret = True
try:
msg = MIMEText('邮件内容', 'plain', 'utf-8')
msg['From'] = formataddr(["杜俊朋",'hnnxdjp@163.com'])
msg['To'] = formataddr(["ooxx",'694484533@qq.com'])
msg['Subject'] = "主题"
server = smtplib.SMTP("smtp.163.com", 25)
server.login("hnnxdjp@163.com", "Mabudai198")
server.sendmail('hnnxdjp@163.com', ['694484533@qq.com',], msg.as_string())
server.quit()
except Exception:
ret = False
return ret
result = SendMails()
#print(result)
if result:
print('邮件发送成功')
else:
print('邮件发送失败')
'''
'''
#函数中遇到retrun值后,后面的代码就不在执行了
def show():
print('a')
if 1==1:
return [1,2,3]
print('b')
ret = show()
'''
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr
#user是形式参数、简称形参
#SendMails('694484533@qq.com') 中传入的参数是实际参数、简称实参
def SendMails(user):
ret = True
try:
msg = MIMEText('邮件内容', 'plain', 'utf-8')
msg['From'] = formataddr(["name",'hello@163.com'])
msg['To'] = formataddr(["ooxx",'asb@qq.com'])
msg['Subject'] = "主题"
server = smtplib.SMTP("smtp.163.com", 25)
server.login("hello@163.com", "password")
server.sendmail('hnnxdjp@163.com', [user,], msg.as_string())
server.quit()
except Exception:
ret = False
return ret
result = SendMails('694484533@qq.com')
#print(result)
if result:
print('邮件发送成功')
else:
print('邮件发送失败')
二.函数的参数
#!/usr/bin/env python3
#函数中定义几个形参、就要传入几个实参,否则会报错
#无参数
def Myfun():
a = 'hello baby'
print(a)
Myfun()
#一个参数
def Myfun2(comm):
a = comm
print(a)
Myfun2('hello baby')
#两个参数
def Myfun3(s1,s2):
a = s1
b = s2
print(a+b)
Myfun3(10,20)
#默认参数,就是给形参设置一个默认值,如果在调用的时候不传参数,就调用默认参数
#注意,默认参数必须放在形参的最后
def Myfun4(a,b=10):
c = a + b
print(c)
Myfun4(10)
Myfun4(10,20)
#指定参数,实参可以不按顺序传入
def Myfun5(a,b):
print(a,b)
Myfun5(b=10,a=20)
#动态参数
#一个 * 号表示 把传入的所有参数转为元组
def Myfun6(*arg):
print(arg,type(arg))
Myfun6(1,2,3)
#两个 * 号表示 把传入的所有参数转为字典
#一个*的参数放在前面,两个*的放在后面,传入实参的时候也要遵循这个规则
def Myfun7(**arg):
print(arg,type(arg))
Myfun7(a=1,b=2,c=3)
#三个 * 号表示可以接受所有类型的元素
def Myfun8(*args,**kwargs):
print(args,type(args))
print(kwargs,type(kwargs))
#传值方法一:
Myfun8(1,2,4,a=1,b=2,c=3)
#传值方法二:当给“*args”传值的元素是列表对象时、必须在对象前面加一个*号;当给“**kwargs”传值的元素值字典对象时、必须在字典对象前加两个*号、
flist = [11,22,33,44]
dics = {'a':'hello','b':'andy','c':'rain','d':'jack'}
Myfun8(*flist,**dics)
#如果不在对应的对象前面加*号,则把传入的两个对象当作“*args”的值、即元组的元素,而“**kwargs”的值则为空、即字典
Myfun8(flist,dics)