python四:函数练习--小白博客

为什么要有函数?
函数式编程定义一次,多出调用
函数在一定程度上可以理解为变量
函数的内存地址加上()就是调用
函数本身也可以当做参数去传参

不用函数:
组织结构不清晰
代码的重复性

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()函数是输入一个整数【0255】返回其对应的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))

 




posted @ 2019-03-23 11:20  夜风2019  阅读(367)  评论(0编辑  收藏  举报