首页 > 代码库 > 函数的定义及其返回值、参数等相关操作

函数的定义及其返回值、参数等相关操作

在学习函数之前,一直遵循:面向过程编程,即:根据业务逻辑从上到下实现功能,其往往用一长段代码来实现指定功能,开发过程中最常见的操作就是粘贴复制,也就是将之前实现的代码块复制到现需功能处,如下:

while True:    if cpu利用率 > 90%:        #发送邮件提醒        连接邮箱服务器        发送邮件        关闭连接        if 硬盘使用空间 > 90%:        #发送邮件提醒        连接邮箱服务器        发送邮件        关闭连接        if 内存占用 > 80%:        #发送邮件提醒        连接邮箱服务器        发送邮件        关闭连接

仔细一看上述代码,if条件语句下的内容可以被提取出来公用,如下:

def 发送邮件(内容)    #发送邮件提醒    连接邮箱服务器    发送邮件    关闭连接    while True:        if cpu利用率 > 90%:        发送邮件(CPU报警)        if 硬盘使用空间 > 90%:        发送邮件(硬盘报警)        if 内存占用 > 80%:

对于上述的两种实现方式,第二次必然比第一次的重用性和可读性要好,其实这就是函数式编程和面向过程编程的区别:

  • 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可
  • 面向对象:对函数进行分类和封装,让开发“更快更好更强...”

函数式编程最重要的是增强代码的重用性和可读性

# 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可# 面向对象:对函数进行分类和封装,让开发“更快更好更强...”# 函数式编程最重要的是增强代码的重用性和可读性# 函数的定义主要有如下要点:## def:表示函数的关键字# 函数名:函数的名称,日后根据函数名调用函数# 函数体:函数中进行一系列的逻辑计算,如:发送邮件、计算出 [11,22,38,888,2]中的最大数等...# 参数:为函数体提供数据# 返回值:当函数执行完毕后,可以给调用者返回数据。import smtplibfrom email.mime.text import MIMETextfrom email.utils import formataddrdef senmail(user):    flag=True    try:        msg = MIMEText(python, plain, utf-8)        msg[From] = formataddr(["嘿嘿",jinlong12800@sina.com])        msg[To] = formataddr(["你好",172560199@qq.com])        msg[Subject] = "欢迎"        server = smtplib.SMTP("smtp.sina.com", 25)        server.login("jinlong12800@sina.com", "password")        server.sendmail(jinlong12800@sina.com, [user], msg.as_string())        server.quit()    except Exception:        flag=False    return flagret=senmail(172560199@qq.com);print(ret)if ret:    print("发送成功!")else:    print("发送失败!")

上述发送邮件的例子中,若定义返回值,则返回对应的值,若未定义,返回None;return后面的语句不再继续执行,return起到中断当前函数的作用;

 

参数

#单个普通参数:def show(arg):    print(arg)show("123")#两个普通参数def show(arg,args1):    print(arg,args1)show(123,456)#默认参数  默认参数必须在最后def show(arg,arg1=234):    print(arg,arg1)show(789)#指定参数,按形参顺序输出,实参顺序随意def show(a1,a2):    print(a1,a2)show(a2=999,a1=888)#动态参数,单个星号接收的参数自动变为元组def show(*args):    print("动态参数一:",args,type(args))show(11,22,33,44)#动态参数二,两个星号,接收的参数只能为类字典格式def show(**kwargs):    print("动态参数二:",kwargs,type(kwargs))show(n1=12,n2=234,n3=333)#双动态参数def show(*args,**kwargs):    print("参数一:",args,type(args))    print("参数二:",kwargs,type(kwargs))show(11,22,33,n1=99,n2=100,n3=111)print("直接传入对应参数值:")l=[11,22,33]d={"n1":99,"n2":100,"n3":111}show(l,d)print("直接传入对应参数的正确方法:")show(*l,**d)#使用动态参数实现字符串格式化s1="{0} is {1}"result=s1.format("alex","sb")print("常规字符串格式化方法:",result)l=["alex","2b"]result1=s1.format(*l)print("单一参数动态字符串格式化方法一:",result1)s2="{name} is {actor}"re=s2.format(name="alex",actor="3b")print("常规字符串格式化方法:",re)d1={"name":"alex","actor":"2b"}re1=s2.format(**d1)print("单一参数动态字符串格式化方法二:",re1)

 

函数的定义及其返回值、参数等相关操作