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()
——————————————————————分割线————————————————————————————
来源:https://www.cnblogs.com/feige2L/p/10969454.html