函数的基本定义

#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 = "luolin.luo@wearetechman.com"    # 用户名
    mail_pass = "pwd@4735"                       # 口令

    sender = 'luolin.luo@wearetechman.com'  # 发送
    receivers = ['729414559@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 = "luolin.luo@wearetechman.com"    # 用户名
    mail_pass = "pwd@4735"                       # 口令

    sender = 'luolin.luo@wearetechman.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 = ['729414559@qq.com','316374573@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)
原文地址:https://www.cnblogs.com/l729414559/p/6823562.html