python 函数

一、为什么要有函数?没有函数的困扰

  1.组织结构不清晰,可读性差

  2.代码冗余

  3.可扩展性差

二、什么是函数

  具备某一个功能的工具---》》函数事先准备工具-》函数的定义拿来就用,重复使用-》函数的调用

  ps:先定义后调用

三、函数的分类:

  内置函数:len,max;  自定义函数:def

  def 函数名():

    代码块1...

    代码块2...

 定义阶段:定义一个简单的函数

def test():
    print('你好')

在这个阶段要保证语法的正确性,因为此阶段只检查语法格式

调用阶段:

test()

运行结果:

如果test后边不加()

print(test)

则会打印test的内存地址

所以,只要内存地址后边加 () ,就是调用结果

1)函数种类:

第一种:无参函数

def test():
    print('你好')
test()

 

 

 

 

第二种:有参函数

 

def test(name,age=18):      #有参函数可以设置默认值
    print('my name is %s,my age is %s' % (name, age))
test('aaa',12)           #有参函数默认调用默认的值,如果不传参数,调用默认值,如果传参数,默认值被修改

 

第三种:空函数

def test():
    pass

 

空函数主要用于占位,搭思路框架

2)函数的参数分为两种

形参:在定义阶段括号内指定的参数,相当于变量名

实参:在调用阶段括号内传入的值称之为实参,相当于值

返回值:函数可以有多个return,但是只能执行一次return

    执行return函数就立刻结束,并且return后的值当做本次调用结果返回

 

def test(age): 
    if age < 18:
        print('aaaaa')
        return '青春!'
        print('gggggg')
        print('gggggg')
        return '哈哈哈'

result = test(17)
print(result)

运行结果:

return print 区别

def test():
    return 'aaa'
result = test()
def test():
    print('aaa')
test()

return函数结果可以被调用,print 无法被调用

3)psutil模块(系统性能检测)

第三方模块需要安装

 

然后搜索需要安装的模块,install 即可

查看cpu的逻辑核心数,以及实际核心数(False)

import psutil #导入之后就可以用了
res = psutil.cpu_count() #不加false默认是逻辑cpu个数
print(res)

运行结果:

查看cpu的使用率以及每一核心的使用率(True)

import psutil
res = psutil.cpu_percent(1)     #1秒内cpu的使用率
print(res)

运行结果:

查看内存使用率

import psutil
res = psutil.virtual_memory() #内存使用率信息
print(res)

 

运行结果:

 若只取百分比 '%.2f%%',添加%号

import psutil
res = psutil.virtual_memory()#内存使用率信息
print('%.2f%%' % res[2])

运行结果:

查看硬盘使用情况

import psutil
res = psutil.disk_usage('C:')  #硬盘分区的使用率
print(res)

 

运行结果:

若在Linux系统中,也可以把C盘换成/root/等目录进行查看

查看网络流量

import psutil
res = psutil.net_io_counters()#查看网络流量
print(res)

 

运行结果:

分别代表:发送的流量;接收的流量;包的发送;包的接受;错误;错误输出;混入;中途丢失

 练习:监控

项目:监控cpu,内存,硬盘,网卡流量的情况,并报警发邮件

 思想:先搭框架,在逐个填写优化

def cpu_info():
    pass
def mem_info():
    pass
def disk_info():
    pass
def network_info():
    pass
def send_mail():
    pass

 

 

实际服务的搭建:

import psutil    #调用psutil模块
import smtplib    #调用smtplib模块
from email.mime.text import MIMEText    #邮件固定格式
from email.header import Header
def cpu_info():    #cpu函数
    cpu = '%.2f%%' % psutil.cpu_percent(1)    #1秒内cpu使用率,加%
    return cpu

def mem_info():    #内存函数
    mem = psutil.virtual_memory()    #内存使用的整体情况
    mem_per = '%.2f%%' % mem[2]    #内存使用率,加%
    mem_total = str(int(mem[0]/1024/1024)) + 'M'    #总内存
    mem_used = str(int(mem[3]/1024/1024)) + 'M'    #已使用内存
    info = {    #建立键值对,方便调用
        'mem_per' : mem_per,
        'mem_total' : mem_total,
        'mem_used' : mem_used
    }
    return info

def disk_info():    #硬盘函数
    c = psutil.disk_usage('C:')    #C盘使用情况
    d = psutil.disk_usage('D:')    #D盘使用情况
    c_per = '%.2f%%' % c[3]    #C盘使用率,加%
    d_per = '%.2f%%' % d[3]    #D盘使用率,加%
    info = {
        'c_per' : c_per,
        'd_per' : d_per
    }
    return info

def network_info():    #网卡函数
    network = psutil.net_io_counters()    #网卡使用情况
    network_sent = str(int(network[0]/1024)) + 'kb'    #网卡发送的流量
    network_recv = str(int(network[1]/1024)) + 'kb'    #网卡接收的流量
    info = {
        'network_sent' : network_sent,
        'network_recv' : network_recv
    }
    return info

def send_mail(message):    #邮件函数
    sender = 'aaaaaaa@163.com'    #以下所有邮箱设置为自己的即可
    receiver = ['aaaaaaa@163.com']
    subject = '报警'
    username = 'aaaaaaa@163.com'
    password = 'xxxxxx'    #163邮箱在此需要输入的是第三方登录密码
    msg = MIMEText(message, 'plain', 'utf-8')
    msg['Subject'] = Header(subject, 'utf-8')
    msg['From'] = 'aaaaaaa@163.com>'
    msg['To'] = "aaaaaaa@163.com"
    smtp = smtplib.SMTP()
    smtp.connect('smtp.163.com')    #跟所使用的邮箱所匹配
    smtp.login(username, password)
    smtp.sendmail(sender, receiver, msg.as_string())
    smtp.quit()

def main():    #主函数
    cpu = cpu_info()    #调用之前函数
    mem = mem_info()
    disk = disk_info()
    network = network_info()
    msg = '''    #设置一个变量整合所有需要监控的元素
    cpu使用率:%s
    =============
    内存使用率:%s
    总内存:%s
    使用内存:%s
    =============
    C盘使用率:%s
    D盘使用率:%s
    =============
    网卡发送流量:%s
    网卡接收流量:%s
    ''' % (cpu, mem.get('mem_per'), mem.get('mem_total'), mem.get('mem_used'), disk.get('c_per'), disk.get('d_per'), network.get('network_sent'), network.get('network_recv'))
    if int(cpu[:-4]) > 1 or int(mem.get('mem_per')[:-4]) > 20 or int(disk.get('c_per')[:-4]) > 90 or int(disk.get('d_per')[:-4]) > 90:
       #这里设置了cpu,内存,C盘,D盘的报警界限为90%
        send_mail(msg) 
    else: 
        print('没到阈值') 
if __name__ == '__main__':     #其他端无法调用以下
    main()

 

posted @ 2018-11-22 11:27  莱克时光  阅读(251)  评论(0编辑  收藏  举报