• 末学者笔记--Python函数一玄


    Python函数一玄

    函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

    函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。

     

    一.定义一个函数                                                                       

    1.规则

    你可以定义一个由自己想要功能的函数,以下是简单的规则:

    • 函数代码块以def关键词开头,后接函数标识符名称和圆括号()
    • 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
    • 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
    • 函数内容以冒号起始,并且缩进。
    • return [表达式]结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。

    2.函数两个阶段:定义阶段和调用阶段

    1定义阶段

    def test():
        print(100)

    #内存地址
    def test():
        print(100)
    print(test)    #打印内存地址

    》》

    <function test at 0x003FB660>

    》》

     

    (2)调用阶段,

    函数的内存地址加上()就是调用
    # test()

     

    二.实参和形参                                                                             

    #定义函数括号里的一般叫形参

    #调用时括号里传递的参数一般叫实参

    #比如:

    def students(age):

        print('my age is %s' % age)

    students(18)

     

    age就是形参,18就是实参

     

    def sum(x,y):    #x,y为形参

        print(x)

        print(y)

     

    sum(10,20)    #10,20代表实参

     

    三.参数的具体应用                                                                      

    1、位置参数:

    按照从左到右的顺序定义的参数

            位置形参:必选参数

            位置实参:按照位置给形参传值

    def foo(x,y):

        print(x,y)

    foo(1,2)

    #结果:1,2

          

    2、关键字参数:

    按照key=value的形式定义的实参

            无需按照位置为形参传值

            注意的问题:

                    1). 关键字实参必须在位置实参右面

                    2). 对同一个形参不能重复传值

    def foo(x,y):

        print(x,y)

    foo(y=2,x=1)

    结果:1,2

    3、默认参数:

    形参在定义时就已经为其赋值

            可以传值也可以不传值,经常需要变得参数定义成位置形参,变化较小的参数定义成默认参数(形参)

            注意的问题:

                    1.) 只在定义时赋值一次

                    2.) 默认参数的定义应该在位置形参右面

                    3.) 默认参数通常应该定义成不可变类型

    def foo(x,y=2):

        print(x,y)

    foo(1)

    #结果:1,2

    foo(1,3)

    #结果:1,3

     

    4、可变长参数:

            可变长指的是实参值的个数不固定

            而实参有按位置和按关键字两种形式定义,针对这两种形式的可变长,形参对应有两种解决方案来完整地存放它们,分别是*argsh**kwargs

     

    #*args:传递的参数会变成元组

    def foo(x,y,*args):

        print(x,y,args)

    foo(1,2,3)

    #结果:1 2 (3,)

    #**kwargs:传递的参数会变成字典

     

    def foo(x,y,**kwargs):

        print(x,y,kwargs)

    foo(1,2,a=3,b=4)

    #结果:1 2 {'a': 3, 'b': 4}

     

    四.return 语句                                                              

    return语句[表达式]退出函数,选择性地向调用方返回一个表达式。不带参数值的return语句返回None

    # 可写函数说明

    def add_sum(arg1, arg2):

        # 返回2个参数的和."

        total = arg1 + arg2

        print("函数内 : ", total)

    return total

     

    # 调用sum函数

    total = add_sum(10, 20)

     

    五.函数的特性                                                                              

    #函数可以被引用

    def f1():

        print('this is f1')

        return 'ok'

    res = f1()print(res)

     

    #函数可以当参数传递

    def foo(a):

        print(a)def bar(b):

        print(b)

     

    bar(foo('你好'))

     

    #嵌套函数

    def f1():

        def f2():

            def f3():

                print('this is f3')

            f3()

        f2()

    f1()

    六.监测内存,cpu,磁盘,并设置报警邮件                                 

    1. 监控系统资源(cpu,硬盘,内存),下载psutil软件

    import psutil

    内存使用情况
    mem = psutil.virtual_memory()
    print(mem)
    print(mem[1])  #默认为列表格式,可截取下标为1的值

    cpu使用率

    cpu = psutil.cpu_percent(1)  #一秒内cpu的占用率
    print(cpu)


    硬盘使用情况
    disk = psutil.disk_usage('C:')   #查看c盘使用情况
    print(disk)


    定义函数本着一个原则:尽量一个动作一个函数

    2.如果系统资源超出阈值就发送报警邮件 ,下载yagmail软件

     

    import yagmail

     

    连接邮箱服务器
    yag = yagmail.SMTP(user='123567567@qq.com', password='——', host='smtp.qq.com')   #密码password为授权码
    发送邮件
    yag.send(to=['3562543267@qq.com','123567567@qq.com'],subject='这是测试邮件标题', contents=['这是测试邮件的内容',r'C:UsersAdministrator.USER-20190512NQDesktopsed.txt'])   #可加附件
    断开连接
    yag.close()

     

    3.完整代码:

     

    import psutil
    import yagmail
    import time
    def mem_check():
    mem=psutil.virtual_memory()
    return (mem[2]) #38%

    def cpu_check():
    cpu=psutil.cpu_percent(1) #一秒内cpu的占用率
    return (cpu) #30%

    def disk_check():
    disk = psutil.disk_usage('C:')
    return (disk[3]) #56.9

    def send_mail(title,message):
    yag=yagmail.SMTP(user='1669034212@qq.com',password='xxxxxxxx',host='smtp.qq.com')
    yag.send(to='523525754@qq.com',subject=title,contents=message)
    yag.close()

    def main():
    disk_check()
    mem_check()
    cpu_check()
    messages='内存占用率:%s%%;cpu占用率:%s%%;C盘占用率:%s%%' % (mem_check(),cpu_check(),disk_check())
    while True:
    if mem_check() > 40:
    send_mail('内存报警', '内容如下: %s' % messages)
    print('内存报警已发送')
    time.sleep(120)

    if disk_check() > 60:
    send_mail('磁盘报警', '内容如下: %s' % messages)
    print('磁盘报警已发送')
    time.sleep(120)

    if cpu_check() > 30:
    send_mail('cpu报警', '内容如下: %s' % messages)
    print('cpu报警已发送')
    time.sleep(120)
    if __name__=='__main__':
    main()

     

    ——————————————————————分割线————————————————————————————

  • 相关阅读:
    Memcached:高性能的分布式内存缓存服务器
    MySQL数据库Query的优化
    MySQL数据库的锁定机制及优化
    系统架构及实现对性能的影响(一)
    Mysql数据库的基本结构和存储引擎简介
    Spring事务管理的回滚
    穷举算法实例
    在写完全二叉树的构建及遍历
    Inotify
    Rsync扩展
  • 原文地址:https://www.cnblogs.com/feige2L/p/10969454.html
Copyright © 2020-2023  润新知