函数式编程

while True:

   if cpu利用率 > 90%:

               #发送邮件

                1、连接邮箱服务器

                2、发送邮件

                3、关闭连接

   if  内存 >50%:

               #发送邮件

                1、连接邮箱服务器

                2、发送邮件

                3、关闭连接

上面发送邮件过程都是重复的所以,没有必要都写一次。而且这样做也浪费内存。可以改成下面的方式

#定义函数def开头,当python解释器遇到def 开头的就知道是函数了就会把def后面的数据全部放到内存中并不会执行,只有调用它的时候才会执行

def 发送邮件:

     1、连接邮箱服务器

     2、发送邮件

     3、关闭连接

while True:

     if cpu利用率 > 90%:
            发送邮件()

     if  内存 >50%:

            发送邮件()#执行方法

函数返回值:

def  abc():

        .....

        return "123"#返回的值可以是任何东西

#调用函数,并且接受函数返回来的值。这样就可以根据不同的值来进行下一步操作

ret=abc()

普通参数:

#p,形式参数

def abc(p):

      print p

      return "成功"

#实际参数

ret=abc("aaaa”)

指定参数:

def abc(名字,地址,邮箱):

       print 名字,地址,邮箱

#按照这样写实参的数值和形参要一致,否则值就不对了

ret=abc(abc,bj,123@qq.com)

#指定参数,这样传递的时候实参就不需要按照顺序来写了

ret=abc(邮箱=123@qq.com,地址=bj,名字=abc)

默认参数:

#这样在不写名字的时候也会获取到一个默认值MM,默认值的参数一定要放在末尾

def abc(名字="mm",地址,邮箱):

       print 名字,地址,邮箱

动态参数一:

#name的类型是一个元组,等同于name=()

def abc(*name):

      print name

#可以传递所有类型

abc(123,"name",[123,222],{"aa":"bb"})

动态参数二:

#name的类型是一个元组,等同于name={}

def abc(**name):

      print name

abc(a1=11,a2=22)

打印结果:

{"a1":"11","a2":"22"}

动态参数三:

#1个*和2个**同时存在的时候1个*必须在2个**的前面

def abc(*con,**name):

      print con,name

#这样就可以全部接受了,k1=11这样格式*num是无法接受的,只有**name可以

abc(22,33,44,k1=11,k2=22)

一般书写"*"方法,*ares,**kwargs

定义可一个函数

def f1(*argv):
   print argv

li=range(5)

f1(li)#注意看这里整个列表是元组中的一个元素
([0, 1, 2, 3, 4],)

f1(*li)#如果这样传递参数效果就不一样了
(0, 1, 2, 3, 4)

字典也可以这么玩

def f1(**kwargv):
   print kwargv

dic={"k1":11}

f1(dic)#这样执行是会报错的,以为它会当dic是一个值并不是一个k/v形式

f1(**dic)#这样就可以传递成功

全局变量和局部变量

#全局变量,局部变量遵循规则要大写,局部变量小写

NAME=123

def a1():

     #局部变量,局部变量就是给a1局部程序用的,全局变量大家都可以使用,但是更改需要定义关键字global

      a1=111

      global NAME

      NAME=2222#这样就可以更改全局变量

原文地址:https://www.cnblogs.com/menkeyi/p/6669411.html