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

我与影子孤独终老i 提交于 2019-12-27 09:52:54

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:\Users\Administrator.USER-20190512NQ\Desktop\sed.txt'])   #可加附件
断开连接
yag.close()

 

3.完整代码:

 

import psutilimport yagmailimport timedef 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.9def 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('内存报警', '内容如下:\n %s' % messages)            print('内存报警已发送')            time.sleep(120)        if disk_check() > 60:            send_mail('磁盘报警', '内容如下:\n %s' % messages)            print('磁盘报警已发送')            time.sleep(120)        if cpu_check() > 30:            send_mail('cpu报警', '内容如下:\n %s' % messages)            print('cpu报警已发送')            time.sleep(120)if __name__=='__main__':    main()

 

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!