python 模块
函数
一、定义和使用函数
def
函数名(参数):
...
函数体
...
函数的定义主要有如下要点:
- def:表示函数的关键字
- 函数名:函数的名称,日后根据函数名调用函数
- 函数体:函数中进行一系列的逻辑计算,如:发送邮件、计算出 [11,22,38,888,2]中的最大数等...
- 参数:为函数体提供数据
- 返回值:当函数执行完毕后,可以给调用者返回数据
1、返回值
函数是一个功能块,该功能到底执行成功与否,需要通过返回值来告知调用者。
1 def 发送短信(): 2 3 发送短信的代码... 4 5 if 发送成功: 6 return True 7 else: 8 return False 9 10 11 while True: 12 13 # 每次执行发送短信函数,都会将返回值自动赋值给result 14 # 之后,可以根据result来写日志,或重发等操作 15 16 result = 发送短信() 17 if result == False: 18 记录日志,短信发送失败...
2、参数
为什么有参数
1 def CPU报警邮件() 2 #发送邮件提醒 3 连接邮箱服务器 4 发送邮件 5 关闭连接 6 7 def 硬盘报警邮件() 8 #发送邮件提醒 9 连接邮箱服务器 10 发送邮件 11 关闭连接 12 13 def 内存报警邮件() 14 #发送邮件提醒 15 连接邮箱服务器 16 发送邮件 17 关闭连接 18 19 while True: 20 21 if cpu利用率 > 90%: 22 CPU报警邮件() 23 24 if 硬盘使用空间 > 90%: 25 硬盘报警邮件() 26 27 if 内存占用 > 80%: 28 内存报警邮件() 29 30 无参数实现
1 def 发送邮件(邮件内容) 2 3 #发送邮件提醒 4 连接邮箱服务器 5 发送邮件 6 关闭连接 7 8 9 while True: 10 11 if cpu利用率 > 90%: 12 发送邮件("CPU报警了。") 13 14 if 硬盘使用空间 > 90%: 15 发送邮件("硬盘报警了。") 16 17 if 内存占用 > 80%: 18 发送邮件("内存报警了。") 19 20 有参数实现
函数的有三中不同的参数:
- 普通参数
- 默认参数
- 动态参数
1 # ######### 定义函数 ######### 2 3 # name 叫做函数func的形式参数,简称:形参 4 def func(name): 5 print name 6 7 # ######### 执行函数 ######### 8 # 'wupeiqi' 叫做函数func的实际参数,简称:实参 9 func('wupeiqi') 10 11 普通参数
1 def func(name, age = 18): 2 3 print "%s:%s" %(name,age) 4 5 # 指定参数 6 func('wupeiqi', 19) 7 # 使用默认参数 8 func('alex') 9 10 注:默认参数需要放在参数列表最后 11 12 默认参数
1 def func(*args): 2 3 print args 4 5 6 # 执行方式一 7 func(11,33,4,4454,5) 8 9 # 执行方式二 10 li = [11,2,2,3,3,4,54] 11 func(*li) 12 13 动态参数-序列
1 def func(**kwargs): 2 3 print args 4 5 6 # 执行方式一 7 func(name='wupeiqi',age=18) 8 9 # 执行方式二 10 li = {'name':'wupeiqi', age:18, 'gender':'male'} 11 func(**li) 12 13 动态参数-字典
1 def func(*args, **kwargs): 2 3 print args 4 print kwargs
def show(*hehe,**hehes): print(hehe,type(hehe)); print(hehes, type(hehes)); #show(11,22,"cc",apple=6000,huawei=5000); a=(11,22,"cc"); b={"apple":6000,"huawei":5000}; show(*a,**b);
扩展:发送邮件
1 #!/usr/bin/python env 2 3 import smtplib; 4 from email.mime.text import MIMEText; 5 from email.utils import formataddr; 6 7 8 def email(user): 9 ret = True; 10 try: 11 msg = MIMEText('邮件内容', 'plain', 'utf-8'); 12 msg['From'] = formataddr(["潘彪", 'pb@zhid.com']); 13 msg['To'] = formataddr(["呵呵", '5472@qq.com']); 14 msg['Subject'] = "主题"; 15 server = smtplib.SMTP("smtp.ym.163.com", 25); 16 server.login("pb@zhid.com", "ggg"); 17 server.sendmail('pb@zhid.com', [user, ], msg.as_string()); 18 server.quit(); 19 except Exception: 20 ret = False; 21 return ret; 22 23 24 ret = email('5472@qq.com'); 25 # print(ret); 26 # ret(); 27 28 if ret == True: 29 print("邮件发送成功!"); 30 else: 31 print("邮件发送失败!");
3、使用动态参数实现字符串格式化
s1 = "{0} is {1}"; ##retsult = s1.format('heh','xixi'); l=['hehe','cici']; retsult = s1.format(*l) print(retsult); s1 = "{name} is {acter}"; d = {"name":"cici","acter":"hah"}; #result = s1.format(name="cici",acter="hah"); result = s1.format(**d) print(result);
lambda表达式
学习条件运算时,对于简单的 if else 语句,可以使用三元运算来表示,即:
# 普通条件语句 if 1 == 1: name = 'hehe' else: name = 'cici' # 三元运算 name = 'hehe' if 1 == 1 else 'cici'
对于简单的函数,也存在一种简便的表示方式,即:lambda表达式
#lambda表达式 def req(a): b = a+1; return b; ret = req(10); print(ret); #创建形式参数a #函数内容:a+1 并且把结果return func = lambda a: a+1; result = func(10); print("{}".format(result));
lambda存在意义就是对简单函数的简洁表示
内置函数
map和filter的差别
##map函数
cc = [11,22,33,44,] #定义一个列表
aa = map(lambda x:x+100,cc) #map函数,将cc里面的元素分别用lambda里面的表达式执行
print(list(aa))
[111, 122, 133, 144]
#用函数表示
def jia(x):
x = x + 100;
return x;
gg = map(jia,cc)
print(list(gg))
[111, 122, 133, 144]
#filter函数
cc = [11,22,33,44,]
def fil(m):
if m<33:
return True;
else:
return False;
rr = filter(fil,cc);
print(list(rr))
[11, 22]
详细: https://docs.python.org/3/library/functions.html#next
1 def CPU报警邮件() 2 #发送邮件提醒 3 连接邮箱服务器 4 发送邮件 5 关闭连接 6 7 def 硬盘报警邮件() 8 #发送邮件提醒 9 连接邮箱服务器 10 发送邮件 11 关闭连接 12 13 def 内存报警邮件() 14 #发送邮件提醒 15 连接邮箱服务器 16 发送邮件 17 关闭连接 18 19 while True: 20 21 if cpu利用率 > 90%: 22 CPU报警邮件() 23 24 if 硬盘使用空间 > 90%: 25 硬盘报警邮件() 26 27 if 内存占用 > 80%: 28 内存报警邮件()