为什么要有函数?
函数式编程定义一次, 多出调用
函数在一定程度上可以理解为变量
函数的内存地址加上 () 就是调用
函数本身也可以当做参数去传参
不用函数:
组织结构不清晰
代码的重复性
- def test():#test 就是函数名, 里面的代码块就是值
- print('你好')
- print(test) #函数不加(), 则只返回内存地址
- def bar(x):#x 叫形参
- print(x)
- bar('s')#s 叫实参
- def foo(x, y=2):#y 相当于默认值, 如果传参数会把 y 覆盖, 如果不传参数默认就是 2
- print(x + y)
- foo(x=2,y=9)
- def bar(*args):
- print(args)#args 返回的是一个元组, args 名字可以自定义,* 必须有
- print(*args) #返回输入值
- bar(1,2,3,4,5,6,7,8,'x')
- def bar(**shenchenlin):
- print(shenchenlin)#kwargs 返回的是一个字典, kwargs 名字可以自定义,** 是必须有的
- bar(name='申晨林', age='25')
- # return 返回, 把函数的执行结果返回, return 下面的代码不会执行
- def test(x, y):
- return x + y
- def bar(x,y):
- return x + y
- res = bar(test(1,2), 100)
- # 监控
- # 如果 c 盘使用率超过 10%,print(CPU 使用率超过 10%)
- # 如果内存使用率超过 80%,print(内存使用率超过 80%)
- # 如果 CPU 使用率超过 70%,print(CPU 使用率超过 70%)
- import psutil
- import yagmail
- info = {}
- def disk():
- disk_total = int(psutil.disk_usage('c:')[0]/1024/1024/1024)
- disk_used = int(psutil.disk_usage('c:')[1]/1024/1024/1024)
- disk_free = int(psutil.disk_usage('c:')[2]/1024/1024/1024)
- disk_percent = psutil.disk_usage('c:')[3]
- disk_info = {
- 'disk_total':disk_total,
- 'disk_used': disk_used,
- 'disk_free': disk_free,
- 'disk_percent': disk_percent
- }
- return disk_info
- def mem():
- mem_total = int(psutil.virtual_memory()[0]/1024/1024)
- mem_free = int(psutil.virtual_memory()[1]/1024/1024)
- mem_percent = psutil.virtual_memory()[2]
- mem_used = int(psutil.virtual_memory()[3]/1024/1024)
- mem_info = {
- 'mem_total': mem_total,
- 'mem_free': mem_free,
- 'mem_percent': mem_percent,
- 'mem_used': mem_used
- }
- return mem_info
- def CPU():
- cpu_percent = psutil.cpu_percent(1)
- cpu_info = {
- 'cpu_percent': cpu_percent
- }
- return cpu_info
- def sendmail(subject,contents):
- yag = yagmail.SMTP(user='18618250232@163.com', password='lizhaoqwe123123', host='smtp.163.com')
- yag.send(to='18618250232@163.com', cc='18618250232@163.com', subject=subject, contents=contents)
- yag.close()
- def main():
- disk_info = disk()
- mem_info = mem()
- cpu_info = CPU()
- info.update(disk_info)
- info.update(mem_info)
- info.update(cpu_info)
- msg = '硬盘总大小:%sG\n 硬盘使用大小:%sG\n 硬盘剩余大小:%sG\n 硬盘使用率:%s%%\n 内存总大小:%sM\n 内存剩余大小:%sM\n 内存使用率:%s%%\n 内存使用大小:%sM\ncpu 使用率:%s%%' % (info['disk_total'],info['disk_used'],info['disk_free'],info['disk_percent'],info['mem_total'],info['mem_free'],info['mem_percent'],info['mem_used'],info['cpu_percent'])
- if info['disk_percent']> 80:
- sendmail('邮件报警',msg)
- if __name__ == '__main__':
- main()
if __name__=='main': 命令的理解与练习
- print('恋习 Python')
- def main():
- print('恋习 Python')
- if __name__ == '__main__':
- main()
- print('跟着菜鸟分析, 练习 Python 越练越恋')
其运行原理也就是:
由于每个 python 模块 (python 文件) 都包含内置的变量__name__,
当运行模块被执行的时候,__name__等于文件名(包含了后缀. py).
如果 import 到其他模块中, 则__name__等于模块名称(不包含后缀. py).
而 "__main__" 等于当前执行文件的名称(包含了后缀. py). 所以当模块
被直接执行时,__name__ == '__main__'结果为真; 而当模块被 import 到
其他模块中时,__name__ == '__main__'结果为假, 就是不调用对应的方法.
- # 随机生成验证码
- import random # 导入模块
- def v_code(): # 验证码一般用循环 数字和字母相平的验证码
- res="" # 验证码是字符串 首先有个初始值
- for i in range(5): #5 表示验证码 5 个随机数
- num = random.randint(0,9) # 取到的数字
- alf = chr(random.randint(65,90) )#chr chr()函数是输入一个整数[0,255] 返回其对应的 ascii 符号
- s = str(random.choice([num, alf]))# 做字符的转换
- #res += random.choice([num, alf]) # 让字母和数字随机拼接起来, choice 在 s1 和 s2 里面随机选择一个.
- res +=s # 这是上面步骤的简写
- return res # 返回的是字符串平接的结果
- print(v_code())# 调用函数
匿名函数: 没有名字函数 ********
- def test(x,y):
- return x+y
- res = test(1,2)
- print(res)
- sum = lambda x,y: x+y
- print(sum(1,2))
- info = {
- 'li':2000,
- 'zhao':35000,
- 'wu': 25000,
- 'du': 30000
- }
- def func(k):
- return info[k]
- # 通过 value 比较取 KEY
- res = max(info,key=func)
- print(res)
- max
- print(max(info,key=lambda k: info[k]))
sorted 排序
print(sorted(info,key=lambda k: info[k],reverse=True))
map 映射
- name = ['zhao', 'du', 'wu']
- def test(name):
- return '%s_NB' % name
- res = map(lambda n:'%s_NB' % n, name)
- print(list(res))
filter 过滤
- name = ['zhao_NB', 'du_NB', 'wu']
- res = filter(lambda k: k.endswith('NB'), name)
- print(list(res))
来源: http://www.bubuko.com/infodetail-2996754.html