zoukankan      html  css  js  c++  java
  • 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()
  • 相关阅读:
    poj 3624 (背包入门)
    poj 2175(最消费用最大流消圈法判断是否为最小费用)
    poj 2195 (最小费用最大流)
    poj 3659 (树上的最小支配集)
    Codeforces Beta Round #76 (Div. 1 Only)
    poj 2516(最小费用最大流)
    2013 腾讯马拉松初赛 第0场
    批量重命名,把文件名中的(1)去掉。
    ms sql server 添加列,删除列。
    winform 获取当前程序所在目录。
  • 原文地址:https://www.cnblogs.com/liketimes/p/9999999.html
Copyright © 2011-2022 走看看