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()